--- src/main/webapp/WEB-INF/jsp/web/msgdata/MsgDataSMLView.jsp
+++ src/main/webapp/WEB-INF/jsp/web/msgdata/MsgDataSMLView.jsp
... | ... | @@ -18,7 +18,6 @@ |
| 18 | 18 |
|
| 19 | 19 |
$(document).ready(function(){
|
| 20 | 20 |
|
| 21 |
- |
|
| 22 | 21 |
|
| 23 | 22 |
|
| 24 | 23 |
//받는사람 연락처 내용 처리 |
... | ... | @@ -98,12 +97,21 @@ |
| 98 | 97 |
placeholder: "주소록 그룹을 선택해 주세요.", |
| 99 | 98 |
resizableColumns: false, |
| 100 | 99 |
progressiveLoad:"scroll", |
| 100 |
+ progressiveRender: true, // 렌더링 최적화 활성화 |
|
| 101 |
+ progressiveRenderSize: 100, // 한 번에 렌더링할 행 수를 줄임 |
|
| 101 | 102 |
columns: [ |
| 102 |
- {formatter: "rowSelection", clipboard: false, hozAlign: "center", headerSort: false},
|
|
| 103 |
-// {formatter: "rowSelection", titleFormatter: "rowSelection", clipboard: false, hozAlign: "center", headerSort: false, cellClick: function(e, cell) {
|
|
| 104 |
-// cell.getRow().toggleSelect(); |
|
| 105 |
-// } |
|
| 106 |
-// }, |
|
| 103 |
+// {formatter: "rowSelection", clipboard: false, hozAlign: "center", headerSort: false},
|
|
| 104 |
+ {formatter: "rowSelection", titleFormatter: "rowSelection", hozAlign: "center", headerSort: false,
|
|
| 105 |
+ cellClick: function(e, cell) {
|
|
| 106 |
+ fn_loadAddActive(); // 로딩 활성화 |
|
| 107 |
+ setTimeout(() => {
|
|
| 108 |
+ tableAddr.blockRedraw(); // 렌더링 차단 |
|
| 109 |
+ cell.getRow().toggleSelect(); // 선택 상태 토글 |
|
| 110 |
+ tableAddr.restoreRedraw(); // 렌더링 재개 |
|
| 111 |
+ fn_loadRemoveActive(); // 로딩 비활성화 |
|
| 112 |
+ }, 0); // 비동기적으로 실행 |
|
| 113 |
+ } |
|
| 114 |
+ }, |
|
| 107 | 115 |
{formatter: "rownum", align: "center", title: "No", hozAlign: "center", headerHozAlign: "center", width: 60},
|
| 108 | 116 |
{title: "그룹명", hozAlign: "center", field: "addrGroupNm", editor: false, width: 100, validator: ["required", "minLength:2", "maxLength:40"]},
|
| 109 | 117 |
{title: "이름", hozAlign: "center", field: "name", editor: false, width: 100, validator: ["maxLength:12"]},
|
... | ... | @@ -1018,60 +1026,18 @@ |
| 1018 | 1026 |
.filter(num => isValidPhoneNumber(num)); // 유효한 번호만 필터링; |
| 1019 | 1027 |
|
| 1020 | 1028 |
console.log('numbers : ', numbers);
|
| 1021 |
- |
|
| 1022 |
- const addrData = numbers |
|
| 1023 |
- .map(number => {
|
|
| 1024 |
- if (!number) return null; // 빈 값은 제외 |
|
| 1025 |
- return {
|
|
| 1026 |
- name: "", // name은 빈 문자열 |
|
| 1027 |
- phone: removeDash(number), // 전화번호는 removeDash 처리 |
|
| 1028 |
- rep1: "", // rep로 시작하는 값 모두 빈 문자열 |
|
| 1029 |
- rep2: "", |
|
| 1030 |
- rep3: "", |
|
| 1031 |
- rep4: "", |
|
| 1032 |
- }; |
|
| 1033 |
- }) |
|
| 1034 |
- .filter(data => data !== null); // null 제거 |
|
| 1029 |
+ const addrData = processPhoneNumbers(numbers); |
|
| 1035 | 1030 |
|
| 1036 |
- |
|
| 1037 |
- |
|
| 1038 |
- |
|
| 1039 | 1031 |
|
| 1040 | 1032 |
// 기존 tableL의 데이터를 가져옵니다. |
| 1041 | 1033 |
var existingData = tableL.getData(); |
| 1042 |
- var combinedData = existingData.concat(addrData); |
|
| 1043 |
- |
|
| 1044 |
- /** |
|
| 1045 |
- * @ phone을 기준으로 중복 제거 및 갯수 계산 |
|
| 1046 |
- * @ 결과 반환 |
|
| 1047 |
- * return {
|
|
| 1048 |
- * uniqueArray, // 중복 제거된 배열 |
|
| 1049 |
- * uniqueCount, // 중복 제거된 데이터 개수 |
|
| 1050 |
- * duplicateArray // 중복된 데이터 배열 |
|
| 1051 |
- * duplicateCount: duplicateArray.length // 중복된 데이터 개수 |
|
| 1052 |
- * }; |
|
| 1053 |
- */ |
|
| 1054 |
- const result = removeDuplicatesAndCount(combinedData, 'phone'); |
|
| 1055 |
- |
|
| 1056 | 1034 |
|
| 1057 |
- // 총 30만건이 넘으면 false |
|
| 1058 |
- if (!validateRowLimit(result.uniqueCount)) {
|
|
| 1059 |
- return false; |
|
| 1060 |
- } |
|
| 1035 |
+ // 데이터 병합 및 중복 제거 |
|
| 1036 |
+ const result = mergeAndValidateData(existingData, addrData); |
|
| 1061 | 1037 |
|
| 1062 |
- // 합쳐진 데이터를 tableL에 설정합니다. |
|
| 1063 |
- tableL.setData(result.uniqueArray); |
|
| 1064 |
- // 중복데이터 건수 입력 |
|
| 1065 |
- setRowDupCnt(result.duplicateArray.length); |
|
| 1066 | 1038 |
|
| 1067 |
- // 미리보기 버튼 활성화 |
|
| 1068 |
- updateButtons(0); |
|
| 1069 |
- |
|
| 1070 |
- var totRows = tableL.getRows().length; |
|
| 1071 |
- updateTotCnt(totRows); //전체 데이터 갯수 구하기 |
|
| 1072 |
- |
|
| 1073 |
- |
|
| 1074 |
- totalPriceSum(totRows); |
|
| 1039 |
+ // 테이블 데이터 업데이트 |
|
| 1040 |
+ if (!updateTableData(tableL, result)) return false; |
|
| 1075 | 1041 |
|
| 1076 | 1042 |
// textarea 초기화 |
| 1077 | 1043 |
textarea.val(''); // jQuery 객체에서 값을 초기화할 때는 .val('') 사용
|
... | ... | @@ -1223,56 +1189,79 @@ |
| 1223 | 1189 |
|
| 1224 | 1190 |
//최근전송내역 팝업 선택추가 버튼 처리(체크내역 받는사람 리스트로 추가해주기) |
| 1225 | 1191 |
$(document).on('click', '#latestAddPhone', function (){
|
| 1226 |
- var addPhoneList = []; //신규로 추가할 전화번호 저장변수 |
|
| 1192 |
+ var numbers = []; //신규로 추가할 전화번호 저장변수 |
|
| 1227 | 1193 |
$("input:checkbox[name='latAddrChk']:checked").each(function(index){
|
| 1228 | 1194 |
var chkPhone = $(this).val(); |
| 1229 | 1195 |
if(!checkHpNum(chkPhone)){
|
| 1230 | 1196 |
alert("올바른 전화번호가 아닙니다.");
|
| 1231 | 1197 |
return false; |
| 1232 | 1198 |
}else{
|
| 1233 |
- addPhoneList.push({phone: removeDash(chkPhone.trim())});
|
|
| 1199 |
+ numbers.push(removeDash(chkPhone.trim())); |
|
| 1234 | 1200 |
} |
| 1235 | 1201 |
}); |
| 1236 | 1202 |
|
| 1237 |
- if (!validateRowLimit(tableL.getDataCount(), addPhoneList.length)) {
|
|
| 1238 |
- return false; |
|
| 1239 |
- } |
|
| 1240 |
- if(addPhoneList.length > 0){
|
|
| 1241 |
- //연락처 추가해 주기 |
|
| 1242 |
- addPhoneInfo(addPhoneList); |
|
| 1243 |
- $("#btnLatestAddPhoneClose").trigger("click");
|
|
| 1244 |
- } |
|
| 1245 |
- else {
|
|
| 1203 |
+ |
|
| 1204 |
+ if(numbers.length < 1) |
|
| 1205 |
+ {
|
|
| 1246 | 1206 |
alert("연락처를 선택해주세요.");
|
| 1247 | 1207 |
return false; |
| 1248 |
- } |
|
| 1208 |
+ } |
|
| 1209 |
+ |
|
| 1210 |
+ console.log('numbers : ', numbers);
|
|
| 1211 |
+ const addrData = processPhoneNumbers(numbers); |
|
| 1212 |
+ |
|
| 1213 |
+ |
|
| 1214 |
+ // 기존 tableL의 데이터를 가져옵니다. |
|
| 1215 |
+ var existingData = tableL.getData(); |
|
| 1216 |
+ |
|
| 1217 |
+ // 데이터 병합 및 중복 제거 |
|
| 1218 |
+ const result = mergeAndValidateData(existingData, addrData); |
|
| 1219 |
+ |
|
| 1220 |
+ |
|
| 1221 |
+ // 테이블 데이터 업데이트 |
|
| 1222 |
+ if (!updateTableData(tableL, result)) return false; |
|
| 1223 |
+ |
|
| 1224 |
+ |
|
| 1225 |
+ $("#btnLatestAddPhoneClose").trigger("click");
|
|
| 1226 |
+ |
|
| 1249 | 1227 |
}); |
| 1250 | 1228 |
|
| 1251 | 1229 |
//최근전송내역 팝업 전체추가 버튼 처리 |
| 1252 | 1230 |
$(document).on('click', '#latestAddPhoneAll', function (){
|
| 1253 |
- var addPhoneList = []; //신규로 추가할 전화번호 저장변수 |
|
| 1231 |
+ var numbers = []; //신규로 추가할 전화번호 저장변수 |
|
| 1254 | 1232 |
$("input:checkbox[name='latAddrChk']").each(function(index){
|
| 1255 | 1233 |
var chkPhone = $(this).val(); |
| 1256 | 1234 |
if(!checkHpNum(chkPhone)){
|
| 1257 | 1235 |
alert("올바른 전화번호가 아닙니다.");
|
| 1258 | 1236 |
return false; |
| 1259 | 1237 |
}else{
|
| 1260 |
- addPhoneList.push({phone: removeDash(chkPhone.trim())});
|
|
| 1238 |
+ numbers.push(removeDash(chkPhone.trim())); |
|
| 1261 | 1239 |
} |
| 1262 | 1240 |
}); |
| 1263 | 1241 |
|
| 1264 |
- if (!validateRowLimit(tableL.getDataCount(), addPhoneList.length)) {
|
|
| 1242 |
+ if(numbers.length < 1) |
|
| 1243 |
+ {
|
|
| 1244 |
+ alert("연락처를 선택해주세요.");
|
|
| 1265 | 1245 |
return false; |
| 1266 |
- } |
|
| 1267 |
- if(addPhoneList.length > 0){
|
|
| 1268 |
- //연락처 추가해 주기 |
|
| 1269 |
- addPhoneInfo(addPhoneList); |
|
| 1270 |
- $("#btnLatestAddPhoneClose").trigger("click");
|
|
| 1271 |
- } |
|
| 1272 |
- else {
|
|
| 1273 |
- alert("연락처가 없습니다.");
|
|
| 1274 |
- return false; |
|
| 1275 |
- } |
|
| 1246 |
+ } |
|
| 1247 |
+ |
|
| 1248 |
+ console.log('numbers : ', numbers);
|
|
| 1249 |
+ const addrData = processPhoneNumbers(numbers); |
|
| 1250 |
+ |
|
| 1251 |
+ |
|
| 1252 |
+ // 기존 tableL의 데이터를 가져옵니다. |
|
| 1253 |
+ var existingData = tableL.getData(); |
|
| 1254 |
+ |
|
| 1255 |
+ // 데이터 병합 및 중복 제거 |
|
| 1256 |
+ const result = mergeAndValidateData(existingData, addrData); |
|
| 1257 |
+ |
|
| 1258 |
+ |
|
| 1259 |
+ // 테이블 데이터 업데이트 |
|
| 1260 |
+ if (!updateTableData(tableL, result)) return false; |
|
| 1261 |
+ |
|
| 1262 |
+ |
|
| 1263 |
+ $("#btnLatestAddPhoneClose").trigger("click");
|
|
| 1264 |
+ |
|
| 1276 | 1265 |
}); |
| 1277 | 1266 |
|
| 1278 | 1267 |
//최근전송내역 팝업 선택 취소 버튼 처리 |
... | ... | @@ -1291,62 +1280,78 @@ |
| 1291 | 1280 |
|
| 1292 | 1281 |
//자주보내는 번호 팝업 선택추가 버튼 처리(체크내역 받는사람 리스트로 추가해주기) |
| 1293 | 1282 |
$(document).on('click', '#bookMarkAddPhone', function (){
|
| 1294 |
- var addPhoneList = []; //신규로 추가할 전화번호 저장변수 |
|
| 1283 |
+ var numbers = []; //신규로 추가할 전화번호 저장변수 |
|
| 1295 | 1284 |
$("input:checkbox[name='bookAddrChk']:checked").each(function(index){
|
| 1296 | 1285 |
var chkPhone = $(this).val(); |
| 1297 | 1286 |
if(!checkHpNum(chkPhone)){
|
| 1298 | 1287 |
alert("올바른 전화번호가 아닙니다.");
|
| 1299 | 1288 |
return false; |
| 1300 | 1289 |
}else{
|
| 1301 |
- addPhoneList.push({phone: removeDash(chkPhone.trim())});
|
|
| 1290 |
+ numbers.push(removeDash(chkPhone.trim())); |
|
| 1302 | 1291 |
} |
| 1303 | 1292 |
}); |
| 1304 | 1293 |
|
| 1305 |
- if (!validateRowLimit(tableL.getDataCount(), addPhoneList.length)) {
|
|
| 1306 |
- return false; |
|
| 1307 |
- } |
|
| 1308 |
- |
|
| 1309 |
- |
|
| 1310 |
- if(addPhoneList.length > 0){
|
|
| 1311 |
- //연락처 추가해 주기 |
|
| 1312 |
- addPhoneInfo(addPhoneList); |
|
| 1313 |
- $("#btnLatestAddPhoneClose").trigger("click");
|
|
| 1314 |
- } |
|
| 1315 |
- else {
|
|
| 1294 |
+ if(numbers.length < 1) |
|
| 1295 |
+ {
|
|
| 1316 | 1296 |
alert("연락처를 선택해주세요.");
|
| 1317 | 1297 |
return false; |
| 1318 |
- } |
|
| 1298 |
+ } |
|
| 1299 |
+ |
|
| 1300 |
+ console.log('numbers : ', numbers);
|
|
| 1301 |
+ const addrData = processPhoneNumbers(numbers); |
|
| 1302 |
+ |
|
| 1303 |
+ |
|
| 1304 |
+ // 기존 tableL의 데이터를 가져옵니다. |
|
| 1305 |
+ var existingData = tableL.getData(); |
|
| 1306 |
+ |
|
| 1307 |
+ // 데이터 병합 및 중복 제거 |
|
| 1308 |
+ const result = mergeAndValidateData(existingData, addrData); |
|
| 1309 |
+ |
|
| 1310 |
+ |
|
| 1311 |
+ // 테이블 데이터 업데이트 |
|
| 1312 |
+ if (!updateTableData(tableL, result)) return false; |
|
| 1313 |
+ |
|
| 1314 |
+ |
|
| 1315 |
+ $("#btnLatestAddPhoneClose").trigger("click");
|
|
| 1319 | 1316 |
}); |
| 1320 | 1317 |
|
| 1321 | 1318 |
//자주보내는 번호 팝업 전체추가 버튼 처리 |
| 1322 | 1319 |
$(document).on('click', '#bookMarkAddPhoneAll', function (){
|
| 1323 |
- |
|
| 1324 |
- var addPhoneList = []; //신규로 추가할 전화번호 저장변수 |
|
| 1320 |
+ var numbers = []; //신규로 추가할 전화번호 저장변수 |
|
| 1325 | 1321 |
$("input:checkbox[name='bookAddrChk']").each(function(index){
|
| 1326 | 1322 |
var chkPhone = $(this).val(); |
| 1327 | 1323 |
if(!checkHpNum(chkPhone)){
|
| 1328 | 1324 |
alert("올바른 전화번호가 아닙니다.");
|
| 1329 | 1325 |
return false; |
| 1330 | 1326 |
}else{
|
| 1331 |
- addPhoneList.push({phone: removeDash(chkPhone.trim())});
|
|
| 1327 |
+ numbers.push(removeDash(chkPhone.trim())); |
|
| 1332 | 1328 |
} |
| 1333 | 1329 |
}); |
| 1334 | 1330 |
|
| 1335 | 1331 |
|
| 1336 |
- |
|
| 1337 |
- if (!validateRowLimit(tableL.getDataCount(), addPhoneList.length)) {
|
|
| 1332 |
+ if(numbers.length < 1) |
|
| 1333 |
+ {
|
|
| 1334 |
+ alert("연락처를 선택해주세요.");
|
|
| 1338 | 1335 |
return false; |
| 1339 |
- } |
|
| 1336 |
+ } |
|
| 1340 | 1337 |
|
| 1341 |
- if(addPhoneList.length > 0){
|
|
| 1342 |
- //연락처 추가해 주기 |
|
| 1343 |
- addPhoneInfo(addPhoneList); |
|
| 1344 |
- $("#btnLatestAddPhoneClose").trigger("click");
|
|
| 1345 |
- } |
|
| 1346 |
- else {
|
|
| 1347 |
- alert("연락처가 없습니다.");
|
|
| 1348 |
- return false; |
|
| 1349 |
- } |
|
| 1338 |
+ console.log('numbers : ', numbers);
|
|
| 1339 |
+ const addrData = processPhoneNumbers(numbers); |
|
| 1340 |
+ |
|
| 1341 |
+ |
|
| 1342 |
+ // 기존 tableL의 데이터를 가져옵니다. |
|
| 1343 |
+ var existingData = tableL.getData(); |
|
| 1344 |
+ |
|
| 1345 |
+ // 데이터 병합 및 중복 제거 |
|
| 1346 |
+ const result = mergeAndValidateData(existingData, addrData); |
|
| 1347 |
+ |
|
| 1348 |
+ |
|
| 1349 |
+ // 테이블 데이터 업데이트 |
|
| 1350 |
+ if (!updateTableData(tableL, result)) return false; |
|
| 1351 |
+ |
|
| 1352 |
+ |
|
| 1353 |
+ $("#btnLatestAddPhoneClose").trigger("click");
|
|
| 1354 |
+ |
|
| 1350 | 1355 |
}); |
| 1351 | 1356 |
|
| 1352 | 1357 |
//자주보내는 번호 팝업 선택 취소 버튼 처리 |
... | ... | @@ -2934,61 +2939,63 @@ |
| 2934 | 2939 |
|
| 2935 | 2940 |
//주소록 불러오기에서 수신자 리스트 추가해 주기 |
| 2936 | 2941 |
function addrToList_advc(type){
|
| 2937 |
- var selectedData = tableAddr.getSelectedRows(); |
|
| 2938 |
- var tableData = []; |
|
| 2939 |
- |
|
| 2940 |
- console.log() |
|
| 2941 |
- |
|
| 2942 |
- if(selectedData < 1){
|
|
| 2943 |
- |
|
| 2942 |
+ // 선택된 데이터 또는 전체 데이터 변수 초기화 |
|
| 2943 |
+ let selectedData = type === 'select' ? tableAddr.getSelectedRows() : tableAddr.getData(); |
|
| 2944 |
+ |
|
| 2945 |
+ // 데이터가 비어있으면 경고 후 종료 |
|
| 2946 |
+ if (!selectedData || selectedData.length < 1) {
|
|
| 2944 | 2947 |
alert("주소록을 선택해 주세요.");
|
| 2945 | 2948 |
return false; |
| 2946 |
- |
|
| 2947 |
- }else{ // 선택한 Row 데이터 저장해주기
|
|
| 2948 |
- |
|
| 2949 |
- |
|
| 2950 |
- if (!validateRowLimit(tableL.getDataCount(), tableAddr.getSelectedRows())) {
|
|
| 2951 |
- return false; |
|
| 2952 |
- } |
|
| 2953 |
- |
|
| 2954 |
- |
|
| 2955 |
- // 기존 tableL의 데이터를 가져옵니다. |
|
| 2956 |
- var existingData = tableL.getData(); |
|
| 2957 |
- var addrData; |
|
| 2958 |
- |
|
| 2959 |
- if(type == 'all'){
|
|
| 2960 |
- addrData = tableAddr.getData(); |
|
| 2961 |
- }else{
|
|
| 2962 |
- addrData = tableAddr.getSelectedData(); |
|
| 2963 |
- } |
|
| 2964 |
- |
|
| 2965 |
- // 기존 데이터와 새로운 데이터를 합칩니다. |
|
| 2966 |
- var combinedData = existingData.concat(addrData); |
|
| 2967 |
- |
|
| 2968 |
- // 합쳐진 데이터를 tableL에 설정합니다. |
|
| 2969 |
- tableL.setData(combinedData); |
|
| 2970 |
- |
|
| 2971 |
- //일괄변환 문구 결제금액 처리 |
|
| 2972 |
- totRows = tableL.getRows().length; |
|
| 2973 |
- updateTotCnt(totRows); //전체 데이터 갯수 구하기 |
|
| 2974 |
- var smsTxtArea = $('#smsTxtArea').val();
|
|
| 2975 |
- if(smsTxtArea.indexOf("[*이름*]") > -1
|
|
| 2976 |
- || smsTxtArea.indexOf("[*1*]") > -1
|
|
| 2977 |
- || smsTxtArea.indexOf("[*2*]") > -1
|
|
| 2978 |
- || smsTxtArea.indexOf("[*3*]") > -1
|
|
| 2979 |
- || smsTxtArea.indexOf("[*4*]") > -1){
|
|
| 2980 |
- |
|
| 2981 |
- fnReplCell(); |
|
| 2982 |
- }else{
|
|
| 2983 |
- //결제 금액 구하기 |
|
| 2984 |
- totalPriceSum(totRows); |
|
| 2985 |
- } |
|
| 2986 |
- |
|
| 2987 |
- $(".closeAddr").trigger("click");
|
|
| 2988 |
- //주소록 레이어 팝업의 Tabulator 데이터 지워주기 |
|
| 2989 |
- tableAddr.clearData(); |
|
| 2990 |
- |
|
| 2991 | 2949 |
} |
| 2950 |
+ |
|
| 2951 |
+ // 데이터 변환 로직 |
|
| 2952 |
+ const addrData = selectedData.map(row => {
|
|
| 2953 |
+ const rowData = type === 'select' ? row.getData() : row; // 'select'는 행 객체에서 데이터 추출 |
|
| 2954 |
+ return {
|
|
| 2955 |
+ name: rowData.name, |
|
| 2956 |
+ phone: removeDash(rowData.phone), |
|
| 2957 |
+ rep1: rowData.rep1, |
|
| 2958 |
+ rep2: rowData.rep2, |
|
| 2959 |
+ rep3: rowData.rep3, |
|
| 2960 |
+ rep4: rowData.rep4 |
|
| 2961 |
+ }; |
|
| 2962 |
+ }); |
|
| 2963 |
+ |
|
| 2964 |
+ |
|
| 2965 |
+ // 기존 tableL의 데이터를 가져옵니다. |
|
| 2966 |
+ var existingData = tableL.getData(); |
|
| 2967 |
+ // 기존 데이터와 새로운 데이터를 합칩니다. |
|
| 2968 |
+ var combinedData = existingData.concat(addrData); |
|
| 2969 |
+ |
|
| 2970 |
+ // @ phone을 기준으로 중복 제거 및 갯수 계산 |
|
| 2971 |
+ const result = removeDuplicatesAndCount(combinedData, 'phone'); |
|
| 2972 |
+ |
|
| 2973 |
+ |
|
| 2974 |
+ |
|
| 2975 |
+ // 총 30만건이 넘으면 false |
|
| 2976 |
+ if (!validateRowLimit(result.uniqueCount)) {
|
|
| 2977 |
+ return false; |
|
| 2978 |
+ } |
|
| 2979 |
+ |
|
| 2980 |
+ |
|
| 2981 |
+ // 합쳐진 데이터를 tableL에 설정합니다. |
|
| 2982 |
+ tableL.setData(result.uniqueArray); |
|
| 2983 |
+ // 중복데이터 건수 입력 |
|
| 2984 |
+ setRowDupCnt(result.duplicateArray.length); |
|
| 2985 |
+ |
|
| 2986 |
+ |
|
| 2987 |
+ // 미리보기 버튼 활성화 |
|
| 2988 |
+ updateButtons(0); |
|
| 2989 |
+ |
|
| 2990 |
+ var totRows = tableL.getRows().length; |
|
| 2991 |
+ updateTotCnt(totRows); //전체 데이터 갯수 구하기 |
|
| 2992 |
+ totalPriceSum(totRows); |
|
| 2993 |
+ |
|
| 2994 |
+ |
|
| 2995 |
+ $(".closeAddr").trigger("click");
|
|
| 2996 |
+ //주소록 레이어 팝업의 Tabulator 데이터 지워주기 |
|
| 2997 |
+ tableAddr.clearData(); |
|
| 2998 |
+ |
|
| 2992 | 2999 |
|
| 2993 | 3000 |
} |
| 2994 | 3001 |
|
... | ... | @@ -3427,7 +3434,6 @@ |
| 3427 | 3434 |
|
| 3428 | 3435 |
}); |
| 3429 | 3436 |
} |
| 3430 |
- |
|
| 3431 | 3437 |
|
| 3432 | 3438 |
</script> |
| 3433 | 3439 |
|
--- src/main/webapp/WEB-INF/jsp/web/msgdata/addr/MsgAddrGroupListAjax.jsp
+++ src/main/webapp/WEB-INF/jsp/web/msgdata/addr/MsgAddrGroupListAjax.jsp
... | ... | @@ -95,9 +95,10 @@ |
| 95 | 95 |
|
| 96 | 96 |
<div class="adr_pop_list"> |
| 97 | 97 |
<div class="adr_cb_wrap2"> |
| 98 |
- <p onClick="javascript:fnSelectAddrList('all','',this); return false;">
|
|
| 99 |
- <img src="/publish/images/content/close_folder2.png" alt="폴더 닫힘">전체[<span id="addrTotCnt"><fmt:formatNumber value="${addrTotalCount}" pattern="#,###"/></span>명]
|
|
| 100 |
- </p> |
|
| 98 |
+<!-- <p onClick="javascript:fnSelectAddrList('all','',this); return false;"> -->
|
|
| 99 |
+<%-- <img src="/publish/images/content/close_folder2.png" alt="폴더 닫힘">전체[<span id="addrTotCnt"><fmt:formatNumber value="${addrTotalCount}" pattern="#,###"/></span>명] --%>
|
|
| 100 |
+ 전체[<span id="addrTotCnt"><fmt:formatNumber value="${addrTotalCount}" pattern="#,###"/></span>명]
|
|
| 101 |
+<!-- </p> --> |
|
| 101 | 102 |
</div> |
| 102 | 103 |
|
| 103 | 104 |
<div class="adr_cb_wrap2"> |
--- src/main/webapp/WEB-INF/jsp/web/msgdata/include/msgDataIncludeExcel.jsp
+++ src/main/webapp/WEB-INF/jsp/web/msgdata/include/msgDataIncludeExcel.jsp
... | ... | @@ -320,7 +320,6 @@ |
| 320 | 320 |
*/ |
| 321 | 321 |
const result = removeDuplicatesAndCount(combinedData, 'phone'); |
| 322 | 322 |
|
| 323 |
- console.table('result : ', result);
|
|
| 324 | 323 |
|
| 325 | 324 |
// 총 30만건이 넘으면 false |
| 326 | 325 |
if (!validateRowLimit(result.uniqueCount)) {
|
--- src/main/webapp/js/MJUtill.js
+++ src/main/webapp/js/MJUtill.js
... | ... | @@ -131,10 +131,13 @@ |
| 131 | 131 |
/** |
| 132 | 132 |
* 휴대폰번호 대시('-') 제거
|
| 133 | 133 |
*/ |
| 134 |
+/** |
|
| 135 |
+ * 휴대폰번호에서 숫자가 아닌 문자를 모두 제거 |
|
| 136 |
+ */ |
|
| 134 | 137 |
function removeDash(str) {
|
| 135 |
- var regExp = new RegExp('-', 'g');
|
|
| 136 |
- return str.replace(regExp, ''); |
|
| 138 |
+ return str.replace(/\D/g, ''); // 숫자 이외의 문자 제거 |
|
| 137 | 139 |
} |
| 140 |
+ |
|
| 138 | 141 |
|
| 139 | 142 |
/** |
| 140 | 143 |
* 휴대폰번호 대시('-') 추가
|
... | ... | @@ -1012,16 +1015,6 @@ |
| 1012 | 1015 |
}; |
| 1013 | 1016 |
} |
| 1014 | 1017 |
|
| 1015 |
-/* |
|
| 1016 |
-function validateRowLimit(currentRows, newRows, limit = 300000) {
|
|
| 1017 |
- const totalRows = currentRows + newRows; |
|
| 1018 |
- console.log('validateRowLimit totalRows : ', totalRows);
|
|
| 1019 |
- if (totalRows > limit) {
|
|
| 1020 |
- alert('안정적인 서비스 운영을 위해서 최대 '+limit+'건 이내로 분할 발송해 주시기 바랍니다.');
|
|
| 1021 |
- return false; |
|
| 1022 |
- } |
|
| 1023 |
- return true; |
|
| 1024 |
-}*/ |
|
| 1025 | 1018 |
|
| 1026 | 1019 |
function validateRowLimit(totalRows, limit = 300000) {
|
| 1027 | 1020 |
// 값과 타입 확인 |
... | ... | @@ -1045,6 +1038,55 @@ |
| 1045 | 1038 |
return true; |
| 1046 | 1039 |
} |
| 1047 | 1040 |
|
| 1041 |
+ |
|
| 1042 |
+// 전화번호 리스트 처리 |
|
| 1043 |
+function processPhoneNumbers(phoneList) {
|
|
| 1044 |
+ return phoneList |
|
| 1045 |
+ .map(number => {
|
|
| 1046 |
+ const cleanPhone = removeDash(number.trim()); |
|
| 1047 |
+ if (!isValidPhoneNumber(cleanPhone)) return null; |
|
| 1048 |
+ return {
|
|
| 1049 |
+ name: "", |
|
| 1050 |
+ phone: cleanPhone, |
|
| 1051 |
+ rep1: "", |
|
| 1052 |
+ rep2: "", |
|
| 1053 |
+ rep3: "", |
|
| 1054 |
+ rep4: "", |
|
| 1055 |
+ }; |
|
| 1056 |
+ }) |
|
| 1057 |
+ .filter(data => data !== null); |
|
| 1058 |
+} |
|
| 1059 |
+ |
|
| 1060 |
+ |
|
| 1061 |
+// 데이터 병합 및 중복 제거 |
|
| 1062 |
+function mergeAndValidateData(existingData, newData, uniqueKey = 'phone') {
|
|
| 1063 |
+ const combinedData = existingData.concat(newData); |
|
| 1064 |
+ const result = removeDuplicatesAndCount(combinedData, uniqueKey); |
|
| 1065 |
+ |
|
| 1066 |
+ if (!validateRowLimit(result.uniqueCount)) {
|
|
| 1067 |
+ return null; |
|
| 1068 |
+ } |
|
| 1069 |
+ |
|
| 1070 |
+ return result; |
|
| 1071 |
+} |
|
| 1072 |
+ |
|
| 1073 |
+// 테이블 데이터 업데이트 |
|
| 1074 |
+function updateTableData(table, result) {
|
|
| 1075 |
+ if (!result) return false; |
|
| 1076 |
+ |
|
| 1077 |
+ table.setData(result.uniqueArray); |
|
| 1078 |
+ setRowDupCnt(result.duplicateArray.length); |
|
| 1079 |
+ updateButtons(0); |
|
| 1080 |
+ const totRows = table.getRows().length; |
|
| 1081 |
+ updateTotCnt(totRows); |
|
| 1082 |
+ totalPriceSum(totRows); |
|
| 1083 |
+ return true; |
|
| 1084 |
+} |
|
| 1085 |
+ |
|
| 1086 |
+/** |
|
| 1087 |
+ * @Discript : 문자발송 화면에 중복 카운트 입력 |
|
| 1088 |
+ * |
|
| 1089 |
+ */ |
|
| 1048 | 1090 |
function setRowDupCnt(cnt){
|
| 1049 | 1091 |
$('#rowDupCnt').text(cnt)
|
| 1050 | 1092 |
} |
--- src/main/webapp/js/web/addr/cmn.js
+++ src/main/webapp/js/web/addr/cmn.js
... | ... | @@ -3,7 +3,7 @@ |
| 3 | 3 |
// 유효한 번호인지 확인하는 함수 |
| 4 | 4 |
function isValidPhoneNumber(phone) {
|
| 5 | 5 |
// 숫자만 추출 |
| 6 |
- const numberOnly = phone.replace(/\D/g, ''); |
|
| 6 |
+ numberOnly = phone.replace(/\D/g, ''); // 숫자 이외의 문자 제거 |
|
| 7 | 7 |
// console.log('numberOnly : ' ,numberOnly);
|
| 8 | 8 |
|
| 9 | 9 |
// 유효한 형식 체크 |
Add a comment
Delete comment
Once you delete this comment, you won't be able to recover it. Are you sure you want to delete this comment?