Merge branch 'advc' of http://hylee@vcs.iten.co.kr:9999/hylee/mjon_git into advc
This commit is contained in:
commit
8f92c9779a
@ -655,8 +655,8 @@ function customLinkPage(mberId){
|
||||
</td>
|
||||
</c:if>
|
||||
<td <c:if test="${result.smishingYn eq 'Y'}">class="smishing"</c:if> title="<c:out value="${result.loginLastDate}"/>">
|
||||
<fmt:parseDate value="${result.loginLastDate}" var="loginLastDateValue" pattern="yyyy-MM-dd HH:mm"/>
|
||||
<fmt:formatDate value="${loginLastDateValue}" pattern="MM-dd HH:mm"/>
|
||||
<%-- <fmt:parseDate value="${result.loginLastDate}" var="loginLastDateValue" pattern="yyyy-MM-dd HH:mm"/>
|
||||
<fmt:formatDate value="${loginLastDateValue}" pattern="MM-dd HH:mm"/> --%>
|
||||
</td>
|
||||
</tr>
|
||||
<c:if test="${userSearchVO.mberSttus == 'B'}">
|
||||
|
||||
@ -652,14 +652,14 @@
|
||||
<fmt:formatNumber value="${result.amtRefundSum}" pattern="#,###" />
|
||||
</td>
|
||||
<td class="right c_999999">
|
||||
<c:choose>
|
||||
<%-- <c:choose>
|
||||
<c:when test="${result.amtTotSum > 0}">
|
||||
<fmt:formatNumber value="${result.amtTotSum}" pattern="#,###" />
|
||||
</c:when>
|
||||
<c:otherwise>
|
||||
<fmt:formatNumber value="${result.amtTotSum}" pattern="#,###" />
|
||||
</c:otherwise>
|
||||
</c:choose>
|
||||
</c:choose> --%>
|
||||
</td>
|
||||
</tr>
|
||||
</c:forEach>
|
||||
|
||||
@ -4,41 +4,48 @@
|
||||
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
|
||||
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
|
||||
|
||||
|
||||
<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/web/addr/fax/faxTabulator.js'/>?v=20241031"></script>
|
||||
<script type="text/javascript" src="<c:url value='/js/web/addr/fax/faxEvent.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>
|
||||
|
||||
<script type="text/javascript">
|
||||
var tableErrorData = [];
|
||||
var tableErrorCheckData = [];
|
||||
var addrMassDupliSaveList = null;
|
||||
|
||||
$(document).ready(function(){
|
||||
listAddrGrp();
|
||||
addrLoadAjax();
|
||||
|
||||
// 주소록 대량등록
|
||||
addrMassTab(1);
|
||||
|
||||
// 중복 팩스번호 버튼 노출여부
|
||||
$("#btnAddrMassDupli").hide();
|
||||
$("#btnAddrMassSaveDupli").hide();
|
||||
// excel 오류정보 테스트
|
||||
$('#errorExcelBtn').click(function(){
|
||||
if($tableError.getDataCount()<1){
|
||||
alert('오류 정보가 없습니다.');
|
||||
return false;
|
||||
}
|
||||
$tableError.download("xlsx", "error_data.xlsx");
|
||||
});
|
||||
});
|
||||
|
||||
// 메인 화면 좌측메뉴 최신화
|
||||
function listAddrGrp(){
|
||||
var sendData = $(document.searchAddrGrpForm).serializeArray() ;
|
||||
$("#adr1_left").load("/web/mjon/fax/addr/selectFaxAddrGroupListAjax.do", sendData ,function(response, status, xhr){});
|
||||
}
|
||||
|
||||
function addrGroupLoadAjax(){
|
||||
$("#addrRegistSelect").load("/web/mjon/fax/addr/selectFaxAddrGroupAjax.do", function(response, status, xhr){});
|
||||
$("#funcAddrGroupSelect").load("/web/mjon/fax/addr/selectFaxAddrGroupAjax.do", function(response, status, xhr){});
|
||||
}
|
||||
|
||||
function addrLoadAjax(){
|
||||
$("#adr1_right").load("/web/mjon/fax/addr/selectFaxAddrAjax.do", function(response, status, xhr){tableAllChk();});
|
||||
addrGroupLoadAjax();
|
||||
}
|
||||
|
||||
function addrGroupLoadAjax(){
|
||||
$("#addrRegistSelect").load("/web/mjon/fax/addr/selectFaxAddrGroupAjax.do", function(response, status, xhr){});
|
||||
$("#funcAddrGroupSelect").load("/web/mjon/fax/addr/selectFaxAddrGroupAjax.do", function(response, status, xhr){});
|
||||
}
|
||||
|
||||
|
||||
// 주소록그룹추가
|
||||
function insertAddrGroupAjax() {
|
||||
var form = document.addrGrpInsertForm;
|
||||
if(form.addrGrpNm.value == "") {
|
||||
@ -75,13 +82,10 @@ function insertAddrGroupAjax() {
|
||||
},
|
||||
error: function (e) { alert("저장에 실패하였습니다."); console.log("ERROR : ", e); }
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
function insertAddrAjax() {
|
||||
var selectVal = $("#addrRegistSelect option:selected").val();
|
||||
//alert(selectVal);
|
||||
|
||||
var form = document.addrInsertForm;
|
||||
|
||||
if(form.addrPhoneNo.value == "") {
|
||||
@ -157,7 +161,7 @@ function linkPage(pageNo){
|
||||
|
||||
function moveTab(type){
|
||||
if(type == "addr") location.href="/web/mjon/addr/selectAddrList.do";
|
||||
if(type == "fax") location.href="/web/mjon/fax/addr/selectFaxAddrList.do";
|
||||
if(type == "fax") location.href="/web/mjon/fax/addr/selectFaxAddrList.do";
|
||||
if(type == "block") location.href="/web/mjon/addrBlock/selectBlockList.do";
|
||||
if(type == "addrMob") location.href="/web/mjon/addr/addrMobGuide.do";
|
||||
if(type == "addrApply") location.href="/web/mjon/addragency/selectAddrAgencyList.do";
|
||||
@ -178,152 +182,6 @@ var excelAddr = []; //엑셀 불러오기에서 내용 저장하는 배열 변
|
||||
|
||||
$(document).ready(function(){
|
||||
//Tabulator AJAX Data Loading
|
||||
tableR = new Tabulator(".callList_box", {
|
||||
height:"255px",
|
||||
width:"100%",
|
||||
layout:"fitColumns",
|
||||
//data:tabledata,
|
||||
//autoColumns:true,
|
||||
headerHozAlign:"center",
|
||||
validationMode:"highlight",
|
||||
clipboard:false,
|
||||
clipboardCopySelector:"table",
|
||||
clipboardPasteAction:"insert", // insert, update, replace
|
||||
placeholder:"복사(Ctrl+C)한 내용을 여기에 붙여넣기(Ctrl+V) 해주세요.", //fit columns to width of table (optional)
|
||||
columns:[ //Define Table Columns
|
||||
{formatter:"rowSelection", titleFormatter:"rowSelection",clipboard:false, hozAlign:"center", headerSort:false, cellClick:function(e, cell){
|
||||
cell.getRow().toggleSelect();
|
||||
}
|
||||
},
|
||||
{title:"이름", hozAlign:"center", field:"name", editor:"input", width:140, validator:["maxLength:12", "string"]},
|
||||
{title:"팩스번호", hozAlign:"center", field:"phone", editor:"input", width:145, validator:["required","minLength:10", "maxLength:13"]},
|
||||
{title:"메모", hozAlign:"center", field:"memo", editor:"input", width:119, validator:["maxLength:100", "string"]}
|
||||
],
|
||||
validationFailed:function(cell, value, parameters){ // 유효성 체크 함수
|
||||
var valid = cell.isValid();
|
||||
if(!valid){
|
||||
alert("양식에 맞지 않는 정보가 입력되었습니다.");
|
||||
|
||||
//해당 셀 데이터 삭제
|
||||
cell.setValue("");
|
||||
}
|
||||
return value % parameters.phone;
|
||||
},
|
||||
});
|
||||
|
||||
//받는 사람 리스트 영역에 클립보드 데이터 가져와보기
|
||||
$('.callList_box').on('paste', function (e) {
|
||||
var element = e.originalEvent.clipboardData.getData('text'); // 클립보드에 복사한 데이터 가져오기
|
||||
var elmSplit= [];
|
||||
elmSplit = element.split("\n");
|
||||
var elmLen = elmSplit.length;
|
||||
if(elmLen < 0){
|
||||
alert("붙여넣을 연락처를 복사해주세요.");
|
||||
return false;
|
||||
}else{
|
||||
if (elmLen > 20001) {
|
||||
alert("2만줄 이상의 업로드는 데이터 부하로 업로드 할수 없습니다.");
|
||||
return false;
|
||||
}
|
||||
|
||||
tableErrorData.length = 0; // 오류 번호 배열 초기화
|
||||
|
||||
var splitData = [];
|
||||
var realPhone = [];
|
||||
for(var i=0; i < elmLen; i++){
|
||||
var splitStr = elmSplit[i];
|
||||
var tabData = splitStr.split("\t"); //탭 구분으로 데이터 분할
|
||||
var comData = splitStr.split(","); //콤마 구분으로 데이터 분할
|
||||
if(tabData.length >= 2){
|
||||
splitData = tabData;
|
||||
}else{
|
||||
splitData = comData;
|
||||
}
|
||||
|
||||
if(splitData.length == 0){// 데이터가 없는경우
|
||||
alert("탭으로 구분하여 데이터를 복사해 주세요.");
|
||||
return false;
|
||||
}else if(splitData.length == 1){// 데이터가 탭으로 구분이 없는 경우
|
||||
for(var j=0; j < splitData.length; j++){
|
||||
if(checkFaxNum(splitData[j].trim())){//팩스 타입인 번호만 저장해준다.
|
||||
//배열 끝에 데이터 추가해 주기
|
||||
realPhone.push({name: "", phone: removeDash(splitData[j].trim())});
|
||||
}
|
||||
else {
|
||||
if (splitData[j].trim() != '' && splitData[j].trim() != null && splitData[j].trim() != undefined) {
|
||||
tableErrorData.push(splitData[j].trim());
|
||||
}
|
||||
}
|
||||
}
|
||||
}else{//데이터가 탭으로 구분되어 이름, 연락처로 구분된 경우
|
||||
var name; //이름
|
||||
var phone; //핸드폰번호
|
||||
var memo; //메모
|
||||
var isPhoneValid = false;
|
||||
for(var j=0; j < splitData.length; j++){
|
||||
if(j == 0){
|
||||
name = splitData[j].trim();
|
||||
}
|
||||
if(j == 1){
|
||||
if(checkFaxNum(splitData[j].trim())){//팩스 타입인 번호만 저장해준다.
|
||||
phone = removeDash(splitData[j].trim());
|
||||
isPhoneValid = true;
|
||||
}
|
||||
else {
|
||||
if (splitData[j].trim() != '' && splitData[j].trim() != null && splitData[j].trim() != undefined) {
|
||||
tableErrorData.push(splitData[j].trim());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(j == 2){ //메모
|
||||
memo = splitData[j].trim();
|
||||
}
|
||||
}
|
||||
|
||||
if (isPhoneValid == true) {
|
||||
//배열 끝에 데이터 추가해 주기
|
||||
realPhone.push({name: name, phone: phone, memo : memo });
|
||||
}
|
||||
}//else end
|
||||
}
|
||||
|
||||
var recTableData = tableR.getRows(); // 받는사람 리스트의 전체 목록을 저장
|
||||
var tableData = [];
|
||||
|
||||
//기존 받는사람 리스트를 배열에 미리 담아둔다.
|
||||
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});
|
||||
}
|
||||
}
|
||||
|
||||
if(realPhone.length > 0){
|
||||
for(var j=0; j < realPhone.length; j++){
|
||||
tableData.push({name: realPhone[j].name, phone: removeDash(realPhone[j].phone.trim()), memo: realPhone[j].memo});
|
||||
}
|
||||
}
|
||||
|
||||
//tableData.push(realPhone);
|
||||
|
||||
//중복 연락처 1개만 남기고 삭제하기
|
||||
var removeDuplPhone = dupliPhoneData(tableData);
|
||||
|
||||
//수신자 리스트에 전화번호 추가해주기
|
||||
//tableR.addData(removeDuplPhone);
|
||||
tableR.setData(removeDuplPhone);
|
||||
|
||||
totRows = tableR.getRows().length;
|
||||
updateTotCnt(totRows); //전체 데이터 갯수 구하기
|
||||
|
||||
if (tableErrorData.length > 0) {
|
||||
alert("올바르지 않은 팩스 번호가 "+ tableErrorData.length +" 건 있습니다.");
|
||||
//for(var x=0; x < tableErrorData.length; x++){
|
||||
// alert(tableErrorData[x]);
|
||||
//}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
//tableR.setData(tabledata);
|
||||
|
||||
@ -352,49 +210,6 @@ $(document).ready(function(){
|
||||
updateTotCnt(totRows);
|
||||
});
|
||||
|
||||
|
||||
//받는사람 전체삭제 버튼 처리
|
||||
$('.all_del').click(function(){
|
||||
var data = tableR.getRows();
|
||||
if(data == null || data == ""){
|
||||
alert("받는사람을 추가해 주세요.");
|
||||
return false;
|
||||
}else{
|
||||
tableR.clearData();
|
||||
$("#rowTotCnt").text(0); //총건수 수정
|
||||
$("#rowDupCnt").text(0); //중복건수 수정
|
||||
dupliPhoneDataRealList.length = 0; // 중복 팩스번호 초기화
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
|
||||
// 받는사람 선택삭제 버튼 처리해주기
|
||||
$('.select_del').click(function(){
|
||||
$("#rowDupCnt").text(0); //중복건수 수정
|
||||
dupliPhoneDataRealList.length = 0; // 중복 팩스번호 초기화
|
||||
|
||||
if(tableR == null || tableR == ""){
|
||||
alert("받는사람을 추가해 주세요.");
|
||||
return false;
|
||||
}
|
||||
|
||||
var selectedData = tableR.getSelectedRows();
|
||||
|
||||
if(selectedData == "" || selectedData == null){
|
||||
alert("받는 사람을 선택해 주세요.");
|
||||
return false;
|
||||
}else{ // 선택한 Row 데이터 삭제하기
|
||||
for(var i=0; i < selectedData.length; i++){
|
||||
selectedData[i].delete();
|
||||
}
|
||||
}
|
||||
|
||||
totRows = tableR.getRows().length;
|
||||
|
||||
updateTotCnt(totRows);
|
||||
});
|
||||
|
||||
//받는사람 오류번호 삭제 처리해주기
|
||||
$('.chkVali_del').click(function(){
|
||||
//기존 연락처 모두 불러오기
|
||||
@ -573,8 +388,6 @@ $(document).ready(function(){
|
||||
totRows = tableR.getRows().length;
|
||||
updateTotCnt(totRows);
|
||||
});
|
||||
|
||||
|
||||
});
|
||||
|
||||
|
||||
@ -822,9 +635,13 @@ $(document).on('click', '#btnAddrMassClose', function() {
|
||||
|
||||
// 대량등록 닫기
|
||||
function setAddrMassClose() {
|
||||
tableR.clearData();
|
||||
$("#rowTotCnt").text(0); //총건수 수정
|
||||
$("#rowDupCnt").text(0); //중복건수 수정
|
||||
var $objTabul = fn_utils_getTabulator();
|
||||
$objTabul.clearData();
|
||||
|
||||
$("#rowTotCnt").text(0); //총건수 수정
|
||||
$("#rowDupCnt").text(0); //중복건수 수정
|
||||
$("#rowErrorCnt").text(0); //오류건수 수정
|
||||
|
||||
dupliPhoneDataRealList.length = 0; // 중복 팩스번호 초기화
|
||||
addrMassDupliSaveList = null;
|
||||
|
||||
@ -834,7 +651,8 @@ function setAddrMassClose() {
|
||||
//location.reload();
|
||||
listAddrGrp();
|
||||
addrGroupLoadAjax();
|
||||
addrLoadAjax();
|
||||
addrLoadAjax();
|
||||
fn_errorPopClean(); // 에러 팝업 초기화
|
||||
}
|
||||
|
||||
// 주소록 그룹 중복체크
|
||||
@ -869,7 +687,15 @@ function getAddrGroupDuplCheckAjax() {
|
||||
//저장
|
||||
function SetAddrMassSave(){
|
||||
|
||||
var selectedData = tableR.getRows();
|
||||
var selectedData = $tableExcel.getRows();
|
||||
var columns = $tableExcel.getColumns();
|
||||
var isAddrFaxNoSelected = columns.some(column => column.getField() === 'addrFaxNo');
|
||||
|
||||
if (!isAddrFaxNoSelected) {
|
||||
alert('팩스번호가 선택되지 않았습니다.');
|
||||
return false;
|
||||
}
|
||||
|
||||
if (selectedData == "" || selectedData == null) {
|
||||
alert("한 개 이상의 연락처를 입력하세요");
|
||||
return false;
|
||||
@ -879,9 +705,6 @@ function SetAddrMassSave(){
|
||||
return false;
|
||||
}
|
||||
|
||||
// 주소록 이름에 이모지 체크
|
||||
// if(!addrEmojiCheck(selectedData, tableR)) return false;
|
||||
|
||||
var selectMassVal = $("#addrGrpIdInfo option:selected").val();
|
||||
|
||||
var loginVO = '${LoginVO}';
|
||||
@ -921,11 +744,10 @@ function SetAddrMassSave(){
|
||||
if (confirm(confirmMsg)) {
|
||||
|
||||
for (var i=0; i < selectedData.length; i++) {
|
||||
var name = tableR.getRows()[i].getData().name;
|
||||
var phone = removeDash(tableR.getRows()[i].getData().phone);
|
||||
var memo = tableR.getRows()[i].getData().memo;
|
||||
var name = $tableExcel.getRows()[i].getData().addrNm;
|
||||
var phone = removeDash($tableExcel.getRows()[i].getData().addrFaxNo);
|
||||
var memo = $tableExcel.getRows()[i].getData().addrMemo;
|
||||
|
||||
phoneList[i] = phone;
|
||||
// name
|
||||
if (name == "" || name == null || name == undefined) {
|
||||
nameList[i] = "";
|
||||
@ -934,10 +756,12 @@ function SetAddrMassSave(){
|
||||
if(!addrEmojiCheck(name)){//이모지 체크 해주기
|
||||
return false;
|
||||
}
|
||||
|
||||
nameList[i] = name.replace(/,/g,"§");
|
||||
}
|
||||
|
||||
// memo
|
||||
phoneList[i] = phone;
|
||||
|
||||
// memo
|
||||
if (memo == "" || memo == null || memo == undefined) {
|
||||
memoList[i] = "";
|
||||
@ -980,13 +804,9 @@ function SetAddrMassSave(){
|
||||
|
||||
// 중복건이 있을경우
|
||||
if (returnData.dupliCnt > 0) {
|
||||
//alert(returnData.addrMassDupliList.length);
|
||||
|
||||
// 중복번호(해당 그룹) Show
|
||||
$("#btnAddrMassSaveDupli").show();
|
||||
|
||||
addrMassDupliSaveList = returnData.addrMassDupliList;
|
||||
//$("#btnAddrMassSaveDupli").trigger("click");
|
||||
}
|
||||
|
||||
// 데이터 비우기
|
||||
@ -1027,18 +847,20 @@ function SetClear() {
|
||||
// 주소록 그룹정보 불러오기
|
||||
getAddrGroupList();
|
||||
|
||||
var data = tableR.getRows();
|
||||
var data = $tableExcel.getRows();
|
||||
if (data == null || data == "") {
|
||||
}
|
||||
else {
|
||||
tableR.clearData();
|
||||
$("#rowTotCnt").text(0); //총건수 수정
|
||||
$("#rowDupCnt").text(0); //중복건수 수정
|
||||
|
||||
}else{
|
||||
$tableExcel.clearData();
|
||||
$("#rowTotCnt").text(0); //총건수 초기화
|
||||
$("#rowDupCnt").text(0); //중복건수 초기화
|
||||
$("#rowErrorCnt").text(0); //오류건수 초기화
|
||||
dupliPhoneDataRealList.length = 0; // 중복 팩스번호 초기화
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//주소 대량등록 버튼 클릭
|
||||
//AddrListAjax.jsp에서 호출
|
||||
$(document).on('click', '#btnAddrMassRegCall', function() {
|
||||
getAddrGroupList();
|
||||
});
|
||||
@ -1052,8 +874,7 @@ function getAddrGroupList() {
|
||||
data : {},
|
||||
dataType:'json',
|
||||
success : function(data) {
|
||||
//alert(JSON.stringify(data.addrGroupList));
|
||||
|
||||
|
||||
// Show Html
|
||||
getAddrGroupListShow(data.addrGroupList);
|
||||
},
|
||||
@ -1064,12 +885,13 @@ function getAddrGroupList() {
|
||||
});
|
||||
}
|
||||
|
||||
// Show Html
|
||||
// 그룹데이터 노출
|
||||
function getAddrGroupListShow(jsonList) {
|
||||
var sHtml = "";
|
||||
sHtml += "<option value='NEW'>그룹추가</option>";
|
||||
sHtml += "<option value='0'>그룹미지정</option>";
|
||||
sHtml += "<option value='bookmark'>자주보내는 번호</option>";
|
||||
|
||||
for (var j = 0; j < jsonList.length; j++) {
|
||||
sHtml += " <option value='" + $.trim(jsonList[j].addrGrpId) + "' />" + $.trim(jsonList[j].addrGrpNm) + "</option>";
|
||||
}
|
||||
@ -1086,12 +908,6 @@ $(document).on('change', '#addrGrpIdInfo', function() {
|
||||
//#############################################################################################
|
||||
//파일 불러오기
|
||||
//#############################################################################################
|
||||
|
||||
//엑섹불러오기 버튼 클릭시 파일 첨부 실행
|
||||
$(document).on('click', '.c3', function() {
|
||||
$("#excelFile").click();
|
||||
});
|
||||
|
||||
//seetJs 엑셀 파일 불러오기
|
||||
function excelExport(event){
|
||||
var data = new FormData(document.excelForm);
|
||||
@ -1187,6 +1003,11 @@ function excelExport(event){
|
||||
}
|
||||
|
||||
}
|
||||
//#############################################################################################
|
||||
//파일 불러오기
|
||||
//#############################################################################################
|
||||
|
||||
|
||||
|
||||
//체크박스 전체선택/해제
|
||||
$(document).on("click", "#chkAll", function(e) {
|
||||
@ -1299,6 +1120,13 @@ function GetAddrMassSaveDupli() {
|
||||
$("#addrMassSaveDupli_layer").html(sHtml);
|
||||
}
|
||||
|
||||
//function fn_tabToggle('1')
|
||||
function fn_tabToggle(tabNum){
|
||||
var tabId = '#tab'+tabNum;
|
||||
$('.tab_c').hide();
|
||||
$(tabId).show();
|
||||
getAddrGroupList();
|
||||
}
|
||||
</script>
|
||||
|
||||
<div class="loading_layer">
|
||||
@ -1307,145 +1135,78 @@ function GetAddrMassSaveDupli() {
|
||||
<div class="text">Loading</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- 수신거부 대량등록 data-tooltip:adr_popup01 -->
|
||||
<form id="addrMassForm" name="addrMassForm" method="post">
|
||||
<input type="hidden" id="phoneList" name="phoneList" value=""/>
|
||||
<input type="hidden" id="nameList" name="nameList" value=""/>
|
||||
<input type="hidden" id="memoList" name="memoList" value=""/>
|
||||
<input type="hidden" id="addrGrpId" name="addrGrpId" value=""/>
|
||||
<div class="tooltip-wrap" id="addrMassLoad">
|
||||
<div class="popup-com adr_layer adr_popup01" tabindex="0" data-tooltip-con="adr_popup01" data-focus="adr_popup01" data-focus-prev="adr_popup01-close" style="width: 1000px;">
|
||||
|
||||
<div id="adrPopup_tab1">
|
||||
<!-- 주소록 대량등록 data-tooltip:adr_popup01 -->
|
||||
<form id="addrMassForm" name="addrMassForm" method="post">
|
||||
<input type="hidden" id="phoneList" name="phoneList" value=""/>
|
||||
<input type="hidden" id="nameList" name="nameList" value=""/>
|
||||
<input type="hidden" id="memoList" name="memoList" value=""/>
|
||||
<input type="hidden" id="addrGrpId" name="addrGrpId" value=""/>
|
||||
<div class="tooltip-wrap" id="addrMassLoad">
|
||||
<div class="popup-com adr_layer adr_popup01" tabindex="0" data-tooltip-con="adr_popup01" data-focus="adr_popup01" data-focus-prev="adr_popup01-close" style="width: 1000px;">
|
||||
<div class="popup_heading">
|
||||
<p>주소록 대량등록</p>
|
||||
<button type="button" class="tooltip-close" data-focus="adr_popup01-close" onclick="setAddrMassClose();"><img src="/publish/images/content/layerPopup_close.png" alt="팝업 닫기"></button>
|
||||
</div>
|
||||
<div class="layer_in" style="padding: 25px 30px;">
|
||||
<div class="list_tab_wrap2">
|
||||
<!-- tab button -->
|
||||
<ul class="list_tab" id="tbTabl">
|
||||
<li class="tab active" data-tabul="tableExcel"><button type="button" onclick="popupTab(this,'1'); fn_tabToggle('1');">엑셀입력</button></li>
|
||||
<li class="tab" data-tabul="tableClip"><button type="button" onclick="popupTab(this,'2'); fn_tabToggle('2');">붙여넣기</button></li>
|
||||
<li class="tab" data-tabul="tableSelf"><button type="button" onclick="popupTab(this,'3'); fn_tabToggle('3');">직접입력</button></li>
|
||||
</ul>
|
||||
<!--// tab button -->
|
||||
</div>
|
||||
<div id="tab1" class="tab_c tableExcel">
|
||||
<%@include file="/WEB-INF/jsp/web/fax/addr/include/FaxAddrListforExcel.jsp" %>
|
||||
</div>
|
||||
<div id="tab2" class="tab_c tableClip" style="display: none;">
|
||||
<%-- <%@include file="/WEB-INF/jsp/web/fax/addr/include/FaxAddrListforClipboard.jsp" %> --%>
|
||||
</div>
|
||||
<div id="tab3" class="tab_c tableSelf" style="display: none;">
|
||||
<%-- <%@include file="/WEB-INF/jsp/web/fax/addr/include/FaxAddrListforSelf.jsp" %> --%>
|
||||
</div>
|
||||
</div>
|
||||
<div class="popup_btn_wrap2" style="margin: 0 auto 30px auto;">
|
||||
<button type="button" id="btnAddrMassReg">등록</button>
|
||||
<button type="button" id="btnAddrMassClose" class="tooltip-close" data-focus="adr_popup01-close" data-focus-next="popup02">닫기</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<!-- 주소록 상세 결과 팝업 data-tooltip:adr_popup14 -->
|
||||
<div class="tooltip-wrap">
|
||||
<div class="popup-com adr_layer adr_popup14" tabindex="0" data-tooltip-con="adr_popup14" data-focus="adr_popup14" data-focus-prev="adr_popu14-close" style="width: 450px;">
|
||||
<div class="popup_heading">
|
||||
<p>주소록 대량등록</p>
|
||||
<button type="button" class="tooltip-close" data-focus="adr_popup01-close" onclick="setAddrMassClose();"><img src="/publish/images/content/layerPopup_close.png" alt="팝업 닫기"></button>
|
||||
</div>
|
||||
<div class="layer_in" style="padding: 25px 30px;">
|
||||
<div class="list_tab_wrap2">
|
||||
<!-- tab button -->
|
||||
<ul class="list_tab">
|
||||
<li class="tab active"><button type="button" onclick="popupTab(this,'1'); addrMassTab('1');">엑셀입력</button></li>
|
||||
<li class="tab"><button type="button" onclick="popupTab(this,'2'); addrMassTab('2');">붙여넣기</button></li>
|
||||
</ul><!--// tab button -->
|
||||
</div>
|
||||
<!-- 엑셀입력 -->
|
||||
<div class="popCont current pop_more_cont" id="popCont_1">
|
||||
<div class="titBox">
|
||||
<p>- 엑셀(EXCEL) 파일로 주소록을 한 번에 최대 2만건까지 등록하여 간편하게 발송 및 관리하실 수 있습니다.</p>
|
||||
<p>- 반드시 샘플파일을 다운로드하여 작성방법을 확인하신 후 정해진 양식에 맞추어 주소록을 작성하셔야 합니다.</p>
|
||||
<p> ※ 팩스 번호는 지역번호(02, 031, 033 등), 타사부가번호(030*, 050*, 060, 070, 080, 1**)로 시작하는 번호만 발송 가능합니다. </p>
|
||||
<p> ※ 주소록 관리 메뉴에서 다운로드 받으신 엑셀 파일 또한 업로드 양식에 맞추어 작성하셔야 하며, </p>
|
||||
<p> 주소록에 이미 등록된 팩스 번호는 업데이트 되지 않으므로 기존 주소록에서 해당 팩스 번호를 삭제한 후 재등록해 주시기 바랍니다.</p>
|
||||
<p>- 쉼표(,), 구분선(|), 역슬래시(\, ₩), 작은따옴표('), 큰따옴표(") 등 발송불가 특수문자는 저장되지 않습니다.</p>
|
||||
<p>- 팩스 번호는 필수입력 항목입니다.</p>
|
||||
<p>- 팩스번호 형태는 02-1234-5678 또는 0212345678 모두 가능합니다. 단, 공백은 허용되지 않습니다.</p>
|
||||
<p>- 엑셀 파일에 비밀번호 설정, 제한된 보기, 수식 등이 설정되어 있는 경우 업로드가 불가합니다.</p>
|
||||
<p>- 이름 20byte, 메모 250byte까지 입력 가능합니다.</p>
|
||||
<p>- 첨부가능 파일 : xlsx, xls(최대용량 3MB)</p>
|
||||
<p>- ‘오류 검사’를 통해 등록된 데이터에 팩스 번호 입력 오류를 확인하실 수 있습니다.</p>
|
||||
<p>- 주소록 등록이 어려우신 경우에는 주소록 입력대행 메뉴를 이용하시면 됩니다.</p>
|
||||
<button type="button" class="excel_btn" onclick="location.href='/download/addr/팩스주소록_대량등록.xlsx'"><i class="downroad"></i>샘플파일 다운로드</button>
|
||||
</div>
|
||||
<div class="pop_more_wrap">
|
||||
<button type="button" class="pop_more" onclick="popMore(this);">더보기<i></i></button>
|
||||
</div>
|
||||
</div><!--// 엑셀입력 -->
|
||||
|
||||
<!-- 붙여넣기 -->
|
||||
<div class="popCont pop_more_cont" id="popCont_2">
|
||||
<div class="titBox">
|
||||
<p>- 텍스트(txt) 파일로 작성된 주소록을 등록하실 수 있습니다.</p>
|
||||
<p>- 반드시 샘플파일을 다운로드하여 작성방법을 확인하신 후 정해진 양식에 맞추어 주소록을 붙여 넣으셔야 합니다.</p>
|
||||
<p> ※ 팩스 번호는 지역번호(02, 031, 033 등), 타사부가번호(030*, 050*, 060, 070, 080, 1**)로 시작하는 번호만 발송 가능합니다. </p>
|
||||
<p>- 입력 내용은 (Tab) 또는 (,) 구분하여 입력하여야 합니다.</p>
|
||||
<p>- 한 줄(열)에 주소 한 건만 입력 가능합니다.</p>
|
||||
<p>- 팩스 번호 형태는 02-1234-5678 또는 0212345678 모두 가능합니다. 단, 공백은 허용되지 않습니다.</p>
|
||||
<p> (예) 홍길동,02-1234-5678 또는 홍길동,0212345678</p>
|
||||
<p>- 한번에 많은 양의 데이터를 입력하시려면 ‘주소록 복사(Ctrl+c) + 붙여넣기(Ctrl+v)’ 또는 ‘엑셀입력’을 이용하세요.</p>
|
||||
<p>- 주소록 등록이 어려우신 경우에는 주소록 입력대행 메뉴를 이용하시면 됩니다.</p>
|
||||
<button type="button" class="txt_btn" onclick="location.href='/download/addr/팩스주소록_대량등록.zip'"><i></i>TXT샘플 다운로드</button>
|
||||
</div>
|
||||
<div class="pop_more_wrap">
|
||||
<button type="button" class="pop_more" onclick="popMore(this);">더보기<i></i></button>
|
||||
</div>
|
||||
</div><!--// 붙여넣기 -->
|
||||
|
||||
<!-- 공통 -->
|
||||
<div>
|
||||
<table class="layer_tType1">
|
||||
<caption>엑셀입력 표</caption>
|
||||
<colgroup>
|
||||
<col style="width: 95px">
|
||||
<col style="width: auto">
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<th>그룹 선택</th>
|
||||
<td>
|
||||
<label for="" class="label">그룹 선택</label>
|
||||
<select id="addrGrpIdInfo" name="addrGrpIdInfo">
|
||||
</select>
|
||||
<label for="" class="label">그룹명 입력</label>
|
||||
<input type="text" id="addrGrpNm" name="addrGrpNm" placeholder="새 그룹명을 입력해주세요." onfocus="this.placeholder=''" onblur="this.placeholder='새 그룹명을 입력해주세요.'"class="inputLight" style="width: 300px;">
|
||||
|
||||
<input type="file" id="excelFile" accept=".xls, .xlsx, .txt" onchange="excelExport(event); return false;" style="display:none"/>
|
||||
<button type="button" class="excel_btn2 btnType c3"><i class="uproad"></i>엑셀, TXT파일 업로드</button>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="file_add upload_area">
|
||||
<p><img src="/publish/images/content/file_add.png" alt="파일 붙여넣기">마우스로 엑셀, TXT파일을 여기에 끌어다 놓으세요</p>
|
||||
</div>
|
||||
<div class="excel_middle2">
|
||||
<p>
|
||||
총 <span class="c_e40000 fwBold" id="rowTotCnt">0</span>건 / 중복 <span class="c_002c9a fwBold" id="rowDupCnt">0</span>건
|
||||
|
||||
<button type="button" class="btnType btnType6" data-tooltip="addrMassDupli_layer" onclick="GetAddrMassDupli()" id="btnAddrMassDupli">중복번호</button>
|
||||
|
||||
<button type="button" class="btnType btnType6" data-tooltip="addrMassSaveDupli_layer" onclick="GetAddrMassSaveDupli()" id="btnAddrMassSaveDupli">중복번호</button>
|
||||
</p>
|
||||
<button type="button" class="btnType btnType6 addCallToF">번호추가</button>
|
||||
</div>
|
||||
<div class="drag_drop_wrap callList_box">
|
||||
<img src="/publish/images/content/excel.jpg" style="width: 100%;">
|
||||
</div>
|
||||
<div class="excel_middle">
|
||||
<div class="select_btnWrap clearfix">
|
||||
<div>
|
||||
<button type="button" class="all_del"><i class="remove_img"></i>전체삭제</button>
|
||||
<button type="button" class="select_del"><i class="remove_img"></i>선택삭제</button>
|
||||
<button type="button" class="chkVali_del"><i class="remove_img"></i>오류번호삭제</button>
|
||||
<button type="button" class="check_validity">오류 검사 <i></i></button>
|
||||
<div class="error_hover_cont send_hover_cont addr_hover_cont">
|
||||
<p>팩스 번호 입력 시 해당 팩스 번호에 대한 형식이 어긋나거나 팩스 번호에 오류가 있는지 등을 검사하는 기능</p>
|
||||
<span>(예시) 02-1234-0001(O) / 00100-123-0001(X)</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div><!--// 공통 -->
|
||||
|
||||
<!-- 붙여놓기 설명 -->
|
||||
<div class="req_area">
|
||||
<div class="text_box">
|
||||
- 팩스 번호가 입력된 txt 파일을 열어 복사(Ctrl+c) + 붙여넣기(Ctrl+v)로도 입력하실 수 있습니다.<br>
|
||||
- 팩스 번호는 필수입력 항목입니다.<br>
|
||||
- 이름,팩스 번호,메모 순서대로 입력해주세요.(예 : 홍길동,02-1234-5678,메모)<br>
|
||||
- 이름은 24byte, 메모는 250byte까지 입력 가능합니다.<br>
|
||||
- '오류 검사'를 통해 등록된 데이터에 팩스 번호 입력 오류를 확인하실 수 있습니다.
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
<div class="popup_btn_wrap2" style="margin: 0 auto 30px auto;">
|
||||
<button type="button" id="btnAddrMassReg">등록</button>
|
||||
<button type="button" id="btnAddrMassClose" class="tooltip-close" data-focus="adr_popup01-close" data-focus-next="popup02">닫기</button>
|
||||
</div>
|
||||
<p>주소록 상세 결과</p>
|
||||
<button type="button" class="tooltip-close" data-focus="adr_popup14-close"><img src="/publish/images/content/layerPopup_close.png" alt="팝업 닫기"></button>
|
||||
</div>
|
||||
<div class="layer_in" style="padding:30px 20px;">
|
||||
<div class="table_top">
|
||||
<p>
|
||||
총 <span class="c_e40000" id="errorPopTotCnt">0</span>건
|
||||
/ 중복 <span class="c_002c9a" id="errorPopDupCnt">0</span>건
|
||||
/ 오류 <span class="c_002c9a" id="errorPopErrorCnt">0</span>건</p>
|
||||
<button type="button" class="excel_btn btnType" id="errorExcelBtn"><i class="downroad"></i>엑셀 다운로드</button>
|
||||
</div>
|
||||
<div class="tb_wrap adr_list" id="tabulator_error">
|
||||
<!-- $tableError 참고 -->
|
||||
</div>
|
||||
<ul class="cf_text_ul">
|
||||
<li>*중복번호는 하나의 번호만 등록됩니다.</li>
|
||||
<li>*휴대폰 형식에 맞지 않는 데이터는 삭제 후 업로드 됩니다.</li>
|
||||
<li>ex) 발송불가 특수문자, 자릿수 오류 등</li>
|
||||
</ul>
|
||||
<div class="popup_btn_wrap2">
|
||||
<button type="button" class="tooltip-close" data-focus="adr_popup14-close" data-focus-next="adr_popup14">닫기</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<!--// 주소록 대량등록 팝업 -->
|
||||
|
||||
<div class="inner">
|
||||
@ -1458,35 +1219,25 @@ function GetAddrMassSaveDupli() {
|
||||
<li class="tab"><button type="button" onclick="TabType5(this,'3'); moveTab('block');">수신거부</button></li>
|
||||
<li class="tab"><button type="button" onclick="TabType5(this,'4'); moveTab('addrMob');">폰주소록 등록</button></li>
|
||||
<li class="tab"><button type="button" onclick="TabType5(this,'5'); moveTab('addrApply');">주소록 입력 대행(무료)</button></li>
|
||||
</ul><!--// tab button -->
|
||||
</ul>
|
||||
<!--// tab button -->
|
||||
<!-- 주소록 관리 - 주소록 관리 -->
|
||||
<div class="adr_cont current" id="tab5_1">
|
||||
<div class="heading">
|
||||
<h2>팩스 주소록 관리</h2>
|
||||
<button type="button" class="button info" onclick="infoPop('selectAddrList');">사용안내</button>
|
||||
</div>
|
||||
<%--<div class="titBox">
|
||||
<p>- 연락처를 그룹별로 분류하여 간편하고 편리하게 관리할 수 있습니다(최대 100,000개까지 등록 가능)</p>
|
||||
<p>- 그룹은 그룹 간 이동, 병합 및 복사가 가능합니다.</p>
|
||||
<p>- 주소록은 중복검사가 가능하며 중복된 연락처를 삭제할 수 있습니다. 단, 데이터 양에 따라 시간이 소요될 수 있습니다.</p>
|
||||
<p>- 주소록 관리에서 그룹 또는 연락처를 선택하여 문자를 바로 발송할 수 있습니다.</p>
|
||||
<p>- 주소록 내보내기를 통해 다른 ID로 주소록을 복사할 수 있습니다(그룹 전송만 가능, 보낸 주소록 결과는 최대 90일까지 보관)</p>
|
||||
<p>- 주소록 내보내기 시에는 개인정보보호를 위해 추가 팩스 인증을 실시하며, 팩스 인증은 등록된 발신번호로만 인증 가능합니다.</p>
|
||||
<p>- 고객님께서 보유하신 엑셀파일이나 텍스트파일 등으로 작성된 주소록을 대량 등록할 수 있습니다.</p>
|
||||
<p>- 주소록 등록이 어려우신 경우에는 주소록 입력대행 메뉴를 이용하시면 됩니다.</p>
|
||||
<p>- 주소록 무료대행은 신규 그룹으로 생성됩니다(기존 그룹 수정 불가)</p>
|
||||
</div>--%>
|
||||
|
||||
<div class="adr1">
|
||||
<!-- 왼쪽 영역 -->
|
||||
<div class="adr1_left" id="adr1_left"></div>
|
||||
<!-- 오른쪽 영역 -->
|
||||
<div class="adr1_right" id="adr1_right">
|
||||
</div>
|
||||
<div class="adr1_right" id="adr1_right"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div><!--// 주소록 관리 - 주소록 관리 -->
|
||||
</div><!--// send top -->
|
||||
<!--// 주소록 관리 - 주소록 관리 -->
|
||||
</div>
|
||||
<!--// send top -->
|
||||
</div>
|
||||
|
||||
<form name="popForm" id="popForm" method="post">
|
||||
<input type="hidden" name="pageType" id="pageType" value=""/>
|
||||
|
||||
@ -0,0 +1,580 @@
|
||||
<%@ 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" %>
|
||||
|
||||
<script type="text/javascript" src="<c:url value='/publish/js/content.js'/>"></script>
|
||||
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function(){
|
||||
|
||||
// 중복 휴대폰번호 버튼 노출여부
|
||||
// $("#btnAddrMassDupli").hide();
|
||||
// $("#btnAddrMassSaveDupli").hide();
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
function addrGroupLoadAjax(){
|
||||
$("#addrRegistSelect").load("/web/addr/selectAddrGroupAjax.do", function(response, status, xhr){});
|
||||
$("#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){
|
||||
if ($('#searchKeywordAddr').val() != "" && $('#searchKeywordAddr').val() != null && $('#searchKeywordAddr').val() != undefined) {
|
||||
// 문자전송 검색용
|
||||
$("#msgStartKeyword").val("");
|
||||
}
|
||||
|
||||
var searchForm = document.searchAddrForm;
|
||||
searchForm.pageIndex.value = pageNo;
|
||||
searchForm.pageUnit.value = $('#pageUnit').val();
|
||||
searchForm.searchCondition.value = $('#searchConditionAddr').val();
|
||||
searchForm.searchKeyword.value = $('#searchKeywordAddr').val();
|
||||
searchForm.startKeyword.value = $("#msgStartKeyword").val();
|
||||
|
||||
var sendData = $(document.searchAddrForm).serializeArray();
|
||||
$("#adr1_right").load("/web/mjon/addr/selectAddrAjax.do", sendData, function(response, status, xhr){tableAllChk();});
|
||||
addrGroupLoadAjax();
|
||||
}
|
||||
|
||||
|
||||
|
||||
//#############################################################################################
|
||||
//Tabulator
|
||||
//#############################################################################################
|
||||
|
||||
$(document).ready(function(){
|
||||
//Tabulator AJAX Data Loading
|
||||
|
||||
|
||||
|
||||
//전체 데이터 갯수 구하는 함수
|
||||
function updateTotCnt(data){
|
||||
|
||||
var tabulNm = fn_utils_getTabulatorNm();
|
||||
var tabluC = '.'+tabulNm
|
||||
|
||||
$(tabluC+" #rowTotCnt").text(data);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
// 오류검사 항목 중복제거
|
||||
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 = $tableClip.getRows();
|
||||
var invalid = $tableClip.getInvalidCells(); //오류 데이터 체크
|
||||
var dataLen = $tableClip.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 = checkHpNum(phone);
|
||||
if(!valiCheck){
|
||||
SetTableErrorDupliCheck(phone);
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
for(var i=0; i < dataLen; i++){
|
||||
// 휴대폰번호 체크
|
||||
var phone = data[i].getData().phone;
|
||||
var valiCheck = checkHpNum(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;
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
//받는 사람 리스트 영역에 클립보드 데이터 가져와보기
|
||||
// 붙여넣기 기능
|
||||
$('#tabulator_clip').off('paste').on('paste', function (e) {
|
||||
// fn_ClipMakeTable();
|
||||
fn_errorPopClean();
|
||||
fn_rowCntInit();
|
||||
resetTableFieldsToDefault();
|
||||
|
||||
var element = e.originalEvent.clipboardData.getData('text');
|
||||
var elmSplit = element.split("\n");
|
||||
var realPhone = [];
|
||||
|
||||
for (var i = 0; i < elmSplit.length; i++) {
|
||||
var splitStr = elmSplit[i].trim();
|
||||
if (splitStr === "") continue; // 공백 행 무시
|
||||
|
||||
var tabData = splitStr.split("\t");
|
||||
var comData = splitStr.split(",");
|
||||
|
||||
var splitData = (tabData.length > 1) ? tabData : comData;
|
||||
|
||||
if (splitData.length === 0) {
|
||||
alert("탭 또는 콤마로 구분하여 데이터를 복사해 주세요.");
|
||||
return false;
|
||||
}
|
||||
|
||||
let keys = ['A', 'B', 'C', 'D', 'E', 'F', 'G'];
|
||||
let data = {};
|
||||
splitData.forEach((item, index) => {
|
||||
data[keys[index]] = item.trim() || ""; // 빈 문자열로 기본값 설정
|
||||
});
|
||||
realPhone.push(data);
|
||||
}
|
||||
|
||||
console.log('Parsed data:', realPhone);
|
||||
console.log('Tabulator data before getData:', $tableClip.getData());
|
||||
// $tableClip.clearData();
|
||||
$tableClip.setData([{
|
||||
A: "", B: "", C: "", D: "", E: "", F: "", G: ""
|
||||
}]); // 초기 데이터로 복원
|
||||
$tableClip.setData(realPhone);
|
||||
var totRows = $tableClip.getDataCount();
|
||||
updateTotCnt(totRows);
|
||||
console.log('Tabulator data after getData:', $tableClip.getData());
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
});
|
||||
|
||||
|
||||
//체크박스 전체선택/해제
|
||||
$(document).on("click", "#chkAll", function(e) {
|
||||
var isChecked = $(this).is(":checked");
|
||||
$("input[name=addrCheck]:checkbox").prop("checked", isChecked);
|
||||
});
|
||||
|
||||
$(document).on("click", "#duplicationChkAll", function(e) {
|
||||
var isChecked = $(this).is(":checked");
|
||||
$("input[name=addrCheck]:checkbox").prop("checked", isChecked);
|
||||
});
|
||||
|
||||
//데이터 객체를 생성하는 함수
|
||||
function createDataObject(data) {
|
||||
console.log('createDataObject : ', data);
|
||||
return {
|
||||
A: data.A,
|
||||
B: data.B,
|
||||
C: data.C,
|
||||
D: data.D,
|
||||
E: data.E,
|
||||
F: data.F,
|
||||
G: data.G
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
// 중복 연락처
|
||||
function GetAddrMassDupli() {
|
||||
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(dupliPhoneDataRealList.length) + "개)</th>";
|
||||
sHtml += " </tr>";
|
||||
sHtml += " </thead>";
|
||||
sHtml += " <tbody>";
|
||||
for (var i = 0; i < dupliPhoneDataRealList.length; i++) {
|
||||
sHtml += " <tr>";
|
||||
sHtml += " <td>" + dupliPhoneDataRealList[i] + "</td>";
|
||||
sHtml += " </tr>";
|
||||
}
|
||||
sHtml += " </tbody>";
|
||||
sHtml += " </table>";
|
||||
sHtml += " </div>";
|
||||
|
||||
$("#addrMassDupli_layer").html(sHtml);
|
||||
}
|
||||
|
||||
|
||||
</script>
|
||||
|
||||
<!-- 붙여넣기 -->
|
||||
<div class="popCont pop_more_cont" id="popCont_2">
|
||||
<div class="titBox">
|
||||
<p>- 엑셀(EXCEL), 텍스트(TXT) 파일로 작성된 주소록 내용을 복사하여 등록 가능합니다.</p>
|
||||
<p>- 많은 양의 데이터를 입력하시려면 ‘주소록 복사(Ctrl+C) + 붙여넣기(Ctrl+V)’를 이용해주세요.</p>
|
||||
<p>- 입력 내용은 (Tab) 또는 (,) 기호로 구분하여 입력하여야 합니다.</p>
|
||||
<p>- 이름 200byte, [*1*]~[*4*] 200byte, 메모 250byte까지 입력 가능합니다.</p>
|
||||
<p>- 주소록 등록이 어려우신 경우에는 <a href="<c:url value='/web/mjon/addragency/selectAddrAgencyList.do'/>" style="font-weight: bold; color: blue;">주소록 입력대행</a> 메뉴를 이용하실 수 있습니다. </p>
|
||||
<!-- <button type="button" class="txt_btn" onclick="location.href='/download/addr/주소록_대량등록.zip'"><i></i>TXT샘플 다운로드</button> -->
|
||||
</div>
|
||||
<div class="pop_more_wrap">
|
||||
<button type="button" class="pop_more" onclick="popMore(this);">더보기<i></i></button>
|
||||
</div>
|
||||
</div><!--// 붙여넣기 -->
|
||||
|
||||
<!-- 공통 -->
|
||||
<div>
|
||||
<table class="layer_tType1">
|
||||
<caption>엑셀입력 표</caption>
|
||||
<colgroup>
|
||||
<col style="width: 95px">
|
||||
<col style="width: auto">
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<th>그룹 선택</th>
|
||||
<td>
|
||||
<label for="" class="label">그룹 선택</label>
|
||||
<select id="addrGrpIdInfo" name="addrGrpIdInfo">
|
||||
</select>
|
||||
<label for="" class="label">그룹명 입력</label>
|
||||
<input type="text" id="addrGrpNm" name="addrGrpNm" placeholder="새 그룹명을 입력해주세요." onfocus="this.placeholder=''" onblur="this.placeholder='새 그룹명을 입력해주세요.'"class="inputLight" style="width: 300px;">
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="excel_middle2">
|
||||
<p>
|
||||
총 <span class="c_e40000 fwBold" id="rowTotCnt">0</span>건
|
||||
/ 중복 <span class="c_002c9a fwBold" id="rowDupCnt">0</span>건
|
||||
/ 오류 <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>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
<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;">
|
||||
<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 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">
|
||||
<img src="/publish/images/content/excel.jpg" style="width: 100%;">
|
||||
</div>
|
||||
<div class="excel_middle">
|
||||
<div class="select_btnWrap clearfix">
|
||||
<div>
|
||||
<button type="button" class="all_del"><i class="remove_img"></i>전체삭제</button>
|
||||
<button type="button" class="select_del"><i class="remove_img"></i>선택삭제</button>
|
||||
<!-- <button type="button" class="chkVali_del"><i class="remove_img"></i>오류번호삭제</button> -->
|
||||
<!-- <button type="button" class="check_validity">오류 검사 <i></i></button> -->
|
||||
<div class="error_hover_cont send_hover_cont addr_hover_cont">
|
||||
<p>휴대폰 번호 입력 시 해당 휴대폰 번호에 대한 형식이 어긋나거나 휴대폰 번호에 오류가 있는지 등을 검사하는 기능</p>
|
||||
<span>(예시) 010-1234-0001(O) / 010-123-0001(X)</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div><!--// 공통 -->
|
||||
|
||||
<!-- 붙여놓기 설명 -->
|
||||
<!-- <div class="req_area"> -->
|
||||
<!-- <div class="text_box"> -->
|
||||
<!-- - 휴대폰 번호가 입력된 txt 파일을 열어 복사(Ctrl+c) + 붙여넣기(Ctrl+v)로도 입력하실 수 있습니다.<br> -->
|
||||
<!-- - 휴대폰 번호는 필수입력 항목입니다.<br> -->
|
||||
<!-- - 이름,휴대폰 번호,[*1*],[*2*],[*3*],[*4*],메모 순서대로 입력해주세요.(예 : 010-1234-5678,홍길동,변수1…메모)<br> -->
|
||||
<!-- - 이름은 24byte, [*1*]~[*4*] 40byte, 메모는 250byte까지 입력 가능합니다.<br> -->
|
||||
<!-- - '오류 검사'를 통해 등록된 데이터에 전화번호 입력 오류를 확인하실 수 있습니다. -->
|
||||
<!-- </div> -->
|
||||
<!-- </div> -->
|
||||
@ -0,0 +1,416 @@
|
||||
<%@ 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" %>
|
||||
|
||||
<script type="text/javascript">
|
||||
|
||||
$(document).ready(function(){
|
||||
|
||||
});
|
||||
|
||||
function addrGroupLoadAjax(){
|
||||
$("#addrRegistSelect").load("/web/addr/selectAddrGroupAjax.do", function(response, status, xhr){});
|
||||
$("#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 setSelectSetting(selectVal) {
|
||||
$("#addrRegistSelect").val(selectVal).prop("selected", true);
|
||||
}
|
||||
|
||||
$(document).ready(function(){
|
||||
// 파일 선택 버튼 클릭 이벤트
|
||||
// 파일 입력 이벤트
|
||||
$("#excelFile").on("change", function(event) {
|
||||
var fileInfo = event.target.files;
|
||||
if(fileInfo.length > 0){
|
||||
excelFileChange(fileInfo[0]);
|
||||
} else {
|
||||
fn_loadRemoveActive(); // 파일이 선택되지 않은 경우 로딩 상태 제거
|
||||
$(this).val(''); // 파일 선택 초기화
|
||||
}
|
||||
});
|
||||
|
||||
//받는사람 오류번호 삭제 처리해주기
|
||||
$('.chkVali_del').click(function(){
|
||||
//기존 연락처 모두 불러오기
|
||||
var data = $tableExcel.getRows();
|
||||
var tableData = [];
|
||||
var totLen = $tableExcel.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 = checkHpNum(phone);
|
||||
if(valiCheck){
|
||||
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});
|
||||
}else{
|
||||
errCnt++;
|
||||
}
|
||||
}
|
||||
|
||||
var removeDuplData = dupliPhoneData(tableData);
|
||||
|
||||
$tableExcel.setData(removeDuplData);
|
||||
|
||||
//총 받는사람 수 계산
|
||||
totRows = $tableExcel.getRows().length;
|
||||
updateTotCnt(totRows);
|
||||
|
||||
if(errCnt > 0){
|
||||
alert(errCnt + " 건의 연락처를 삭제하였습니다.");
|
||||
return false;
|
||||
}else{
|
||||
alert("오류가 있는 연락처가 없습니다.");
|
||||
}
|
||||
}
|
||||
}else{
|
||||
alert("연락처 정보를 입력해 주세요.");
|
||||
return false;
|
||||
}
|
||||
});
|
||||
|
||||
// 필드 선택 이벤트 핸들러
|
||||
$("#column-selector").on("change", function() {
|
||||
let selectedField = $(this).val();
|
||||
let newValue = prompt("새 값을 입력하세요:");
|
||||
if (newValue !== null) {
|
||||
updateTableField(selectedField, newValue);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
//#############################################################################################
|
||||
//파일업로드 드래그앤 드롭
|
||||
//#############################################################################################
|
||||
var objDragAndDrop = $(".upload_area");
|
||||
$(document).on("dragenter",".upload_area",function(e){
|
||||
e.stopPropagation();
|
||||
e.preventDefault();
|
||||
});
|
||||
$(document).on("dragover",".upload_area",function(e){
|
||||
e.stopPropagation();
|
||||
e.preventDefault();
|
||||
});
|
||||
$(document).on("drop",".upload_area",function(e){
|
||||
e.preventDefault();
|
||||
var files = e.originalEvent.dataTransfer.files;
|
||||
excelFileChange(files[0]);
|
||||
});
|
||||
|
||||
$(document).on('dragenter', function (e){
|
||||
e.stopPropagation();
|
||||
e.preventDefault();
|
||||
});
|
||||
$(document).on('dragover', function (e){
|
||||
e.stopPropagation();
|
||||
e.preventDefault();
|
||||
});
|
||||
$(document).on('drop', function (e){
|
||||
e.stopPropagation();
|
||||
e.preventDefault();
|
||||
});
|
||||
|
||||
//첨부파일 등록 변경 이벤트
|
||||
function excelFileChange(file) {
|
||||
console.log(' :: excelFileChange :: ');
|
||||
fn_errorPopClean(); // 에러 popup 초기화
|
||||
fn_rowCntInit();
|
||||
if (file) {
|
||||
// 파일 크기 체크 (20MB)
|
||||
const maxSize = 20 * 1024 * 1024; // 20MB in bytes
|
||||
if (file.size > maxSize) {
|
||||
alert('파일 크기는 20MB를 초과할 수 없습니다.');
|
||||
return;
|
||||
}
|
||||
|
||||
fn_loadAddActive();
|
||||
var reader = new FileReader();
|
||||
var extension = file.name.split('.').pop().toLowerCase();
|
||||
reader.onload = function(e) {
|
||||
setTimeout(() => { // 파일 읽기 완료 후 실행되도록 함
|
||||
if (extension === 'xlsx') {
|
||||
var data = new Uint8Array(e.target.result);
|
||||
var workbook = XLSX.read(data, {type: 'array'});
|
||||
var firstSheet = workbook.Sheets[workbook.SheetNames[0]];
|
||||
var jsonData = XLSX.utils.sheet_to_json(firstSheet, {header: 1});
|
||||
processExcelData(jsonData);
|
||||
} else if (extension === 'txt') {
|
||||
var textData = e.target.result;
|
||||
processTextData(textData);
|
||||
} else {
|
||||
alert('지원되지 않는 파일 형식입니다.');
|
||||
}
|
||||
fn_loadRemoveActive();
|
||||
}, 0); // 지연 없이 즉시 실행되도록 0ms 지연을 설정
|
||||
};
|
||||
if (extension === 'xlsx') {
|
||||
reader.readAsArrayBuffer(file);
|
||||
} else if (extension === 'txt') {
|
||||
reader.readAsText(file);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 엑셀 데이터 처리 함수
|
||||
function processExcelData(data) {
|
||||
var keys = ['A', 'B', 'C'];
|
||||
var tableData = [];
|
||||
var totalRows = data.length - 2; // 전체 데이터 수 (1, 2행 제외)
|
||||
|
||||
// 1번째 행부터 입력
|
||||
data.forEach((row, index) => {
|
||||
var rowData = {};
|
||||
keys.forEach((key, idx) => { // index 변수명 변경 (내부와 외부에서 사용되므로 충돌 방지)
|
||||
// console.log('row[idx] : ', row[idx]);
|
||||
rowData[key] = typeof row[idx] === 'string' ? row[idx].trim() : row[idx]; // 문자열인지 확인하고 trim() 적용
|
||||
});
|
||||
tableData.push(rowData);
|
||||
});
|
||||
updateTable(tableData);
|
||||
}
|
||||
|
||||
// 텍스트 데이터 처리 함수
|
||||
function processTextData(text) {
|
||||
console.log(' :: processTextData :: ');
|
||||
var lines = text.split('\n'); // 각 줄을 배열로 분리
|
||||
var keys = ['A', 'B', 'C'];
|
||||
var tableData = [];
|
||||
|
||||
lines.forEach(line => {
|
||||
var rowData = {};
|
||||
var row = line.split(','); // 쉼표로 분리
|
||||
keys.forEach((key, index) => {
|
||||
rowData[key] = row[index] ? row[index].trim() : ""; // 각 컬럼에 대해 기본값을 설정
|
||||
});
|
||||
tableData.push(rowData);
|
||||
});
|
||||
|
||||
updateTable(tableData);
|
||||
}
|
||||
|
||||
//공통 테이블 업데이트 함수
|
||||
function updateTable(tableData) {
|
||||
console.log(' :: updateTable :: ');
|
||||
$tableExcel.setColumns([ // 열 정의를 다시 설정
|
||||
{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}
|
||||
,{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"]}
|
||||
]);
|
||||
|
||||
$tableExcel.setData(tableData).then(() => {
|
||||
// rowTotCnt 업데이트
|
||||
document.getElementById("rowTotCnt").innerText = tableData.length;
|
||||
});
|
||||
|
||||
console.log(' :: fn_loadRemoveActive :: ');
|
||||
fn_loadRemoveActive();
|
||||
}
|
||||
|
||||
|
||||
//#############################################################################################
|
||||
//등록
|
||||
//#############################################################################################
|
||||
|
||||
// 주소록 그룹 중복체크
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
//#############################################################################################
|
||||
//파일 불러오기
|
||||
//#############################################################################################
|
||||
|
||||
//엑섹불러오기 버튼 클릭시 파일 첨부 실행
|
||||
$(document).on('click', '.c3', function() {
|
||||
$("#excelFile").click();
|
||||
});
|
||||
|
||||
//체크박스 전체선택/해제
|
||||
$(document).on("click", "#chkAll", function(e) {
|
||||
var isChecked = $(this).is(":checked");
|
||||
$("input[name=addrCheck]:checkbox").prop("checked", isChecked);
|
||||
});
|
||||
|
||||
$(document).on("click", "#duplicationChkAll", function(e) {
|
||||
var isChecked = $(this).is(":checked");
|
||||
$("input[name=addrCheck]:checkbox").prop("checked", isChecked);
|
||||
});
|
||||
|
||||
</script>
|
||||
|
||||
<!-- 엑셀입력 -->
|
||||
<div class="popCont current pop_more_cont" id="popCont_1">
|
||||
<div class="titBox">
|
||||
<p>- 엑셀(EXCEL) 파일로 주소록을 한 번에 최대 2만건까지 등록하여 간편하게 발송 및 관리하실 수 있습니다.</p>
|
||||
<p>- 반드시 샘플파일을 다운로드하여 작성방법을 확인하신 후 정해진 양식에 맞추어 주소록을 작성하셔야 합니다.</p>
|
||||
<p> ※ 팩스 번호는 지역번호(02, 031, 033 등), 타사부가번호(030*, 050*, 060, 070, 080, 1**)로 시작하는 번호만 발송 가능합니다. </p>
|
||||
<p> ※ 주소록 관리 메뉴에서 다운로드 받으신 엑셀 파일 또한 업로드 양식에 맞추어 작성하셔야 하며, </p>
|
||||
<p> 주소록에 이미 등록된 팩스 번호는 업데이트 되지 않으므로 기존 주소록에서 해당 팩스 번호를 삭제한 후 재등록해 주시기 바랍니다.</p>
|
||||
<p>- 쉼표(,), 구분선(|), 역슬래시(\, ₩), 작은따옴표('), 큰따옴표(") 등 발송불가 특수문자는 저장되지 않습니다.</p>
|
||||
<p>- 팩스 번호는 필수입력 항목입니다.</p>
|
||||
<p>- 팩스번호 형태는 02-1234-5678 또는 0212345678 모두 가능합니다. 단, 공백은 허용되지 않습니다.</p>
|
||||
<p>- 엑셀 파일에 비밀번호 설정, 제한된 보기, 수식 등이 설정되어 있는 경우 업로드가 불가합니다.</p>
|
||||
<p>- 이름 20byte, 메모 250byte까지 입력 가능합니다.</p>
|
||||
<p>- 첨부가능 파일 : xlsx, xls(최대용량 3MB)</p>
|
||||
<p>- ‘오류 검사’를 통해 등록된 데이터에 팩스 번호 입력 오류를 확인하실 수 있습니다.</p>
|
||||
<p>- 주소록 등록이 어려우신 경우에는 주소록 입력대행 메뉴를 이용하시면 됩니다.</p>
|
||||
</div>
|
||||
<div class="pop_more_wrap">
|
||||
<button type="button" class="pop_more" onclick="popMore(this);">더보기<i></i></button>
|
||||
</div>
|
||||
</div>
|
||||
<!--// 엑셀입력 -->
|
||||
|
||||
<!-- 공통 -->
|
||||
<div>
|
||||
<table class="layer_tType1">
|
||||
<caption>엑셀입력 표</caption>
|
||||
<colgroup>
|
||||
<col style="width: 95px">
|
||||
<col style="width: auto">
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<th>그룹 선택</th>
|
||||
<td>
|
||||
<label for="" class="label">그룹 선택</label>
|
||||
<select id="addrGrpIdInfo" name="addrGrpIdInfo">
|
||||
</select>
|
||||
<label for="" class="label">그룹명 입력</label>
|
||||
<input type="text" id="addrGrpNm" name="addrGrpNm" placeholder="새 그룹명을 입력해주세요." onfocus="this.placeholder=''" onblur="this.placeholder='새 그룹명을 입력해주세요.'"class="inputLight" style="width: 300px;">
|
||||
<input type="file" id="excelFile" accept=".xls, .xlsx, .txt" style="display:none"/>
|
||||
<button type="button" class="excel_btn2 btnType c3"><i class="uproad"></i>엑셀, TXT파일 업로드</button>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="file_add upload_area">
|
||||
<p><img src="/publish/images/content/file_add.png" alt="파일 붙여넣기">마우스로 엑셀, TXT파일을 여기에 끌어다 놓으세요</p>
|
||||
</div>
|
||||
<div class="excel_middle2">
|
||||
<p>
|
||||
총 <span class="c_e40000 fwBold" id="rowTotCnt">0</span>건
|
||||
/ 중복 <span class="c_002c9a fwBold" id="rowDupCnt">0</span>건
|
||||
/ 오류 <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>
|
||||
</div>
|
||||
<div class="adr_excel" style="margin-top: 13px; overflow-x:auto;">
|
||||
<!-- thead -->
|
||||
<div class="adr_hd select_adr_hd" data-group="tableExcel">
|
||||
<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="addrFaxNo">팩스번호</option>
|
||||
<option value="addrComment">메모</option>
|
||||
</select>
|
||||
</div>
|
||||
<div style="width:240px;">
|
||||
<label for="" class="label"></label>
|
||||
<select class="field-selector">
|
||||
<option value="">선택하기</option>
|
||||
<option value="addrNm">이름</option>
|
||||
<option value="addrFaxNo">팩스번호</option>
|
||||
<option value="addrComment">메모</option>
|
||||
</select>
|
||||
</div>
|
||||
<div style="width:240px;">
|
||||
<label for="" class="label"></label>
|
||||
<select class="field-selector">
|
||||
<option value="">선택하기</option>
|
||||
<option value="addrNm">이름</option>
|
||||
<option value="addrFaxNo">팩스번호</option>
|
||||
<option value="addrComment">메모</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="drag_drop_wrap callList_box" id="tabulator_excel"></div>
|
||||
<div class="excel_middle">
|
||||
<div class="select_btnWrap clearfix">
|
||||
<div>
|
||||
<button type="button" class="all_del"><i class="remove_img"></i>전체삭제</button>
|
||||
<button type="button" class="select_del"><i class="remove_img"></i>선택삭제</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!--// 공통 -->
|
||||
@ -0,0 +1,188 @@
|
||||
<%@ 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" %>
|
||||
|
||||
<script type="text/javascript" src="<c:url value='/publish/js/content.js'/>"></script>
|
||||
|
||||
<script type="text/javascript">
|
||||
|
||||
$(document).ready(function(){
|
||||
//Tabulator AJAX Data Loading
|
||||
|
||||
|
||||
|
||||
});
|
||||
|
||||
|
||||
$(document).on('change', '#addrGrpIdInfo', function() {
|
||||
if ($("#addrGrpIdInfo option:selected").val() != "NEW") {
|
||||
$("#addrGrpNm").val(""); // 새그룹명 Clear;
|
||||
}
|
||||
});
|
||||
|
||||
//#############################################################################################
|
||||
//파일 불러오기
|
||||
//#############################################################################################
|
||||
|
||||
|
||||
//체크박스 전체선택/해제
|
||||
$(document).on("click", "#chkAll", function(e) {
|
||||
var isChecked = $(this).is(":checked");
|
||||
$("input[name=addrCheck]:checkbox").prop("checked", isChecked);
|
||||
});
|
||||
|
||||
$(document).on("click", "#duplicationChkAll", function(e) {
|
||||
var isChecked = $(this).is(":checked");
|
||||
$("input[name=addrCheck]:checkbox").prop("checked", isChecked);
|
||||
});
|
||||
|
||||
|
||||
function fn_selfUpdataCount(value){
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
console.log('fn_selfUpdataCount(value) : ', value);
|
||||
let errorCount = 0; // 중복 오류
|
||||
|
||||
const number = value;
|
||||
const formattedNumber = formatPhoneNumber(number); // 번호 표준화
|
||||
const cleanedNumber = formattedNumber.replace(/[^0-9]/g, ''); // 숫자만 남김
|
||||
|
||||
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); // 기존 번호를 배열에 추가
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
// 중복제거한 데이터 구하기
|
||||
var dataList = new Set(existingNumbers);
|
||||
|
||||
var totalCnt = dataList.size;
|
||||
|
||||
var tabulNm = fn_utils_getTabulatorNm();
|
||||
var tabluC = '.'+tabulNm
|
||||
|
||||
// 중복체크
|
||||
if (existingNumbers.length !== dataList.size) {
|
||||
alert('중복된 값입니다 다시 입력해주세요.');
|
||||
return '';
|
||||
}
|
||||
|
||||
if (!isValidPhoneNumber(formattedNumber)) { // 유효성 검사
|
||||
alert('휴대폰 형식에 맞지 않는 데이터입니다.\nex) 발송불가 특수문자, 자릿수 오류 등');
|
||||
$(tabluC+" #rowTotCnt").text(totalCnt-1);
|
||||
return '';
|
||||
}
|
||||
|
||||
|
||||
var tabulNm = fn_utils_getTabulatorNm();
|
||||
var tabluC = '.'+tabulNm
|
||||
$(tabluC+" #rowTotCnt").text(totalCnt);
|
||||
|
||||
return formattedNumber;
|
||||
}
|
||||
|
||||
|
||||
|
||||
</script>
|
||||
|
||||
<!-- 붙여넣기 -->
|
||||
<div class="popCont pop_more_cont" id="popCont_3">
|
||||
<div class="titBox">
|
||||
<!-- <p>- 엑셀(EXCEL), 텍스트(TXT) 파일로 작성된 주소록 내용을 복사하여 등록 가능합니다.</p> -->
|
||||
<!-- <p>- 많은 양의 데이터를 입력하시려면 ‘주소록 복사(Ctrl+C) + 붙여넣기(Ctrl+V)’를 이용해주세요.</p> -->
|
||||
<p>- 셀간 이동은 Tab으로 가능합니다.</p>
|
||||
<p>- 핸드폰 번호를 입력하지 않은 행은 저장되지 않습니다.</p>
|
||||
<p>- 이름 200byte, [*1*]~[*4*] 200byte, 메모 250byte까지 입력 가능합니다.</p>
|
||||
<p>- 주소록 등록이 어려우신 경우에는 <a href="<c:url value='/web/mjon/addragency/selectAddrAgencyList.do'/>" style="font-weight: bold; color: blue;">주소록 입력대행</a> 메뉴를 이용하실 수 있습니다. </p>
|
||||
<!-- <button type="button" class="txt_btn" onclick="location.href='/download/addr/주소록_대량등록.zip'"><i></i>TXT샘플 다운로드</button> -->
|
||||
</div>
|
||||
<div class="pop_more_wrap">
|
||||
<button type="button" class="pop_more" onclick="popMore(this);">더보기<i></i></button>
|
||||
</div>
|
||||
</div><!--// 붙여넣기 -->
|
||||
|
||||
<!-- 공통 -->
|
||||
<div>
|
||||
<table class="layer_tType1">
|
||||
<caption>엑셀입력 표</caption>
|
||||
<colgroup>
|
||||
<col style="width: 95px">
|
||||
<col style="width: auto">
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<th>그룹 선택</th>
|
||||
<td>
|
||||
<label for="" class="label">그룹 선택</label>
|
||||
<select id="addrGrpIdInfo" name="addrGrpIdInfo">
|
||||
</select>
|
||||
<label for="" class="label">그룹명 입력</label>
|
||||
<input type="text" id="addrGrpNm" name="addrGrpNm" placeholder="새 그룹명을 입력해주세요." onfocus="this.placeholder=''" onblur="this.placeholder='새 그룹명을 입력해주세요.'"class="inputLight" style="width: 300px;">
|
||||
|
||||
<!-- <input type="file" id="excelFile" accept=".xls, .xlsx, .txt" onchange="excelExport(event); return false;" style="display:none"/> -->
|
||||
<input type="file" id="excelFile" accept=".xls, .xlsx, .txt" style="display:none"/>
|
||||
<!-- <button type="button" id="file-load-trigger">Choose File</button> -->
|
||||
<!-- <button type="button" class="excel_btn2 btnType c3"><i class="uproad"></i>엑셀, TXT파일 업로드</button> -->
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<div class="excel_middle2">
|
||||
<p>
|
||||
총 <span class="c_e40000 fwBold" id="rowTotCnt">0</span>건
|
||||
<!-- / 중복 <span class="c_002c9a fwBold" id="rowDupCnt">0</span>건 -->
|
||||
<!-- / 오류 <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> -->
|
||||
<!-- -->
|
||||
<!-- <button type="button" class="btnType btnType6" data-tooltip="addrMassDupli_layer" id="tableSelfDupliBtn">중복번호</button> -->
|
||||
<!-- <button type="button" class="btnType btnType6" data-tooltip="addrMassDupli_layer" onclick="GetAddrMassDupli()" id="btnAddrMassDupli">중복번호</button> -->
|
||||
<!-- -->
|
||||
<!-- <button type="button" class="btnType btnType6" data-tooltip="addrMassSaveDupli_layer" onclick="GetAddrMassSaveDupli()" id="btnAddrMassSaveDupli">중복번호</button> -->
|
||||
</p>
|
||||
<!-- <button type="button" class="btnType btnType6 addCallToF">번호추가</button> -->
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="drag_drop_wrap callList_box" id="tabulator_self">
|
||||
<img src="/publish/images/content/excel.jpg" style="width: 100%;">
|
||||
</div>
|
||||
<div class="excel_middle">
|
||||
<div class="select_btnWrap clearfix">
|
||||
<div>
|
||||
<button type="button" class="self_all_del"><i class="remove_img"></i>전체삭제</button>
|
||||
<button type="button" class="self_select_del"><i class="remove_img"></i>선택삭제</button>
|
||||
<!-- <button type="button" class="chkVali_del"><i class="remove_img"></i>오류번호삭제</button> -->
|
||||
<!-- <button type="button" class="check_validity">오류 검사 <i></i></button> -->
|
||||
<div class="error_hover_cont send_hover_cont addr_hover_cont">
|
||||
<p>휴대폰 번호 입력 시 해당 휴대폰 번호에 대한 형식이 어긋나거나 휴대폰 번호에 오류가 있는지 등을 검사하는 기능</p>
|
||||
<span>(예시) 010-1234-0001(O) / 010-123-0001(X)</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div><!--// 공통 -->
|
||||
|
||||
<!-- 붙여놓기 설명 -->
|
||||
<!-- <div class="req_area"> -->
|
||||
<!-- <div class="text_box"> -->
|
||||
<!-- - 휴대폰 번호가 입력된 txt 파일을 열어 복사(Ctrl+c) + 붙여넣기(Ctrl+v)로도 입력하실 수 있습니다.<br> -->
|
||||
<!-- - 휴대폰 번호는 필수입력 항목입니다.<br> -->
|
||||
<!-- - 이름,휴대폰 번호,[*1*],[*2*],[*3*],[*4*],메모 순서대로 입력해주세요.(예 : 010-1234-5678,홍길동,변수1…메모)<br> -->
|
||||
<!-- - 이름은 24byte, [*1*]~[*4*] 40byte, 메모는 250byte까지 입력 가능합니다.<br> -->
|
||||
<!-- - '오류 검사'를 통해 등록된 데이터에 전화번호 입력 오류를 확인하실 수 있습니다. -->
|
||||
<!-- </div> -->
|
||||
<!-- </div> -->
|
||||
@ -5,21 +5,33 @@
|
||||
<%@ taglib prefix="ec" uri="/WEB-INF/tld/ecnet_tld.tld"%>
|
||||
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
|
||||
<%@ page import="itn.com.cmm.LoginVO" %>
|
||||
|
||||
<!--
|
||||
<script>document.write('<script src="http://' + (location.host || 'localhost').split(':')[0] + ':35729/livereload.js?snipver=1"></' + 'script>')</script>
|
||||
-->
|
||||
|
||||
<script src="/publish/js/content.js"></script>
|
||||
<!-- 스프레드시트(타뷸레이터)관련 js -->
|
||||
<script src="/js/user/fax/tabulator.js"></script>
|
||||
<!-- 주소록관련 js -->
|
||||
<script src="/js/user/fax/addr.js"></script>
|
||||
<!-- 엑셀불러오기관련 js -->
|
||||
<script src="/js/user/fax/exelLoad.js"></script>
|
||||
<script src="/js/user/fax/exelUpload.js"></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/txtSpecialReplace.js?date=202209210001'/>"></script>
|
||||
<!-- 현재 jsp에서 사용하는 file 관련 js -->
|
||||
<script type="text/javascript" src="<c:out value='/js/user/fax/file.js' />"></script>
|
||||
<script type="text/javascript">
|
||||
var loginVO = '${loginVO}';
|
||||
|
||||
|
||||
var tableL = null; //받는사람 연락처 Tabulator 변수
|
||||
var tableAddr = null; //주소록 불러오기 팝업 Tabulator 변수
|
||||
var tableExcel = null; //엑셀 불러오기 팝업 Tabulator 변수
|
||||
var tableError = null; //엑셀 오류 주소록 상세 팝업 Tabulator 변수
|
||||
|
||||
$(document).ready(function(){
|
||||
|
||||
//엑섹불러오기 버튼 클릭시 파일 첨부 실행
|
||||
@ -51,11 +63,6 @@
|
||||
return false;
|
||||
}
|
||||
|
||||
/* if(!moneyChk()){
|
||||
return false;
|
||||
} */
|
||||
|
||||
|
||||
if(!valueChk()){
|
||||
return false;
|
||||
}
|
||||
@ -117,8 +124,6 @@
|
||||
return false;
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
});
|
||||
|
||||
|
||||
@ -154,7 +159,6 @@
|
||||
addPhoneInfo(tableData)
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function moneyChk(){
|
||||
@ -218,13 +222,6 @@
|
||||
return true;
|
||||
}
|
||||
|
||||
//주소록 팝업 닫기 기능
|
||||
function addrClose(){
|
||||
$(".closeAddr").trigger("click");
|
||||
//주소록 레이어 팝업의 Tabulator 데이터 지워주기
|
||||
tableAddr.clearData();
|
||||
}
|
||||
|
||||
/**
|
||||
* @description 금액 계산 function
|
||||
*/
|
||||
@ -281,26 +278,38 @@
|
||||
location.href="<c:url value='/web/mjon/fax/faxSendList.do'/>";
|
||||
}
|
||||
|
||||
|
||||
//전체 데이터 갯수 구하는 함수
|
||||
function updateTotCnt(data){
|
||||
var rowTotCnt = data;
|
||||
$("#rowTotCnt").text(numberWithCommas(rowTotCnt));
|
||||
}
|
||||
|
||||
</script>
|
||||
|
||||
<form id="convertForm" name="convertForm" action="">
|
||||
<input type="hidden" id="faxConvertSeq" name="faxConvertSeq" value="" />
|
||||
<input type="hidden" id="faxConvertFilePath" name="faxConvertFilePath" value="" /> <!-- 변환파일 경로 -->
|
||||
</form>
|
||||
<form id="faxSendForm" name="faxSendForm" action="">
|
||||
<input type="hidden" id="subject" name="subject" value="" />
|
||||
<input type="hidden" id="callToList" name="callToList" value="" />
|
||||
<!-- 문자온 법인폰 번호 -->
|
||||
<!-- <input type="hidden" id="callFrom" name="callFrom" value="15518011" /> -->
|
||||
<input type="hidden" id="nameList" name="nameList" value="" />
|
||||
<input type="hidden" id="faxConvertSeq" name="faxConvertSeq" value="" />
|
||||
<input type="hidden" id="reserveYn" name="reserveYn" value="N" />
|
||||
<input type="hidden" id="sendDate" name="sendDate" value="" />
|
||||
<input type="hidden" id="totalEa" name="totalEa" value="" />
|
||||
</form>
|
||||
<form id="convertForm" name="convertForm" action="">
|
||||
<input type="hidden" id="faxConvertSeq" name="faxConvertSeq" value="" />
|
||||
<input type="hidden" id="faxConvertFilePath" name="faxConvertFilePath" value="" /> <!-- 변환파일 경로 -->
|
||||
</form>
|
||||
|
||||
<form id="faxSendForm" name="faxSendForm" action="">
|
||||
<input type="hidden" id="subject" name="subject" value="" />
|
||||
<input type="hidden" id="callToList" name="callToList" value="" />
|
||||
<!-- 문자온 법인폰 번호 -->
|
||||
<input type="hidden" id="nameList" name="nameList" value="" />
|
||||
<input type="hidden" id="faxConvertSeq" name="faxConvertSeq" value="" />
|
||||
<input type="hidden" id="reserveYn" name="reserveYn" value="N" />
|
||||
<input type="hidden" id="sendDate" name="sendDate" value="" />
|
||||
<input type="hidden" id="totalEa" name="totalEa" value="" />
|
||||
</form>
|
||||
|
||||
<div class="loading_execl_layer">
|
||||
<div class="loading_container">
|
||||
<div class="bar"></div>
|
||||
<div class="text">Loading</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<div class="inner">
|
||||
<!-- send top -->
|
||||
<div class="send_top">
|
||||
@ -319,8 +328,7 @@
|
||||
</ul>
|
||||
</div>
|
||||
<!--// tab button 끝-->
|
||||
|
||||
|
||||
|
||||
<!-- tab content1 -->
|
||||
<div class="tap_content current" id="tab_content_1">
|
||||
<div class="send_general">
|
||||
@ -452,13 +460,8 @@
|
||||
</div>
|
||||
<div class="list_bottom_right">
|
||||
<p>총 <span class="c_e40000" id="rowTotCnt">0</span>건 / 중복 <span class="c_002c9a" id="rowDupCnt">0</span>건</p>
|
||||
|
||||
<!-- <button type="button" class="address_reg2 addressregi_btn">주소록에 등록</button> -->
|
||||
</div>
|
||||
</div>
|
||||
<!-- <div class="btn_popup_wrap"> -->
|
||||
<!-- <button type="button" id="sendBtn" class="btnType btnType7 tab2">발송</button> -->
|
||||
<!-- </div> -->
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
@ -469,8 +472,6 @@
|
||||
<div class="final_pay">
|
||||
<div class="pay_info_list">
|
||||
<p>발송금액 :</p>
|
||||
<!-- <div class="info" id="repPriceTxt" style="display: none;"> -->
|
||||
<!-- </div> -->
|
||||
</div>
|
||||
<p class="price"><span id="repPriceTxt"></span><span id="totalPriceTxt">0</span> 원<span></span></p>
|
||||
</div>
|
||||
@ -550,8 +551,6 @@
|
||||
<input name="moveAddrFlag" type="hidden" value="N"/>
|
||||
<input name="addrIdList" type="hidden" value=""/>
|
||||
</form>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
@ -566,7 +565,7 @@
|
||||
<div class="popup-com import_layer popup06" tabindex="0" data-tooltip-con="popup06" data-focus="popup06" data-focus-prev="popup06-close" style="width: 1000px;z-index:98">
|
||||
<div class="popup_heading">
|
||||
<p><span>주소록 불러오기</p>
|
||||
<button type="button" onClick="javascript:addrClose(); return false;">
|
||||
<button type="button" onClick="javascript:addrToList_close(); return false;">
|
||||
<img src="/publish/images/content/layerPopup_close.png" alt="팝업 닫기"></button>
|
||||
</div>
|
||||
<div class="layer_in">
|
||||
@ -590,9 +589,6 @@
|
||||
<div id="addrGroupLoad">
|
||||
</div>
|
||||
</div>
|
||||
<!-- <div class="popup_btn">
|
||||
<button type="button" class="btnType" onClick="javascript:fnSelectAddrGrpList(); return false;">선택 그룹 추가</button>
|
||||
</div> -->
|
||||
</div>
|
||||
<div class="adr_pop_right">
|
||||
<div class="clearfix">
|
||||
@ -614,8 +610,9 @@
|
||||
<!--// table -->
|
||||
</div>
|
||||
<div class="popup_btn_wrap2">
|
||||
<button type="button" onClick="javascript:addrToList(); return false;">추가</button>
|
||||
<button type="button" onClick="javascript:addrClose(); return false;">닫기</button>
|
||||
<button type="button" onClick="javascript:addrToList_advc('all'); return false;">전체추가</button>
|
||||
<button type="button" onClick="javascript:addrToList_advc('select'); return false;">선택추가</button>
|
||||
<button type="button" onClick="javascript:addrToList_close(); return false;">닫기</button>
|
||||
</div>
|
||||
<%-- 주소록 레이어 팝업 닫기 실행 코드 --%>
|
||||
<input type="hidden" name="btnAddrClose" id="btnAddrClose" class="tooltip-close closeAddr" data-focus="popup06-close" />
|
||||
@ -628,145 +625,226 @@
|
||||
<!--// 주소록 불러오기 -->
|
||||
|
||||
<!-- 엑셀 불러오기 -->
|
||||
<form id="excelForm" name="excelForm" method="post">
|
||||
<div class="tooltip-wrap">
|
||||
<div class="popup-com import_layer popup02" tabindex="0" data-tooltip-con="popup02" data-focus="popup02" data-focus-prev="popup02-close">
|
||||
<div class="popup_heading">
|
||||
<p><span>엑셀</span> 불러오기</p>
|
||||
<button type="button" class="tooltip-close" data-focus="popup02-close"><img src="/publish/images/content/layerPopup_close.png" alt="팝업 닫기"></button>
|
||||
</div>
|
||||
<div class="layer_in">
|
||||
<!-- 엑셀파일 불러오기 -->
|
||||
<div class="hascont">
|
||||
<div class="titBox">
|
||||
<p>- 최대 2만 건까지 등록할 수 있습니다.</p>
|
||||
<p>- [엑셀 불러오기]시 문서의 A, B, C, D열을 불러옵니다.(지원하는 파일 형식 : xls, xlsx)</p>
|
||||
<!-- <p>- 이름 : 20byte, [*1*] [*2*] : 40byte까지 입력 가능합니다.</p> -->
|
||||
<p>- 이름 : 20byte까지 입력 가능합니다.</p>
|
||||
<p>- 휴대폰 항목은 숫자, 하이픈(-)만 인식하며, 번호 앞에 0이 생략되어도 정상 등록됩니다.
|
||||
</p>
|
||||
<!-- <button type="button" class="excel_btn" onclick="location.href='/cmm/fms/FileDown.do?atchFileId=FILE_000000000011651&fileSn=1'"><i></i>샘플파일 다운로드</button> -->
|
||||
<button type="button" class="excel_btn" onclick="location.href='/download/msg/팩스_엑셀주소록_등록양식.xlsx'"><i class="downroad"></i>샘플파일 다운로드</button>
|
||||
<div class="tooltip-wrap">
|
||||
<div class="popup-com adr_layer popup02" tabindex="0" data-tooltip-con="popup02" data-focus="popup02" data-focus-prev="popup02-close" style="width: 1000px;">
|
||||
<div class="tooltip-wrap">
|
||||
<div class="popup-com adr_layer adr_popup14" tabindex="0" data-tooltip-con="adr_popup14" data-focus="adr_popup14" data-focus-prev="adr_popu14-close" style="width: 450px;">
|
||||
<div class="popup_heading">
|
||||
<p>주소록 상세 결과</p>
|
||||
<button type="button" class="tooltip-close" data-focus="adr_popup14-close"><img src="/publish/images/content/layerPopup_close.png" alt="팝업 닫기"></button>
|
||||
</div>
|
||||
<div class="layer_in" style="padding:30px 20px;">
|
||||
<div class="table_top">
|
||||
<p>
|
||||
총 <span class="c_e40000" id="errorPopTotCnt">0</span>건
|
||||
/ 중복 <span class="c_002c9a" id="errorPopDupCnt">0</span>건
|
||||
/ 오류 <span class="c_002c9a" id="errorPopErrorCnt">0</span>건</p>
|
||||
<button type="button" class="excel_btn btnType" id="errorExcelBtn"><i class="downroad"></i>엑셀 다운로드</button>
|
||||
</div>
|
||||
<div class="attachedFile">
|
||||
<label for="" class="attachedFile_label">첨부파일</label>
|
||||
<input type="text" id="excelNm" readonly>
|
||||
<input type="file" id="excelFile" accept=".xls, .xlsx" onchange="excelExport(event); return false;" style="display:none"/>
|
||||
<button type="button" class="btnType btnType6 c3">찾아보기</button>
|
||||
<p><span class="vMiddle">*</span> 첨부된 파일은 <span class="c_e40000">[추가]버튼을 클릭</span>하셔야 받는 사람에 등록됩니다.</p>
|
||||
<div class="tb_wrap adr_list" id="tabulator_error">
|
||||
<!-- $tableError 참고 -->
|
||||
</div>
|
||||
<ul class="cf_text_ul">
|
||||
<li>*중복번호는 하나의 번호만 등록됩니다.</li>
|
||||
<li>*팩스번호 형식에 맞지 않는 데이터는 삭제 후 업로드 됩니다.</li>
|
||||
<li>ex) 발송불가 특수문자, 자릿수 오류 등</li>
|
||||
</ul>
|
||||
<div class="popup_btn_wrap2">
|
||||
<button type="button" class="tooltip-close" data-focus="adr_popup14-close" data-focus-next="adr_popup14">닫기</button>
|
||||
</div>
|
||||
</div><!--// 엑셀파일 불러오기 -->
|
||||
<div class="popup_btn_wrap2">
|
||||
<button type="button" class="tooltip-close" data-focus="popup02-close" data-focus-next="popup02" id="excelAdd">추가</button>
|
||||
<button type="button" class="tooltip-close" data-focus="popup02-close" data-focus-next="popup02">닫기</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="popup_heading">
|
||||
<p>엑셀 불러오기</p>
|
||||
<button type="button" class="tooltip-close" id="closeBtn" data-focus="popup02-close"><img src="/publish/images/content/layerPopup_close.png" alt="팝업 닫기"></button>
|
||||
</div>
|
||||
<div class="layer_in" style="padding: 25px 30px;">
|
||||
|
||||
<!-- 엑셀입력 -->
|
||||
<div class="popCont current pop_more_cont" id="popCont_1">
|
||||
<div class="titBox">
|
||||
<p>- 최대 2만 건까지 등록할 수 있습니다.</p>
|
||||
<p>- [엑셀 불러오기]시 문서의 A, B열을 불러옵니다.(지원하는 파일 형식 : xls, xlsx)</p>
|
||||
<p>- 이름 : 20byte까지 입력 가능합니다.</p>
|
||||
<p>- 팩스 번호는 지역번호(02, 031, 033 등), 타사부가번호(030*, 050*, 060, 070, 080, 1**)로 시작하는 번호만 발송 가능합니다. </p>
|
||||
</div>
|
||||
<div class="pop_more_wrap">
|
||||
<button type="button" class="pop_more" onclick="popMore(this);">더보기<i></i></button>
|
||||
</div>
|
||||
</div>
|
||||
<!--// 엑셀입력 -->
|
||||
|
||||
<!-- 공통 -->
|
||||
<div>
|
||||
<table class="layer_tType1">
|
||||
<caption>엑셀입력 표</caption>
|
||||
<colgroup>
|
||||
<col style="width: 95px">
|
||||
<col style="width: auto">
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td colspan="2" style="padding:20px 0;">
|
||||
<div class="file_upload_wrap" style="width:100%;display:flex;">
|
||||
<div class="file_add exel_upload_area">
|
||||
<p><img src="/publish/images/content/file_add.png" alt="파일 붙여넣기">마우스로 엑셀파일을 여기에 끌어다 놓으세요</p>
|
||||
</div>
|
||||
<input type="file" id="excelFile" accept=".xls, .xlsx" style="display:none"/>
|
||||
<button type="button" class="excel_btn2 btnType c3"><i class="uproad"></i>엑셀파일 업로드</button>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<div class="excel_middle2">
|
||||
<p>
|
||||
총 <span class="c_e40000 fwBold" id="excelRowTotCnt">0</span>건
|
||||
/ 중복 <span class="c_002c9a fwBold" id="excelRowDupCnt">0</span>건
|
||||
/ 오류 <span class="c_002c9a fwBold" id="excelRowErrorCnt">0</span>건
|
||||
<button type="button" class="btn_list_detail" data-tooltip="adr_popup14"><img src="/publish/images/search.png"></button>
|
||||
</p>
|
||||
</div>
|
||||
<div class="adr_excel" style="margin-top: 13px; overflow-x:auto;">
|
||||
<!-- thead -->
|
||||
<div class="adr_hd select_adr_hd msg" data-group="tableExcel">
|
||||
<div style="width: 40px;"></div>
|
||||
<div style="width: 100px;"></div>
|
||||
<div style="width: 400px;">
|
||||
<label for="" class="label"></label>
|
||||
<select class="field-selector">
|
||||
<option value="">선택하기</option>
|
||||
<option value="addrNm">이름</option>
|
||||
<option value="addrFaxNo">팩스번호</option>
|
||||
</select>
|
||||
</div>
|
||||
<div style="width: 400px;">
|
||||
<label for="" class="label"></label>
|
||||
<select class="field-selector">
|
||||
<option value="">선택하기</option>
|
||||
<option value="addrNm">이름</option>
|
||||
<option value="addrFaxNo">팩스번호</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="drag_drop_wrap callList_includ_box" id="tabulator_excel"></div>
|
||||
<div class="excel_middle">
|
||||
<div class="select_btnWrap clearfix">
|
||||
<div>
|
||||
<button type="button" id="allDel"><i class="remove_img"></i>전체삭제</button>
|
||||
<button type="button" id="in_select_del"><i class="remove_img"></i>선택삭제</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!--// 공통 -->
|
||||
|
||||
<div class="popup_btn_wrap2" style="margin: 0 auto 30px auto;">
|
||||
<button type="button" id="btnAddrMassReg">추가</button>
|
||||
<button type="button" id="btnAddrMassClose" class="tooltip-close" data-focus="adr_popup01-close" data-focus-next="popup02">닫기</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<!--// 엑셀 불러오기 -->
|
||||
|
||||
<!--// 전송내역 팝업 시작-->
|
||||
<div class="tooltip-wrap">
|
||||
<div class="popup-com history_layer popup03" tabindex="0" data-tooltip-con="popup03" data-focus="popup03" data-focus-prev="popup03-close">
|
||||
<div class="popup_heading">
|
||||
<p><span>전송내역</p>
|
||||
<button type="button" class="tooltip-close" data-focus="popup03-close" id="btnLatestAddPhoneClose"><img src="/publish/images/content/layerPopup_close.png" alt="팝업 닫기"></button>
|
||||
</div>
|
||||
<div class="layer_in">
|
||||
<!-- tab button -->
|
||||
<ul class="tabType6">
|
||||
<li class="tab active"><button type="button" onclick="TabType(this,'1');">최근 전송내역</button></li>
|
||||
<li class="tab"><button type="button" onclick="TabType(this,'2');">자주보내는 번호</button></li>
|
||||
</ul><!--// tab button -->
|
||||
<!-- 최근 전송내역 -->
|
||||
<div class="history_cont hascont current">
|
||||
<div class="histroy_trans latestMsgArea" id="latestMsgArea">
|
||||
<ul id="latestMsgUl">
|
||||
<c:choose>
|
||||
<c:when test="${not empty resultLatestMsgList}">
|
||||
<c:forEach var="latestMsgList" items="${resultLatestMsgList}" varStatus="status">
|
||||
<li id="latestLi">
|
||||
<input type="checkbox" id="addrChk_${status.count}" name="latAddrChk" value="<c:out value='${latestMsgList.callTo}'/>">
|
||||
<label for="addrChk_${status.count}" class="label">최근 전송내역</label>
|
||||
<p><c:out value="${latestMsgList.callTo}"/></p>
|
||||
<button type="button" id="latestAddrDel"><img src="/publish/images/popup/close3.png" alt="전화번호 삭제"></button>
|
||||
</li>
|
||||
</c:forEach>
|
||||
</c:when>
|
||||
<c:otherwise>
|
||||
<li>
|
||||
<p>최근 발송 내역이 없습니다.</p>
|
||||
<div class="popup-com history_layer popup03" tabindex="0" data-tooltip-con="popup03" data-focus="popup03" data-focus-prev="popup03-close">
|
||||
<div class="popup_heading">
|
||||
<p><span>전송내역</p>
|
||||
<button type="button" class="tooltip-close" data-focus="popup03-close" id="btnLatestAddPhoneClose"><img src="/publish/images/content/layerPopup_close.png" alt="팝업 닫기"></button>
|
||||
</div>
|
||||
<div class="layer_in">
|
||||
<!-- tab button -->
|
||||
<ul class="tabType6">
|
||||
<li class="tab active"><button type="button" onclick="TabType(this,'1');">최근 전송내역</button></li>
|
||||
<li class="tab"><button type="button" onclick="TabType(this,'2');">자주보내는 번호</button></li>
|
||||
</ul><!--// tab button -->
|
||||
<!-- 최근 전송내역 -->
|
||||
<div class="history_cont hascont current">
|
||||
<div class="histroy_trans latestMsgArea" id="latestMsgArea">
|
||||
<ul id="latestMsgUl">
|
||||
<c:choose>
|
||||
<c:when test="${not empty resultLatestMsgList}">
|
||||
<c:forEach var="latestMsgList" items="${resultLatestMsgList}" varStatus="status">
|
||||
<li id="latestLi">
|
||||
<input type="checkbox" id="addrChk_${status.count}" name="latAddrChk" value="<c:out value='${latestMsgList.callTo}'/>">
|
||||
<label for="addrChk_${status.count}" class="label">최근 전송내역</label>
|
||||
<p><c:out value="${latestMsgList.callTo}"/></p>
|
||||
<button type="button" id="latestAddrDel"><img src="/publish/images/popup/close3.png" alt="전화번호 삭제"></button>
|
||||
</li>
|
||||
</c:otherwise>
|
||||
</c:choose>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="popup_btn_wrap2 hisroy_btn">
|
||||
<button type="button" id="latestAddPhone">선택추가</button>
|
||||
<button type="button" id="latestCancelPhone">선택취소</button>
|
||||
</div>
|
||||
</div><!--// 최근 전송내역 -->
|
||||
<!-- 자주보내는 번호 -->
|
||||
<div class="history_cont hascont">
|
||||
<div class="histroy_trans" id="bookMarkMsgArea">
|
||||
<ul id="bookMsgUl">
|
||||
<c:choose>
|
||||
<c:when test="${not empty resultBookMarkMsgList}">
|
||||
<c:forEach var="bookMarkMsgList" items="${resultBookMarkMsgList}" varStatus="status">
|
||||
<li id="bookMarkLi">
|
||||
<input type="checkbox" id="bokAddrChk_${status.count}" name="bookAddrChk" value="<c:out value='${bookMarkMsgList.addrPhoneNo}'/>">
|
||||
<label for="addrChk_${status.count}" class="label">최근 전송내역</label>
|
||||
<p><c:out value="${bookMarkMsgList.addrPhoneNo}"/></p>
|
||||
<button type="button" id="bookMarkAddrDel"><img src="/publish/images/popup/close3.png" alt="전화번호 삭제"></button>
|
||||
</li>
|
||||
</c:forEach>
|
||||
</c:when>
|
||||
<c:otherwise>
|
||||
<li>
|
||||
<p>등록된 자주 보내는 번호 내역이 없습니다.</p>
|
||||
</c:forEach>
|
||||
</c:when>
|
||||
<c:otherwise>
|
||||
<li>
|
||||
<p>최근 발송 내역이 없습니다.</p>
|
||||
</li>
|
||||
</c:otherwise>
|
||||
</c:choose>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="popup_btn_wrap2 hisroy_btn">
|
||||
<button type="button" id="latestAddPhone">선택추가</button>
|
||||
<button type="button" id="latestCancelPhone">선택취소</button>
|
||||
</div>
|
||||
</div><!--// 최근 전송내역 -->
|
||||
<!-- 자주보내는 번호 -->
|
||||
<div class="history_cont hascont">
|
||||
<div class="histroy_trans" id="bookMarkMsgArea">
|
||||
<ul id="bookMsgUl">
|
||||
<c:choose>
|
||||
<c:when test="${not empty resultBookMarkMsgList}">
|
||||
<c:forEach var="bookMarkMsgList" items="${resultBookMarkMsgList}" varStatus="status">
|
||||
<li id="bookMarkLi">
|
||||
<input type="checkbox" id="bokAddrChk_${status.count}" name="bookAddrChk" value="<c:out value='${bookMarkMsgList.addrPhoneNo}'/>">
|
||||
<label for="addrChk_${status.count}" class="label">최근 전송내역</label>
|
||||
<p><c:out value="${bookMarkMsgList.addrPhoneNo}"/></p>
|
||||
<button type="button" id="bookMarkAddrDel"><img src="/publish/images/popup/close3.png" alt="전화번호 삭제"></button>
|
||||
</li>
|
||||
</c:otherwise>
|
||||
</c:choose>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="popup_btn_wrap2 hisroy_btn">
|
||||
<button type="button" id="bookMarkAddPhone">선택추가</button>
|
||||
<button type="button" id="bookMarkCancelPhone">선택취소</button>
|
||||
</div>
|
||||
</div><!--// 자주보내는 번호 -->
|
||||
</div>
|
||||
</c:forEach>
|
||||
</c:when>
|
||||
<c:otherwise>
|
||||
<li>
|
||||
<p>등록된 자주 보내는 번호 내역이 없습니다.</p>
|
||||
</li>
|
||||
</c:otherwise>
|
||||
</c:choose>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="popup_btn_wrap2 hisroy_btn">
|
||||
<button type="button" id="bookMarkAddPhone">선택추가</button>
|
||||
<button type="button" id="bookMarkCancelPhone">선택취소</button>
|
||||
</div>
|
||||
</div><!--// 자주보내는 번호 -->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!--// 전송내역 팝업 -->
|
||||
|
||||
|
||||
|
||||
<!-- 팩스 전송 결과 -->
|
||||
|
||||
<div class="tooltip-wrap">
|
||||
<!-- 문자발송 성공 레이어팝업 -->
|
||||
<div class="popup-com pop_msg_success">
|
||||
<div class="popup_heading">
|
||||
<p>문자 전송 결과</p>
|
||||
<!-- <button type="button" class="tooltip-close" onclick="msgSuccessClose(this);"><img src="/publish/images/content/layerPopup_close.png" alt="팝업 닫기"></button> -->
|
||||
</div>
|
||||
<div class="layer_in">
|
||||
<div class="msg_text"
|
||||
</div>
|
||||
</div>
|
||||
<div class="popup_btn">
|
||||
<button type="button" onclick="goPage(); return false;">팩스 발송결과 바로가기</button>
|
||||
<button type="button" class="tooltip-close" onclick="window.location.reload()">확인</button>
|
||||
<div class="tooltip-wrap">
|
||||
<!-- 문자발송 성공 레이어팝업 -->
|
||||
<div class="popup-com pop_msg_success">
|
||||
<div class="popup_heading">
|
||||
<p>문자 전송 결과</p>
|
||||
</div>
|
||||
<div class="layer_in">
|
||||
<div class="msg_text"
|
||||
</div>
|
||||
</div>
|
||||
<div class="popup_btn">
|
||||
<button type="button" onclick="goPage(); return false;">팩스 발송결과 바로가기</button>
|
||||
<button type="button" class="tooltip-close" onclick="window.location.reload()">확인</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
<!-- //팩스 전송 결과 -->
|
||||
<%--
|
||||
====================================================================
|
||||
= 레이어 팝엽 끝 =
|
||||
====================================================================
|
||||
--%>
|
||||
|
||||
|
||||
--%>
|
||||
@ -3381,10 +3381,10 @@ $(document).on('click', '#hdnLink', function() {
|
||||
</div>
|
||||
<div class="put_right">
|
||||
<div class="btn_popup_wrap spc_wrap">
|
||||
<button type="button" data-tooltip="popup06" class="btnType btnType7 popupAddr">주소록 불러오기</button>
|
||||
<button type="button" data-tooltip="popup06" class="btnType btnType7 popupAddr">주소록 불러오기</button>
|
||||
</div>
|
||||
<div class="btn_popup_wrap">
|
||||
<button type="button" data-tooltip="popup02" class="btnType btnType7">엑셀 불러오기</button>
|
||||
<button type="button" data-tooltip="popup02" class="btnType btnType7">엑셀 불러오기</button>
|
||||
</div>
|
||||
<div class="btn_popup_wrap">
|
||||
<button type="button" data-tooltip="popup03" class="btnType btnType7 tab1">최근 전송내역</button>
|
||||
|
||||
@ -559,9 +559,6 @@ function fn_phoneDupl($objTabul) {
|
||||
if(errorCount > 0){
|
||||
alert('휴대폰 형식에 맞지 않는 데이터는 삭제 후 업로드 됩니다.\nex) 발송불가 특수문자, 자릿수 오류 등');
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
function fn_dupliPopupShow(){
|
||||
|
||||
@ -27,23 +27,21 @@ $(document).on('change', '#addrGrpIdInfo', function() {
|
||||
|
||||
//주소록 그룹정보 불러오기
|
||||
function getAddrGroupList() {
|
||||
$.ajax({
|
||||
type : "POST",
|
||||
async : false,
|
||||
url : "/web/mjon/addr/addrGroupListAjax.do",
|
||||
data : {},
|
||||
dataType:'json',
|
||||
success : function(data) {
|
||||
//alert(JSON.stringify(data.addrGroupList));
|
||||
|
||||
// Show Html
|
||||
getAddrGroupListShow(data.addrGroupList);
|
||||
},
|
||||
error : function(xhr, status, error) {
|
||||
alert(error);
|
||||
return false;
|
||||
}
|
||||
});
|
||||
$.ajax({
|
||||
type : "POST"
|
||||
, async : false
|
||||
, url : "/web/mjon/addr/addrGroupListAjax.do"
|
||||
, data : {}
|
||||
, dataType:'json'
|
||||
, success : function(data) {
|
||||
// Show Html
|
||||
getAddrGroupListShow(data.addrGroupList);
|
||||
}
|
||||
, error : function(xhr, status, error) {
|
||||
alert(error);
|
||||
return false;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
//Show Html
|
||||
@ -55,7 +53,6 @@ function getAddrGroupListShow(jsonList) {
|
||||
for (var j = 0; j < jsonList.length; j++) {
|
||||
sHtml += " <option value='" + $.trim(jsonList[j].addrGrpId) + "' />" + $.trim(jsonList[j].addrGrpNm) + "</option>";
|
||||
}
|
||||
|
||||
$("#addrGrpIdInfo").html(sHtml);
|
||||
}
|
||||
|
||||
@ -88,130 +85,55 @@ function getAddrGroupDuplCheckAjax() {
|
||||
return isReturn;
|
||||
}
|
||||
|
||||
//주소록 팝업 닫기 기능
|
||||
function addrClose(){
|
||||
|
||||
$(".closeAddr").trigger("click");
|
||||
|
||||
//주소록 레이어 팝업의 Tabulator 데이터 지워주기
|
||||
tableAddr.clearData();
|
||||
|
||||
}
|
||||
|
||||
//주소록 불러오기에서 수신자 리스트 추가해 주기
|
||||
function addrToList(){
|
||||
function addrToList_advc(type){
|
||||
|
||||
var selectedData = tableAddr.getSelectedRows();
|
||||
var tableSize = tableAddr.getDataCount();
|
||||
var tableData = [];
|
||||
|
||||
if(selectedData == "" || selectedData == null){
|
||||
|
||||
if(tableSize < 1){
|
||||
alert("주소록을 선택해 주세요.");
|
||||
return false;
|
||||
|
||||
}else{ // 선택한 Row 데이터 저장해주기
|
||||
}else{
|
||||
|
||||
|
||||
// fax 번호 유효성 검사
|
||||
for(var i=0; i < selectedData.length; i++){
|
||||
// 선택한 Row 데이터 저장해주기
|
||||
var existingData = tableL.getData();
|
||||
var addrData;
|
||||
|
||||
var faxNum = removeDash(selectedData[i].getData().addrPhone);
|
||||
if(!checkFaxNum(faxNum)){
|
||||
alert("팩스 번호를 확인해 주세요.");
|
||||
return false;
|
||||
|
||||
}
|
||||
if(type == 'all'){
|
||||
addrData = tableAddr.getData();
|
||||
}else{
|
||||
addrData = tableAddr.getSelectedData();
|
||||
}
|
||||
|
||||
// 기존 데이터와 새로운 데이터를 합칩니다.
|
||||
var combinedData = existingData.concat(addrData);
|
||||
// 합쳐진 데이터를 tableL에 설정합니다.
|
||||
tableL.setData(combinedData);
|
||||
|
||||
for(var i=0; i < selectedData.length; i++){
|
||||
|
||||
//좌측 받는사람 리스트를 담아둔 배열에 데이터를 추가해 준다.
|
||||
tableData.push({
|
||||
phone: removeDash(selectedData[i].getData().addrPhone),
|
||||
name: selectedData[i].getData().addrName
|
||||
});
|
||||
}
|
||||
|
||||
//선택한 데이터 받는사람 리스트에 추가해 주기
|
||||
addPhoneInfo(tableData);
|
||||
var totRows = 0; // 좌측 받는사람 총 갯수
|
||||
totRows = tableL.getRows().length;
|
||||
updateTotCnt(totRows); //전체 데이터 갯수 구하기
|
||||
$(".closeAddr").trigger("click");
|
||||
|
||||
//주소록 레이어 팝업의 Tabulator 데이터 지워주기
|
||||
tableAddr.clearData();
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function loadAddrList(){
|
||||
|
||||
/*
|
||||
serialize 를 사용할때는 processData, contentType 옵션 제가할것
|
||||
*/
|
||||
var data = $("#searchAddrGrpForm").serialize();
|
||||
|
||||
var url = "/web/mjon/fax/addr/selectFaxAddrListAjax.do";
|
||||
// var url = "/web/mjon/msgdata/selectMsgAddrListAjax.do";
|
||||
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: url,
|
||||
data: data,
|
||||
dataType:'json',
|
||||
async: false,
|
||||
cache: false,
|
||||
success: function (returnData, status) {
|
||||
console.log('returnData :: ', returnData);
|
||||
console.log('status :: ', status);
|
||||
if(status == 'success'){ // status 확인 필요한가. 석세스 안뜨면 에러 가지 않나
|
||||
|
||||
if(returnData.result == "success"){
|
||||
|
||||
var addrList = returnData.resultAddrList;
|
||||
var tableData = [];
|
||||
|
||||
if(addrList.length == 0){
|
||||
|
||||
alert("주소록 정보가 없습니다.");
|
||||
tableAddr.setData(tableData);
|
||||
return false;
|
||||
}
|
||||
|
||||
//받는사람 리스트를 담아둔 배열에 신규 추가 데이터를 추가해 준다.
|
||||
for(var i=0; i < addrList.length; i++){
|
||||
|
||||
tableData.push({addrGroupNm: addrList[i].addrGrpNm, addrPhone: removeDash(addrList[i].addrPhoneNo) , addrName: addrList[i].addrNm});
|
||||
|
||||
}
|
||||
|
||||
//우측 주소록 리스트 Tabulator에 입력해주기
|
||||
tableAddr.setData(tableData);
|
||||
|
||||
}else{
|
||||
|
||||
alert(returnData.message);
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
} else if(status== 'fail'){
|
||||
alert("주소록 불러오기에 실패하였습니다. !!");
|
||||
}
|
||||
},
|
||||
error: function (e) { alert("주소록 불러오기에 실패하였습니다."); console.log("ERROR : ", e); }
|
||||
});
|
||||
|
||||
//주소록 팝업 닫기 기능
|
||||
function addrToList_close(){
|
||||
$(".closeAddr").trigger("click");
|
||||
//주소록 레이어 팝업의 Tabulator 데이터 지워주기
|
||||
tableAddr.clearData();
|
||||
}
|
||||
|
||||
//주소록 검색 기능처리
|
||||
function fnAddrSearch(){
|
||||
|
||||
var form = document.searchAddrGrpForm;
|
||||
form.searchKeyword.value = form.searchAddrKeyword.value;
|
||||
form.searchCondition.value = form.searchAddrCondition.value;
|
||||
|
||||
loadAddrList();
|
||||
|
||||
}
|
||||
|
||||
//주소록 불러오기 팝업의 그룹 선택시 우측에 주소록 불러오기
|
||||
@ -232,23 +154,63 @@ function fnSelectAddrList(type,addrGrpId,item){
|
||||
//왼쪽 그룹리스트의 그룸명을 선택시 검색어를 초기화해준다.
|
||||
form.searchAddrKeyword.value="";
|
||||
|
||||
/*
|
||||
$(item).toggleClass("open");
|
||||
if ($(item).hasClass("open") === true) {
|
||||
$(item).find("img").attr("src", "/publish/images/content/open_folder2.png");
|
||||
$(item).find("img").attr("alt", "폴더 열림");
|
||||
}
|
||||
else {
|
||||
$(item).find("img").attr("src", "/publish/images/content/close_folder2.png");
|
||||
$(item).find("img").attr("alt", "폴더 닫힘");
|
||||
}
|
||||
*/
|
||||
|
||||
$(item).find("img").attr("src", "/publish/images/content/open_folder2.png");
|
||||
$(item).find("img").attr("alt", "폴더 열림");
|
||||
|
||||
loadAddrList();
|
||||
}
|
||||
|
||||
//주소록 목록 조회
|
||||
function loadAddrList(){
|
||||
|
||||
/*
|
||||
serialize 를 사용할때는 processData, contentType 옵션 제가할것
|
||||
*/
|
||||
var data = $("#searchAddrGrpForm").serialize();
|
||||
var url = "/web/mjon/fax/addr/selectFaxAddrListAjax.do";
|
||||
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: url,
|
||||
data: data,
|
||||
dataType:'json',
|
||||
async: false,
|
||||
cache: false,
|
||||
success: function (returnData, status) {
|
||||
console.log('returnData :: ', returnData);
|
||||
console.log('status :: ', status);
|
||||
if(status == 'success'){ // status 확인 필요한가. 석세스 안뜨면 에러 가지 않나
|
||||
|
||||
if(returnData.result == "success"){
|
||||
|
||||
var addrList = returnData.resultAddrList;
|
||||
var tableData = [];
|
||||
|
||||
if(addrList.length == 0){
|
||||
alert("주소록 정보가 없습니다.");
|
||||
tableAddr.setData(tableData);
|
||||
return false;
|
||||
}
|
||||
|
||||
//받는사람 리스트를 담아둔 배열에 신규 추가 데이터를 추가해 준다.
|
||||
for(var i=0; i < addrList.length; i++){
|
||||
tableData.push({groupNm: addrList[i].addrGrpNm, phone: removeDash(addrList[i].addrPhoneNo) , name: addrList[i].addrNm});
|
||||
}
|
||||
|
||||
//우측 주소록 리스트 Tabulator에 입력해주기
|
||||
tableAddr.setData(tableData);
|
||||
|
||||
}else{
|
||||
alert(returnData.message);
|
||||
return false;
|
||||
}
|
||||
|
||||
} else if(status== 'fail'){
|
||||
alert("주소록 불러오기에 실패하였습니다. !!");
|
||||
}
|
||||
},
|
||||
error: function (e) { alert("주소록 불러오기에 실패하였습니다."); console.log("ERROR : ", e); }
|
||||
});
|
||||
}
|
||||
|
||||
//주소록 불러오기 그룹명 검색 기능처리
|
||||
|
||||
420
src/main/webapp/js/user/fax/exelUpload.js
Normal file
420
src/main/webapp/js/user/fax/exelUpload.js
Normal file
@ -0,0 +1,420 @@
|
||||
$(document).ready(function(){
|
||||
//#############################################################################################
|
||||
//파일업로드 드래그앤 드롭 시작
|
||||
//#############################################################################################
|
||||
|
||||
var objDragAndDrop = $(".exel_upload_area");
|
||||
$(document).on("dragenter",".exel_upload_area",function(e){
|
||||
e.stopPropagation();
|
||||
e.preventDefault();
|
||||
});
|
||||
$(document).on("dragover",".exel_upload_area",function(e){
|
||||
e.stopPropagation();
|
||||
e.preventDefault();
|
||||
});
|
||||
$(document).on("drop",".exel_upload_area",function(e){
|
||||
fn_excelLoadAddActive();
|
||||
e.preventDefault();
|
||||
var files = e.originalEvent.dataTransfer.files;
|
||||
excelFileChange(files[0]);
|
||||
});
|
||||
|
||||
$(document).on('dragenter', function (e){
|
||||
e.stopPropagation();
|
||||
e.preventDefault();
|
||||
});
|
||||
$(document).on('dragover', function (e){
|
||||
e.stopPropagation();
|
||||
e.preventDefault();
|
||||
});
|
||||
$(document).on('drop', function (e){
|
||||
e.stopPropagation();
|
||||
e.preventDefault();
|
||||
});
|
||||
//#############################################################################################
|
||||
//파일업로드 드래그앤 드롭 종료
|
||||
//#############################################################################################
|
||||
|
||||
//받는사람 전체삭제 버튼 처리
|
||||
$('#allDel').click(function(){
|
||||
var data = tableExcel.getRows();
|
||||
tableExcel.clearData();
|
||||
$("#excelRowTotCnt").text(0); //총건수 수정
|
||||
$("#excelRowDupCnt").text(0); //중복건수 수정
|
||||
dupliPhoneDataRealList.length = 0; // 중복 휴대폰번호 초기화
|
||||
|
||||
// select box 초기화
|
||||
$('.field-selector').each(function() { $(this).val(''); });
|
||||
|
||||
});
|
||||
|
||||
//받는사람 선택삭제 버튼 처리해주기
|
||||
$('#in_select_del').click(function(){
|
||||
|
||||
if(tableExcel == null || tableExcel == ""){
|
||||
alert("받는사람을 추가해 주세요.");
|
||||
return false;
|
||||
}
|
||||
|
||||
var selectedData = tableExcel.getSelectedRows();
|
||||
|
||||
if(selectedData == "" || selectedData == null){
|
||||
alert("삭제할 연락처를 선택해주세요.");
|
||||
return false;
|
||||
}else{ // 선택한 Row 데이터 삭제하기
|
||||
if(confirm("선택하신 받는 사람을 삭제하시겠습니까?")){
|
||||
// 선택 데이터 삭제
|
||||
selectedData.forEach(row => row.delete());
|
||||
totRows = tableExcel.getRows().length;
|
||||
$("#excelRowTotCnt").text(totRows);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
$("#excelFile").on("change", function(event) {
|
||||
var fileInfo = event.target.files;
|
||||
if(fileInfo.length > 0){
|
||||
excelFileChange(fileInfo[0]);
|
||||
} else {
|
||||
fn_excelLoadRemoveActive(); // 파일이 선택되지 않은 경우 로딩 상태 제거
|
||||
setTimeout(() => { $(this).val(''); }, 0); // 파일 선택 초기화
|
||||
}
|
||||
});
|
||||
|
||||
//타이틀 select 선택 이벤트
|
||||
$('.field-selector').on('change', function() {
|
||||
fn_excelLoadAddActive();
|
||||
|
||||
setTimeout(() => {
|
||||
var selectedFields = [];
|
||||
var isDuplicate = false;
|
||||
|
||||
if(tableExcel.getData().length < 1){
|
||||
alert('데이터 입력 후 선택해 주세요.');
|
||||
$(this).val("");
|
||||
fn_excelLoadRemoveActive();
|
||||
return false;
|
||||
}
|
||||
|
||||
// 중복체크
|
||||
$('.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(tableExcel);
|
||||
|
||||
// 필드가 휴대폰이면 열 중복체크
|
||||
if($(this).val() == 'addrFaxNo'){
|
||||
fn_faxDupl(tableExcel);
|
||||
}
|
||||
|
||||
fn_excelLoadRemoveActive();
|
||||
|
||||
}, 0); // 지연 없이 즉시 실행되도록 0ms 지연을 설정
|
||||
|
||||
});
|
||||
|
||||
// 추가버튼
|
||||
$('#btnAddrMassReg').click(function(){
|
||||
|
||||
if(tableExcel.getData().length < 1){
|
||||
alert("한 개 이상의 연락처를 입력하세요");
|
||||
return false;
|
||||
}
|
||||
|
||||
// tableExcel 그룹의 select 요소들을 확인
|
||||
var columns = tableExcel.getColumns();
|
||||
var isAddrFaxNoSelected = columns.some(column => column.getField() === 'addrFaxNo');
|
||||
|
||||
if (!isAddrFaxNoSelected) {
|
||||
alert('팩스번호가 선택되지 않았습니다.');
|
||||
return false;
|
||||
}
|
||||
|
||||
var addrData = tableExcel.getData().map((row, index) => ({
|
||||
name: row.addrNm
|
||||
, phone: removeDash(row.addrFaxNo)
|
||||
}));
|
||||
|
||||
// 기존 tableL의 데이터를 가져옵니다.
|
||||
var existingData = tableL.getData();
|
||||
// 기존 데이터와 새로운 데이터를 합칩니다.
|
||||
var combinedData = existingData.concat(addrData);
|
||||
// 합쳐진 데이터를 tableL에 설정합니다.
|
||||
tableL.setData(combinedData);
|
||||
|
||||
var totRows = 0; // 좌측 받는사람 총 갯수
|
||||
totRows = tableL.getRows().length;
|
||||
updateTotCnt(totRows); //전체 데이터 갯수 구하기
|
||||
|
||||
setAddrMassClose();
|
||||
$('.field-selector').each(function() { $(this).val(''); });
|
||||
$('#closeBtn').click();
|
||||
});
|
||||
|
||||
// 닫기버튼
|
||||
$('#closeBtn').click(function(){
|
||||
setAddrMassClose();
|
||||
});
|
||||
|
||||
// 닫기버튼
|
||||
$('#btnAddrMassClose').click(function(){
|
||||
setAddrMassClose();
|
||||
});
|
||||
|
||||
// excel 오류정보 테스트
|
||||
$(document).on('click', '#errorExcelBtn', function() {
|
||||
if(tableError.getDataCount()<1){
|
||||
alert('오류 정보가 없습니다.');
|
||||
return false;
|
||||
}
|
||||
tableError.download("xlsx", "error_data.xlsx");
|
||||
});
|
||||
});
|
||||
//팝업 텍스트 더보기 클릭 시 펼쳐지고 숨겨짐
|
||||
function popMore(e){
|
||||
$(e).closest(".pop_more_cont").toggleClass("pop_more_click");
|
||||
|
||||
if($(e).closest(".pop_more_cont").is(".pop_more_click")){
|
||||
$(e).html('숨기기');
|
||||
$(e).append('<i></i>');
|
||||
}else {
|
||||
$(e).html('더보기');
|
||||
$(e).append('<i></i>');
|
||||
}
|
||||
}
|
||||
|
||||
//엑셀등록 초기화 값 설정
|
||||
function setAddrMassClose() {
|
||||
tableExcel.clearData();
|
||||
$("#excelRowTotCnt").text(0); //총건수 수정
|
||||
$("#excelRowDupCnt").text(0); //중복건수 수정
|
||||
$("#excelRowErrorCnt").text(0); //중복건수 수정
|
||||
dupliPhoneDataRealList.length = 0; // 중복 휴대폰번호 초기화
|
||||
addrMassDupliSaveList = null;
|
||||
|
||||
$('#excelFile').val(''); //첨부파일 값 초기화
|
||||
|
||||
// popup 영역
|
||||
tableError.clearData();
|
||||
$("#errorPopDupCnt").text(0); // 중복 카운트
|
||||
$("#errorPopErrorCnt").text(0); // 에러 카운트
|
||||
$("#errorPopTotCnt").text(0);
|
||||
$('.field-selector').each(function() { $(this).val(''); }); //select 선택란 초기화
|
||||
}
|
||||
|
||||
//엑셀파일 업로드
|
||||
function excelFileChange(file) {
|
||||
if (file) {
|
||||
// 파일 크기 체크 (20MB)
|
||||
const maxSize = 20 * 1024 * 1024; // 20MB in bytes
|
||||
if (file.size > maxSize) {
|
||||
alert('파일 크기는 20MB를 초과할 수 없습니다.');
|
||||
return;
|
||||
}
|
||||
|
||||
fn_excelLoadAddActive();
|
||||
var reader = new FileReader();
|
||||
var extension = file.name.split('.').pop().toLowerCase();
|
||||
reader.onload = function(e) {
|
||||
setTimeout(() => { // 파일 읽기 완료 후 실행되도록 함
|
||||
if (extension === 'xlsx') {
|
||||
var data = new Uint8Array(e.target.result);
|
||||
var workbook = XLSX.read(data, {type: 'array'});
|
||||
var firstSheet = workbook.Sheets[workbook.SheetNames[0]];
|
||||
var jsonData = XLSX.utils.sheet_to_json(firstSheet, {header: 1});
|
||||
processExcelData(jsonData);
|
||||
} else {
|
||||
alert('지원되지 않는 파일 형식입니다.');
|
||||
}
|
||||
fn_excelLoadRemoveActive();
|
||||
}, 0); // 지연 없이 즉시 실행되도록 0ms 지연을 설정
|
||||
};
|
||||
if (extension === 'xlsx') {
|
||||
reader.readAsArrayBuffer(file);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//엑셀 데이터 처리 함수
|
||||
function processExcelData(data) {
|
||||
var keys = ['A', 'B'];
|
||||
var tableData = [];
|
||||
|
||||
data.slice(0).forEach((row, index) => {
|
||||
var rowData = {};
|
||||
keys.forEach((key, idx) => { // index 변수명 변경 (내부와 외부에서 사용되므로 충돌 방지)
|
||||
rowData[key] = (typeof row[idx] === 'string') ? row[idx].trim() : row[idx];
|
||||
});
|
||||
|
||||
tableData.push(rowData);
|
||||
});
|
||||
|
||||
updateTable(tableData);
|
||||
}
|
||||
|
||||
//공통 테이블 업데이트 함수
|
||||
function updateTable(tableData) {
|
||||
tableExcel.setColumns([ //Define Table Columns
|
||||
{formatter:"rowSelection", titleFormatter:"rowSelection",clipboard:false, headerHozAlign:"center", hozAlign:"center", width:10, headerSort:false, cellClick:function(e, cell){
|
||||
cell.getRow().toggleSelect();
|
||||
}
|
||||
}
|
||||
,{formatter:"rownum", align:"center" ,title:"No", hozAlign:"center", headerHozAlign:"center", width:100}
|
||||
,{title:"A", field:"A", hozAlign:"center", headerHozAlign: "center", width:400, validator:["maxLength:100", "string"]}
|
||||
,{title:"B", field:"B", hozAlign:"center", headerHozAlign: "center", width:400, validator:["maxLength:100", "string"]}
|
||||
]);
|
||||
|
||||
// excelRowTotCnt 업데이트
|
||||
tableExcel.setData(tableData).then(() => {
|
||||
document.getElementById("excelRowTotCnt").innerText = tableData.length;
|
||||
});
|
||||
|
||||
fn_excelLoadRemoveActive();
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 타이틀 select 선택할때마다 실행해서
|
||||
* 데이터테이블 필드값 수정
|
||||
*/
|
||||
function updateTableFields(objTabul) {
|
||||
var currentData = objTabul.getData();
|
||||
var columns = [
|
||||
{formatter: "rowSelection", titleFormatter: "rowSelection", clipboard: false, hozAlign: "center", headerHozAlign: "center", width:10, headerSort: false, cellClick: function(e, cell) {
|
||||
cell.getRow().toggleSelect();
|
||||
}}
|
||||
,{formatter:"rownum", align:"center", title:"No", hozAlign:"center", headerHozAlign:"center", width:100}
|
||||
];
|
||||
|
||||
var fieldMapping = [];
|
||||
$('.field-selector').each(function(index) {
|
||||
var selectedField = $(this).val();
|
||||
var field = String.fromCharCode(65 + index);
|
||||
if (selectedField) {
|
||||
columns.push({
|
||||
title: field
|
||||
, field: selectedField
|
||||
, hozAlign: "center"
|
||||
, headerHozAlign: "center"
|
||||
, editor: false
|
||||
, width: 400
|
||||
, validator: ["maxLength:100", "string"]
|
||||
});
|
||||
fieldMapping.push(selectedField);
|
||||
} else {
|
||||
columns.push({
|
||||
title: field
|
||||
, field: field
|
||||
, hozAlign: "center"
|
||||
, headerHozAlign: "center"
|
||||
, editor: false
|
||||
, width: 400
|
||||
, 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_faxDupl(objTabul) {
|
||||
|
||||
tableError.clearData();
|
||||
|
||||
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.addrFaxNo;
|
||||
|
||||
// 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.addrFaxNo = formattedNumber;
|
||||
existingNumbers.add(cleanedNumber); // 추가된 번호를 기존 목록에 추가
|
||||
newData.push(row); // 유효한 데이터만 새로운 배열에 추가
|
||||
} else {
|
||||
// 오류: 유효성 통과 못함
|
||||
errorCount++;
|
||||
errors.push({
|
||||
name: row.addrNm // 이름
|
||||
, phone: row.addrFaxNo // 팩스번호
|
||||
, result: "오류" // 결과 메시지 추가
|
||||
});
|
||||
}
|
||||
} else {
|
||||
// 중복
|
||||
duplicateCount++;
|
||||
errors.push({
|
||||
name: row.addrNm // 이름
|
||||
, phone: row.addrFaxNo // 팩스번호
|
||||
, result: "오류" // 결과 메시지 추가
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
// data 배열을 newData 배열로 대체
|
||||
data = newData;
|
||||
|
||||
|
||||
// 수정된 데이터로 테이블 업데이트
|
||||
objTabul.setData(data);
|
||||
// 오류 총 카운트
|
||||
$("#excelRowTotCnt").text(objTabul.getDataCount());
|
||||
// 중복 카운트
|
||||
$("#excelRowDupCnt").text(duplicateCount);
|
||||
// 에러 카운트
|
||||
$("#excelRowErrorCnt").text(errorCount);
|
||||
|
||||
// popup 영역
|
||||
$("#errorPopTotCnt").text(objTabul.getDataCount());
|
||||
// 중복 카운트
|
||||
$("#errorPopDupCnt").text(duplicateCount);
|
||||
// 에러 카운트
|
||||
$("#errorPopErrorCnt").text(errorCount);
|
||||
|
||||
tableError.setData(errors);
|
||||
|
||||
if(errorCount > 0){
|
||||
alert('휴대폰 형식에 맞지 않는 데이터는 삭제 후 업로드 됩니다.\nex) 발송불가 특수문자, 자릿수 오류 등');
|
||||
}
|
||||
}
|
||||
@ -1,23 +1,27 @@
|
||||
|
||||
$(document).ready(function (){
|
||||
|
||||
//받는사람 연락처 내용 처리
|
||||
//Tabulator AJAX Data Loading
|
||||
//받는사람 연락처 Tabulator 설정
|
||||
tableL = new Tabulator(".callList_box", {
|
||||
height:"255px",
|
||||
layout:"fitDataStretch",
|
||||
layout:"fitColumns",
|
||||
headerHozAlign:"center",
|
||||
validationMode:"highlight",
|
||||
placeholder:"복사(Ctrl+C)한 내용을 여기에 붙여넣기(Ctrl+V) 해주세요.", //fit columns to width of table (optional)
|
||||
resizableColumns:false,
|
||||
columnDefaults:{ // 공통설정
|
||||
hozAlign: "center",
|
||||
headerHozAlign: "center",
|
||||
editor: "input",
|
||||
editor: false
|
||||
},
|
||||
columns:[ //Define Table Columns
|
||||
{formatter:"rowSelection", titleFormatter:"rowSelection",clipboard:false, hozAlign:"center", headerSort:false, cellClick:function(e, cell){
|
||||
{formatter:"rowSelection", titleFormatter:"rowSelection",clipboard:false, hozAlign:"center", width:5, headerSort:false, cellClick:function(e, cell){
|
||||
cell.getRow().toggleSelect();
|
||||
}},
|
||||
{title:"이름", hozAlign:"center", field:"name", editor:"input", validator:["maxLength:12"], cellEdited:function(cell){
|
||||
}},
|
||||
{title:"수신번호", hozAlign:"center", field:"phone", editor:"input", width:100, validator:["required","minLength:10", "maxLength:12", "regex:/[^0-9]/g, ''"], cellEdited:function(cell){
|
||||
//cell - cell component
|
||||
{title:"No", formatter:"rownum", align:"center", hozAlign:"center", width:60},
|
||||
{title:"이름", field:"name", validator:["maxLength:12"]},
|
||||
{title:"수신번호", field:"phone", validator:["required","minLength:10", "maxLength:12", "regex:/[^0-9]/g, ''"], cellEdited:function(cell){
|
||||
fnDuplPhone();
|
||||
}},
|
||||
],
|
||||
@ -51,29 +55,23 @@ $(document).ready(function (){
|
||||
|
||||
});
|
||||
|
||||
|
||||
//주소록 불러오기 팝업 내용
|
||||
//Tabulator AJAX Data Loading
|
||||
//주소록 불러오기 팝업 Tabulator 설정
|
||||
tableAddr = new Tabulator(".callAddr_box", {
|
||||
height:"255px",
|
||||
layout:"fitColumns",
|
||||
headerHozAlign:"center",
|
||||
validationMode:"highlight",
|
||||
placeholder:"주소록 그룹을 선택해 주세요.", //fit columns to width of table (optional)
|
||||
placeholder:"주소록 그룹을 선택해 주세요.",
|
||||
resizableColumns:false,
|
||||
progressiveLoad:"scroll",
|
||||
columns:[ //Define Table Columns
|
||||
{formatter:"rowSelection", titleFormatter:"rowSelection",clipboard:false, hozAlign:"center", headerSort:false, cellClick:function(e, cell){
|
||||
{formatter:"rowSelection", headerHozAlign:"center", titleFormatter:"rowSelection",clipboard:false, hozAlign:"center", width:10, headerSort:false, cellClick:function(e, cell){
|
||||
cell.getRow().toggleSelect();
|
||||
}
|
||||
},
|
||||
{title:"그룹명", hozAlign:"center", field:"addrGroupNm", editor:"input", width:200, validator:["required","minLength:2", "maxLength:40"]},
|
||||
{title:"이름", hozAlign:"center", field:"addrName", editor:"input", width:250, validator:["maxLength:12"]},
|
||||
{title:"수신자번호", hozAlign:"center", field:"addrPhone", editor:"input", width:300, validator:["required","minLength:10", "maxLength:11"]},
|
||||
// {title:"[*1*]", hozAlign:"center", field:"addrRep1", editor:"input", width:84, validator:["maxLength:40"]},
|
||||
// {title:"[*2*]", hozAlign:"center", field:"addrRep2", editor:"input", width:84, validator:["maxLength:40"]},
|
||||
// {title:"[*3*]", hozAlign:"center", field:"addrRep3", editor:"input", width:84, validator:["maxLength:40"]},
|
||||
// {title:"[*4*]", hozAlign:"center", field:"addrRep4", editor:"input", width:84, validator:["maxLength:40"]},
|
||||
|
||||
}},
|
||||
{formatter: "rownum", align: "center", title: "No", hozAlign: "center", headerHozAlign: "center", width: 60},
|
||||
{title:"그룹명", hozAlign:"center", field:"groupNm", editor: false, width:200, validator:["required","minLength:2", "maxLength:40"]},
|
||||
{title:"이름", hozAlign:"center", field:"name", editor:false, width:200, validator:["maxLength:12"]},
|
||||
{title:"수신자번호", hozAlign:"center", field:"phone", editor:false, width:200, validator:["required","minLength:10", "maxLength:11"]},
|
||||
],
|
||||
validationFailed:function(cell, value, parameters){ // 유효성 체크 함수 - 아직 잘 모르겠음
|
||||
var valid = cell.isValid();
|
||||
@ -94,9 +92,61 @@ $(document).ready(function (){
|
||||
}
|
||||
return value % parameters.addrPhone;
|
||||
},
|
||||
|
||||
});
|
||||
|
||||
//엑셀 불러오기 팝업 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, headerHozAlign:"center", hozAlign:"center", width:10, headerSort:false, cellClick:function(e, cell){
|
||||
cell.getRow().toggleSelect();
|
||||
}}
|
||||
,{formatter:"rownum", align:"center" ,title:"No", hozAlign:"center", headerHozAlign:"center", width:100}
|
||||
,{title:"A", field:"A", hozAlign:"center", headerHozAlign: "center", width:400, validator:["maxLength:100", "string"]}
|
||||
,{title:"B", field:"B", hozAlign:"center", headerHozAlign: "center", width:400, validator:["maxLength:100", "string"]}
|
||||
],
|
||||
validationFailed:function(cell, value, parameters){ // 유효성 체크 함수
|
||||
var valid = cell.isValid();
|
||||
if(!valid){
|
||||
alert("양식에 맞지 않는 정보가 입력되었습니다.");
|
||||
|
||||
//해당 셀 데이터 삭제
|
||||
cell.setValue("");
|
||||
}
|
||||
return value % parameters.phone;
|
||||
},
|
||||
});
|
||||
|
||||
//엑셀 오류 주소록 상세 팝업 Tabulator 설정
|
||||
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}
|
||||
]
|
||||
});
|
||||
|
||||
|
||||
|
||||
//핸드폰 번호 Tabulator에서 수정시 중복 체크
|
||||
function fnDuplPhone(){
|
||||
|
||||
@ -130,9 +180,7 @@ $(document).ready(function (){
|
||||
updateTotCnt(totRows); //전체 데이터 갯수 구하기
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//받는사람 목록에 복사/붙여넣기 기능 처리
|
||||
@ -324,7 +372,6 @@ $(document).ready(function (){
|
||||
alert("올바른 팩스 번호를 입력해 주세요.");
|
||||
$('#callTo').focus();
|
||||
return false;
|
||||
|
||||
}
|
||||
callToNum = callToNum.replaceAll("[^0-9]", "");
|
||||
|
||||
@ -338,11 +385,8 @@ $(document).ready(function (){
|
||||
for(var i=0; i < tableL.getRows().length; i++){
|
||||
|
||||
if(callToNum == data[i].getData().phone){
|
||||
|
||||
dpCnt++;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if(dpCnt > 0){
|
||||
@ -360,9 +404,7 @@ $(document).ready(function (){
|
||||
var totLen = tableL.getRows().length;
|
||||
|
||||
for(var i=0; i < totLen; i++){
|
||||
|
||||
tableData.push({phone: data[i].getData().phone.trim(), name: data[i].getData().name});
|
||||
|
||||
}
|
||||
|
||||
//연락처 추가해 주기
|
||||
@ -378,9 +420,7 @@ $(document).ready(function (){
|
||||
//totalPriceSum(totRows);
|
||||
|
||||
$('#callTo').val("");
|
||||
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
|
||||
@ -402,9 +442,7 @@ $(document).ready(function (){
|
||||
$("#rowDupCnt").text(0); //중복건수 수정
|
||||
totalPriceSum(0); //결제 금액 수정
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
|
||||
@ -415,7 +453,6 @@ $(document).ready(function (){
|
||||
|
||||
alert("받는사람을 추가해 주세요.");
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
var selectedData = tableL.getSelectedRows();
|
||||
@ -441,23 +478,8 @@ $(document).ready(function (){
|
||||
|
||||
var smsTxtArea = $('#smsTxtArea').val();
|
||||
fn_priceClclt();
|
||||
// //일괄변환 문구 결제금액 처리
|
||||
// if(smsTxtArea.indexOf("[*이름*]") > -1
|
||||
// || smsTxtArea.indexOf("[*1*]") > -1
|
||||
// || smsTxtArea.indexOf("[*2*]") > -1
|
||||
// || smsTxtArea.indexOf("[*3*]") > -1
|
||||
// || smsTxtArea.indexOf("[*4*]") > -1){
|
||||
//
|
||||
// fnReplCell();
|
||||
// }else{
|
||||
// //결제 금액 구하기
|
||||
// totalPriceSum(totRows);
|
||||
// }
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
//주소록 불러오기 버튼 클릭시
|
||||
@ -473,7 +495,6 @@ $(document).ready(function (){
|
||||
}
|
||||
|
||||
$("#addrGroupLoad").load("/web/mjon/fax/addr/selectFaxAddrGroupListAjaxView.do", "" ,function(response, status, xhr){
|
||||
// $("#addrGroupLoad").load("/web/mjon/fax/addr/faxAddrGroupListAjax.do", "" ,function(response, status, xhr){
|
||||
//리스트 스크롤 처리해주기
|
||||
$(".adr_pop_list").mCustomScrollbar({
|
||||
axis: 'y',
|
||||
@ -507,17 +528,7 @@ $(document).ready(function (){
|
||||
$("input:checkbox[name='latAddrChk']:checked").each(function(index){
|
||||
|
||||
var chkPhone = $(this).val();
|
||||
|
||||
// if(!checkHpNum(chkPhone)){
|
||||
|
||||
// alert("올바른 전화번호가 아닙니다.");
|
||||
// return false;
|
||||
|
||||
// }else{
|
||||
|
||||
addPhoneList.push({phone: removeDash(chkPhone.trim())});
|
||||
|
||||
// }
|
||||
addPhoneList.push({phone: removeDash(chkPhone.trim())});
|
||||
|
||||
});
|
||||
|
||||
@ -531,34 +542,16 @@ $(document).ready(function (){
|
||||
alert("연락처를 선택해주세요.");
|
||||
return false;
|
||||
}
|
||||
|
||||
//중복연락처 제거
|
||||
//var removeDuplData = dupliPhoneData(addPhoneList);
|
||||
|
||||
//받는사람 목록에 추가
|
||||
//tableL.addData(removeDuplData);
|
||||
|
||||
//총 받는사람 수 계산
|
||||
//totRows = tableL.getRows().length;
|
||||
//updateTotCnt(totRows);
|
||||
|
||||
//결제 금액 구하기
|
||||
//totalPriceSum(totRows);
|
||||
|
||||
});
|
||||
|
||||
//최근전송내역 팝업 선택 취소 버튼 처리
|
||||
$(document).on('click', '#latestCancelPhone', function (){
|
||||
|
||||
$("input[name=latAddrChk]").prop("checked", false);
|
||||
|
||||
});
|
||||
|
||||
//최근전송내역 팝업 삭제 버튼 처리
|
||||
$(document).on('click', '#latestAddrDel', function (){
|
||||
|
||||
$(this).parent("#latestLi").remove();
|
||||
|
||||
});
|
||||
|
||||
//자주보내는 번호 팝업 선택추가 버튼 처리(체크내역 받는사람 리스트로 추가해주기)
|
||||
@ -567,20 +560,8 @@ $(document).ready(function (){
|
||||
var addPhoneList = []; //신규로 추가할 전화번호 저장변수
|
||||
|
||||
$("input:checkbox[name='bookAddrChk']:checked").each(function(index){
|
||||
|
||||
var chkPhone = $(this).val();
|
||||
|
||||
// if(!checkHpNum(chkPhone)){
|
||||
//
|
||||
// alert("올바른 전화번호가 아닙니다.");
|
||||
// return false;
|
||||
//
|
||||
// }else{
|
||||
|
||||
addPhoneList.push({phone: removeDash(chkPhone.trim())});
|
||||
|
||||
// }
|
||||
|
||||
addPhoneList.push({phone: removeDash(chkPhone.trim())});
|
||||
});
|
||||
|
||||
if(addPhoneList.length > 0){
|
||||
@ -592,20 +573,6 @@ $(document).ready(function (){
|
||||
alert("연락처를 선택해주세요.");
|
||||
return false;
|
||||
}
|
||||
|
||||
//중복연락처 제거
|
||||
//var removeDuplData = dupliPhoneData(addPhoneList);
|
||||
|
||||
//받는사람 목록에 추가
|
||||
//tableL.addData(removeDuplData);
|
||||
|
||||
//총 받는사람 수 계산
|
||||
//totRows = tableL.getRows().length;
|
||||
//updateTotCnt(totRows);
|
||||
|
||||
//결제 금액 구하기
|
||||
//totalPriceSum(totRows);
|
||||
|
||||
});
|
||||
|
||||
//자주보내는 번호 팝업 선택 취소 버튼 처리
|
||||
@ -651,47 +618,31 @@ $(document).ready(function (){
|
||||
for(var i=0; i < totLen; i++){
|
||||
|
||||
var cellValue = invalid[i].getValue();
|
||||
|
||||
if(i == 0){
|
||||
|
||||
errMsg = cellValue;
|
||||
|
||||
}else{
|
||||
|
||||
errMsg = errMsg +", "+ cellValue;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if(errMsg == "" || errMsg == null){
|
||||
|
||||
alert("내용에 오류가 있습니다.");
|
||||
return false;
|
||||
|
||||
}else{
|
||||
|
||||
alert(errMsg + "의 내용에 오류가 있습니다.");
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
}else{
|
||||
|
||||
alert("오류 데이터가 없습니다.");
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
}else{
|
||||
|
||||
alert("연락처를 입력해 주세요.");
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
var tableErrorData = [];
|
||||
@ -700,19 +651,15 @@ var totRows = 0; // 좌측 받는사람 총 갯수
|
||||
|
||||
//전체 데이터 갯수 구하는 함수
|
||||
function updateTotCnt(data){
|
||||
|
||||
$("#rowTotCnt").text(data);
|
||||
|
||||
}
|
||||
|
||||
//주소록 불러오기에서 수신자 리스트 tabulator에 데이터 추가해주기
|
||||
function addPhoneInfo(data){
|
||||
|
||||
if(data == null){
|
||||
|
||||
alert("연락처 정보가 없습니다.");
|
||||
return;
|
||||
|
||||
}else{
|
||||
|
||||
var idx = 0;
|
||||
@ -730,9 +677,7 @@ function addPhoneInfo(data){
|
||||
|
||||
//받는사람 리스트를 담아둔 배열에 신규 추가 데이터를 추가해 준다.
|
||||
for(var i=0; i < newData.length; i++){
|
||||
|
||||
tableData.push({phone: removeDash(newData[i].phone) , name: newData[i].name});
|
||||
|
||||
}
|
||||
|
||||
var temp = tableData.length;
|
||||
@ -748,24 +693,7 @@ function addPhoneInfo(data){
|
||||
|
||||
var smsTxtArea = $('#smsTxtArea').val();
|
||||
fn_priceClclt();
|
||||
//일괄변환 문구 결제금액 처리
|
||||
// if(smsTxtArea.indexOf("[*이름*]") > -1
|
||||
// || smsTxtArea.indexOf("[*1*]") > -1
|
||||
// || smsTxtArea.indexOf("[*2*]") > -1
|
||||
// || smsTxtArea.indexOf("[*3*]") > -1
|
||||
// || smsTxtArea.indexOf("[*4*]") > -1){
|
||||
//
|
||||
// fnReplCell();
|
||||
//
|
||||
// }else{
|
||||
//
|
||||
// //결제 금액 구하기
|
||||
// totalPriceSum(totRows);
|
||||
//
|
||||
// }
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
387
src/main/webapp/js/web/addr/fax/faxEvent.js
Normal file
387
src/main/webapp/js/web/addr/fax/faxEvent.js
Normal file
@ -0,0 +1,387 @@
|
||||
$(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() == 'addrFaxNo'){
|
||||
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.addrFaxNo;
|
||||
|
||||
// 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.addrFaxNo = formattedNumber;
|
||||
existingNumbers.add(cleanedNumber); // 추가된 번호를 기존 목록에 추가
|
||||
newData.push(row); // 유효한 데이터만 새로운 배열에 추가
|
||||
} else {
|
||||
// 오류: 유효성 통과 못함
|
||||
errorCount++;
|
||||
|
||||
errors.push({
|
||||
name: row.addrNm, // 이름
|
||||
phone: row.addrFaxNo, // 폰번호
|
||||
result: "오류" // 결과 메시지 추가
|
||||
});
|
||||
}
|
||||
} else {
|
||||
// 중복
|
||||
duplicateCount++;
|
||||
|
||||
errors.push({
|
||||
name: row.addrNm, // 이름
|
||||
phone: row.addrFaxNo, // 폰번호
|
||||
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: "",
|
||||
addrFaxNo: "",
|
||||
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: "", addrFaxNo: "", addrMemo: ""});
|
||||
}
|
||||
|
||||
|
||||
var existingNumbers = []; // 중복 번호를 저장할 배열
|
||||
// 모든 행의 'addrFaxNo' 값을 배열에 추가
|
||||
var allRows = $tableSelf.getData(); // 테이블의 모든 데이터를 가져옴
|
||||
allRows.forEach(function(row) {
|
||||
if (row.addrFaxNo) {
|
||||
const cleanedExistingNumber = row.addrFaxNo.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, 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: 240,
|
||||
validator: ["maxLength:100", "string"]
|
||||
});
|
||||
});
|
||||
|
||||
// 테이블을 기본 필드로 업데이트
|
||||
$objTabul.setColumns(columns);
|
||||
}
|
||||
93
src/main/webapp/js/web/addr/fax/faxTabulator.js
Normal file
93
src/main/webapp/js/web/addr/fax/faxTabulator.js
Normal file
@ -0,0 +1,93 @@
|
||||
|
||||
|
||||
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;
|
||||
},
|
||||
});
|
||||
|
||||
//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());
|
||||
});
|
||||
});
|
||||
|
||||
@ -675,6 +675,35 @@ button.check_validity:hover {border: 1px solid #a3a3a3;box-shadow: 0px 0px 5px
|
||||
.sub .election .receipt_number_table_wrap .tbody_ul li label{width:calc(100% - 60px);}
|
||||
.sub .election .send_hover_cont p{line-height:1.5;}
|
||||
|
||||
/* 2024/10/21 선거문자 - 20건문자(수동문자) 20줄 */
|
||||
.sub .election .table_20{justify-content:space-between;}
|
||||
.sub .election .table_20 .put_left{width:calc(100% - 240px);}
|
||||
.sub .election .table_20 .put_left .list_top{display:flex;justify-content:space-between;align-items:flex-end;margin:0 0 10px 0;}
|
||||
.sub .election .table_20 .put_left .receipt_total_text{font-size:16px;}
|
||||
.sub .election .table_20 .put_left .receipt_total_text span{font-weight:500;}
|
||||
.sub .election .table_20 .put_left .list_top .btnType9{width:80px;height:30px;font-size:15px;font-weight:400;}
|
||||
.sub .election .table_20 .put_right{width:225px;max-width:225px;align-self:flex-end;margin:0 0 50px 0;}
|
||||
.sub .election .table_20 .put_right .receipt_info{height:auto;padding:20px 15px;}
|
||||
.sub .election .table_20 .tbody_ul.table_ul_20 li{width:100%;}
|
||||
.sub .election .table_20 .table_ul.table_ul_20 li:nth-child(2n)::after{display:block;}
|
||||
.sub .election .table_20 .table_ul.table_ul_20 .input_wrap{width:60px;}
|
||||
.sub .election .table_20 .table_ul.table_ul_20 .td_name{width:20%;}
|
||||
.sub .election .table_20 .table_ul.table_ul_20 .td_number{width:40%;}
|
||||
.sub .election .table_20 .table_ul.table_ul_20 .td_status{width:calc(40% - 60px);}
|
||||
.sub .election .table_20 .table_ul.table_ul_20 div{position:relative;}
|
||||
.sub .election .table_20 .table_ul.table_ul_20 div::after{position:absolute;content:"";width:1px;height:16px;background:#d4d4d4;right:0;top:50%;transform:translateY(-50%);}
|
||||
.sub .election .table_20 .table_ul.table_ul_20.tbody_ul li:last-child{border-bottom:0;}
|
||||
.sub .election .table_20 .table_ul.table_ul_20.tbody_ul li,.sub .election .receipt_number_table_wrap .table_ul.table_ul_20.tbody_ul li:only-child:last-child{border-bottom:1px solid #e5e5e5;}
|
||||
.sub .election .table_20 .table_ul.table_ul_20.tbody_ul li::after,
|
||||
.sub .election .table_20 .table_ul.table_ul_20.tbody_ul div:last-child::after{display:none;}
|
||||
.sub .election .table_20 .list_bottom_right label{margin:0 0 0 8px;}
|
||||
.sub .election .table_20 .put_right .selType2{width:100%;height:30px;border:0;}
|
||||
.sub .election .table_20 .put_right dd.send_box{padding:10px 15px;}
|
||||
.sub .election .table_20 .put_right dd.send_box .title{font-size:15px;font-weight:500;text-align:left;}
|
||||
.sub .election .table_20 .put_right dd.send_box .send_number b{font-size:20px;}
|
||||
.sub .election .table_20 .put_right dd.cf_box{font-size:14px;padding:0;background:transparent;text-align:left;}
|
||||
.sub .election .table_20 .put_right dd.cf_box span{font-weight:500;}
|
||||
|
||||
/* send_bottom */
|
||||
.send_bottom {position: relative;margin: 60px 0 0 0;}
|
||||
.send_bottom .bottom_content {background-color: #fff;padding: 40px;border-radius: 10px;}
|
||||
@ -1466,6 +1495,15 @@ button.check_validity:hover {border: 1px solid #a3a3a3;box-shadow: 0px 0px 5px
|
||||
.loading_layer .loading_container .bar {position:absolute;left:0;top:0;width:100%;height:100%;border:6px solid #fff;border-top-color:transparent;border-bottom-color:transparent;border-radius:60px;box-sizing:border-box;animation:rotate-loading 1.5s linear infinite;}
|
||||
.loading_layer .loading_container .text {font-size:15px;line-height:108px;text-align:center;color:#fff;animation:text-loading 1s ease-in infinite;}
|
||||
|
||||
|
||||
.loading_execl_layer {display:none;position:fixed;left:0;top:0;width:100%;height:100%;z-index:1000000;}
|
||||
.loading_execl_layer.active {display:block;}
|
||||
.loading_execl_layer:after {content:'';display:block;width:100%;height:100%;background:#000;opacity:0.5;filter:opacity(50);}
|
||||
.loading_execl_layer .loading_container {position:absolute;left:50%;top:50%;width:110px;height:110px;transform:translate(-50%,-50%);z-index:1;}
|
||||
.loading_execl_layer .loading_container .bar {position:absolute;left:0;top:0;width:100%;height:100%;border:6px solid #fff;border-top-color:transparent;border-bottom-color:transparent;border-radius:60px;box-sizing:border-box;animation:rotate-loading 1.5s linear infinite;}
|
||||
.loading_execl_layer .loading_container .text {font-size:15px;line-height:108px;text-align:center;color:#fff;animation:text-loading 1s ease-in infinite;}
|
||||
|
||||
|
||||
.upload_area .loading_layer{position: absolute;}
|
||||
.upload_area .loading_layer.active+p,.upload_area .loading_layer.active+p+.cf_text_wrap{opacity: 0;}
|
||||
|
||||
|
||||
@ -1202,6 +1202,9 @@
|
||||
.file_upload_wrap .file_add.upload_area p{display:block;}
|
||||
.file_upload_wrap .btnType.c3{position:unset;height:82px;}
|
||||
|
||||
.file_upload_wrap .file_add.exel_upload_area{display:flex;width:78%;margin:0;align-items:center;justify-content:center;}
|
||||
.file_upload_wrap .file_add.exel_upload_area p{display:block;}
|
||||
|
||||
.adr_layer.adr_popup01 .btn_list_detail {width:23px;height:23px;margin:-3px 0 0 5px;border:1px solid #d5d5d5;border-radius:5px;}
|
||||
.adr_layer.adr_popup01 .btn_list_detail img{width:69%;height:auto;margin:-3.5px 0 0 0;}
|
||||
.adr_layer.adr_popup14 .table_top{display:flex;align-items:center;justify-content:space-between;}
|
||||
|
||||
@ -1571,3 +1571,11 @@ function fn_loadAddActive(){
|
||||
function fn_loadRemoveActive(){
|
||||
$('.loading_layer').removeClass('active');
|
||||
}
|
||||
|
||||
function fn_excelLoadAddActive(){
|
||||
$('.loading_execl_layer').addClass('active');
|
||||
}
|
||||
|
||||
function fn_excelLoadRemoveActive(){
|
||||
$('.loading_execl_layer').removeClass('active');
|
||||
}
|
||||
|
||||
2448
src/main/webapp/publish/sub_election_v2024.html
Normal file
2448
src/main/webapp/publish/sub_election_v2024.html
Normal file
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user