XSS 변경관련 기능 추가
@4478e4880b4c0d934aeda6e320690afd6d60986b
--- src/main/webapp/js/MJUtill.js
+++ src/main/webapp/js/MJUtill.js
... | ... | @@ -1,1095 +1,1109 @@ |
| 1 |
-/** |
|
| 2 |
- * 휴대폰번호 유효성 체크 |
|
| 3 |
- * true, false 반환 |
|
| 4 |
- * 대시 유무 상관없음 |
|
| 5 |
- */ |
|
| 6 |
-function checkHpNum(str) {
|
|
| 7 |
- |
|
| 8 |
- var regExp = /^(050[2345678]{1}|01[016789]{1})-?[0-9]{3,4}-?[0-9]{4}$/;
|
|
| 9 |
- //var regExp = /^(01[016789]{1}|070|02|0[3-9]{1}[0-9]{1})-?[0-9]{3,4}-?[0-9]{4}$/; //지역번호(일반전화) 형식까지 체크해주는 정규식
|
|
| 10 |
- return regExp.test(str); |
|
| 11 |
-} |
|
| 12 |
- |
|
| 13 |
-/** |
|
| 14 |
- * 휴대폰번호만 유효성 체크 |
|
| 15 |
- * true, false 반환 |
|
| 16 |
- * 대시 유무 상관없음 |
|
| 17 |
- */ |
|
| 18 |
-function checkOnlyHpNum(str) {
|
|
| 19 |
- |
|
| 20 |
- //var regExp = /^(050[234567]{1}|01[016789]{1})-?[0-9]{3,4}-?[0-9]{4}$/;
|
|
| 21 |
- var regExp = /^(01[016789]{1})-?[0-9]{3,4}-?[0-9]{4}$/; //지역번호(일반전화) 형식까지 체크해주는 정규식
|
|
| 22 |
- return regExp.test(str); |
|
| 23 |
-} |
|
| 24 |
- |
|
| 25 |
-/** |
|
| 26 |
- * 팩스 번호 유효성 체크 |
|
| 27 |
- * true, false 반환 |
|
| 28 |
- * 앞 3자리를 체크 함 |
|
| 29 |
- * -- 전국 지역번호 |
|
| 30 |
- * 02 서울특별시 |
|
| 31 |
- 031 경기도 |
|
| 32 |
- 032 인천광역시 |
|
| 33 |
- 033 강원도 |
|
| 34 |
- 041 충청남도 |
|
| 35 |
- 042 대전광역시 |
|
| 36 |
- 043 충청북도 |
|
| 37 |
- 044 세종특별자치시 |
|
| 38 |
- 051 부산광역시 |
|
| 39 |
- 052 울산광역시 |
|
| 40 |
- 053 대구광역시 |
|
| 41 |
- 054 경상북도 |
|
| 42 |
- 055 경상남도 |
|
| 43 |
- 061 전라남도 |
|
| 44 |
- 062 광주광역시 |
|
| 45 |
- 063 전라북도 |
|
| 46 |
- 064 제주특별자치도 |
|
| 47 |
- |
|
| 48 |
- -- 타사부가번호 |
|
| 49 |
- 030* |
|
| 50 |
- 050* |
|
| 51 |
- 060 |
|
| 52 |
- 070 |
|
| 53 |
- 080 |
|
| 54 |
- 1** |
|
| 55 |
- |
|
| 56 |
- 위 번호로 시작하는 팩스 번호만 허용함. |
|
| 57 |
- */ |
|
| 58 |
- function checkFaxNum(str) {
|
|
| 59 |
- str = removeDash(str); |
|
| 60 |
- var subNum = str.substring(0,3); |
|
| 61 |
- var regExp = /^(02\d|03[1-3]|04[1-4]|05[1-5]|06[1-4]|030|050|060|070|080|1\d{2})$/; // 수정된 정규식
|
|
| 62 |
- return regExp.test(subNum); |
|
| 63 |
- } |
|
| 64 |
- |
|
| 65 |
-/* |
|
| 66 |
- * 일반전화 유효성 체크 |
|
| 67 |
- * true, false 반환 |
|
| 68 |
- * |
|
| 69 |
- * */ |
|
| 70 |
-function checkNorPhoneNum(str){
|
|
| 71 |
- |
|
| 72 |
- var regExp = /^(02|0[3-9]{1}[0-9]{1})-?[0-9]{3,4}-?[0-9]{4}$/;
|
|
| 73 |
- |
|
| 74 |
- /** |
|
| 75 |
- * 기간통신사업자 공통 부가서비스 번호 체크 |
|
| 76 |
- * 번호 사업자 |
|
| 77 |
- 1588,1577,1899 KT |
|
| 78 |
- 1544,1644,1661,1800 ,1833 LG유플러스 |
|
| 79 |
- 1566,1600,1670 SK브로드밴드 |
|
| 80 |
- 1688,1666 온세텔레콤 |
|
| 81 |
- 1599 SK텔링크 |
|
| 82 |
- 1877 한국케이블텔레콤 |
|
| 83 |
- 1855 CJ헬로비전 |
|
| 84 |
- 1661 alleh KT |
|
| 85 |
- * |
|
| 86 |
- * */ |
|
| 87 |
- |
|
| 88 |
- if(str.substring(0,2) == "15"){
|
|
| 89 |
- |
|
| 90 |
- regExp = /^(15[0-9]{2})-?[0-9]{4}$/;
|
|
| 91 |
- |
|
| 92 |
- }else if(str.substring(0,2) == "16"){
|
|
| 93 |
- |
|
| 94 |
- regExp = /^(16[0-9]{2})-?[0-9]{4}$/;
|
|
| 95 |
- |
|
| 96 |
- }else if(str.substring(0,2) == "18"){
|
|
| 97 |
- |
|
| 98 |
- regExp = /^(18[0-9]{2})-?[0-9]{4}$/;
|
|
| 99 |
- |
|
| 100 |
- } |
|
| 101 |
- |
|
| 102 |
- return regExp.test(str); |
|
| 103 |
-} |
|
| 104 |
- |
|
| 105 |
-/* |
|
| 106 |
- * 일반전화 / 핸드폰 번호 종류 확인 |
|
| 107 |
- * true, false 반환 |
|
| 108 |
- * |
|
| 109 |
- * */ |
|
| 110 |
-function checkTelHpType(str){
|
|
| 111 |
- |
|
| 112 |
- var subCall = str.substring(0,3); // 전화번호 앞 3자리 받아오기 |
|
| 113 |
- var strType = ""; // 결과 반환 |
|
| 114 |
- |
|
| 115 |
- if(subCall != '010' |
|
| 116 |
- && subCall != '011' |
|
| 117 |
- && subCall != '016' |
|
| 118 |
- && subCall != '017'){//일반전화 번호이면
|
|
| 119 |
- |
|
| 120 |
- strType = "Tel"; |
|
| 121 |
- |
|
| 122 |
- }else{
|
|
| 123 |
- |
|
| 124 |
- strType = "Hp"; |
|
| 125 |
- } |
|
| 126 |
- |
|
| 127 |
- return strType; |
|
| 128 |
-} |
|
| 129 |
- |
|
| 130 |
- |
|
| 131 |
-/** |
|
| 132 |
- * 휴대폰번호 대시('-') 제거
|
|
| 133 |
- */ |
|
| 134 |
-/** |
|
| 135 |
- * 휴대폰번호에서 숫자가 아닌 문자를 모두 제거 |
|
| 136 |
- */ |
|
| 137 |
-function removeDash(str) {
|
|
| 138 |
- return str.replace(/\D/g, ''); // 숫자 이외의 문자 제거 |
|
| 139 |
-} |
|
| 140 |
- |
|
| 141 |
- |
|
| 142 |
-/** |
|
| 143 |
- * 휴대폰번호 대시('-') 추가
|
|
| 144 |
- * 대시 유무 상관없음 |
|
| 145 |
- * 유효성 맞지 않을시 변환안됨. |
|
| 146 |
- */ |
|
| 147 |
-function addDash(str) {
|
|
| 148 |
- return str.replace(/(^01[016789]{1}|070)([0-9]{3}|[0-9]{4})([0-9]{4})$/,"$1-$2-$3").replace("--", "-");
|
|
| 149 |
-} |
|
| 150 |
- |
|
| 151 |
-/** |
|
| 152 |
- * ReplaceAll (by javascript prototype) |
|
| 153 |
- * 정규식 패턴에서 \는 두 개 사용 |
|
| 154 |
- */ |
|
| 155 |
-String.prototype.replaceAll = function(pattern, changeString) {
|
|
| 156 |
- var regExp = new RegExp(pattern, 'g'); |
|
| 157 |
- return this.replace(regExp, changeString); |
|
| 158 |
-}; |
|
| 159 |
- |
|
| 160 |
-/** |
|
| 161 |
- * 이메일 유효성 체크 |
|
| 162 |
- * true, false 반환 |
|
| 163 |
- * |
|
| 164 |
- */ |
|
| 165 |
-function checkEmail(str) {
|
|
| 166 |
- var regExp = /^[A-Za-z0-9_\.\-]+@[A-Za-z0-9\-]+\.[A-Za-z0-9\-]+/; |
|
| 167 |
- return regExp.test(str); |
|
| 168 |
-} |
|
| 169 |
- |
|
| 170 |
-/** |
|
| 171 |
- * XSS 체크하기 |
|
| 172 |
- * |
|
| 173 |
- * |
|
| 174 |
- */ |
|
| 175 |
- |
|
| 176 |
-function XSSCheck(str, level) {
|
|
| 177 |
- if (level == undefined || level == 0) {
|
|
| 178 |
- str = str.replace(/\<|\>|\"|\'|\%|\;|\(|\)|\&|\+|\-/g,""); |
|
| 179 |
- } else if (level != undefined && level == 1) {
|
|
| 180 |
- str = str.replace(/\</g, "<"); |
|
| 181 |
- str = str.replace(/\>/g, ">"); |
|
| 182 |
- } |
|
| 183 |
- return str; |
|
| 184 |
-} |
|
| 185 |
- |
|
| 186 |
- |
|
| 187 |
-//숫자 천단위 콤마 찍어주기 |
|
| 188 |
-function numberWithCommas(x) {
|
|
| 189 |
- return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
|
|
| 190 |
-} |
|
| 191 |
- |
|
| 192 |
-function comma(num){
|
|
| 193 |
- var len, point, str; |
|
| 194 |
- num = num + ""; |
|
| 195 |
- point = num.length % 3; |
|
| 196 |
- len = num.length; |
|
| 197 |
- str = num.substring(0, point); |
|
| 198 |
- while (point < len) {
|
|
| 199 |
- if (str != "") str += ","; |
|
| 200 |
- str += num.substring(point, point + 3); |
|
| 201 |
- point += 3; |
|
| 202 |
- } |
|
| 203 |
- return str; |
|
| 204 |
-} |
|
| 205 |
- |
|
| 206 |
- |
|
| 207 |
-function totalPriceSum(totRows){
|
|
| 208 |
- |
|
| 209 |
- var contents = $('#smsTxtArea').val(); //입력 문자 내용
|
|
| 210 |
- var msgType = conTypeCheck(contents); //입력 문자 길이 체크 |
|
| 211 |
- var collNumCnt = parseInt(totRows); //받는사람 건수 |
|
| 212 |
- var price = 0; //개별 건수 금액 |
|
| 213 |
- var totalPrice = 0; //전체 금액 |
|
| 214 |
- //var strDot = []; |
|
| 215 |
- //var subPrice = ""; |
|
| 216 |
- //var spPrice = ""; |
|
| 217 |
- var totalStr = "0"; //전체 합계 금액 |
|
| 218 |
- var userMoney = $('#hdUserMoney').text(); //헤더 영역 보유 금액 불러오기
|
|
| 219 |
- var msgCnt = 0; //발송 가능 문자 건수 |
|
| 220 |
- var imgCnt = $("#imgCnt").val(); // 현재 페이지에 첨부된 이미지 갯수
|
|
| 221 |
- |
|
| 222 |
- if(!userMoney > 0){
|
|
| 223 |
- |
|
| 224 |
- userMoney = 0; |
|
| 225 |
- |
|
| 226 |
- } |
|
| 227 |
- //헤더 영역 보유 금액 콤마 문자 제거 |
|
| 228 |
- if(userMoney != ''){
|
|
| 229 |
- |
|
| 230 |
- userMoney = userMoney.replaceAll("," , "");
|
|
| 231 |
- |
|
| 232 |
- } |
|
| 233 |
- |
|
| 234 |
- /*if(msgType == "P"){//그림문자
|
|
| 235 |
- |
|
| 236 |
- //그림 이미지 갯수에 따른 금액 계산 |
|
| 237 |
- if(imgCnt > 2){//그림 3장일경우
|
|
| 238 |
- price = parseFloat($('#p3Price').val());
|
|
| 239 |
- }else if(imgCnt > 1){//그림 2장일경우
|
|
| 240 |
- price = parseFloat($('#p2Price').val());
|
|
| 241 |
- }else{//그림 1장일 경우
|
|
| 242 |
- price = parseFloat($('#pPrice').val());
|
|
| 243 |
- } |
|
| 244 |
- |
|
| 245 |
- msgCnt = parseFloat(userMoney) / price; |
|
| 246 |
- |
|
| 247 |
- }else if(msgType == "M"){//장문 문자
|
|
| 248 |
- |
|
| 249 |
- price = parseFloat($('#mPrice').val());
|
|
| 250 |
- msgCnt = parseFloat(userMoney) / price; |
|
| 251 |
- |
|
| 252 |
- }else{//단문문자
|
|
| 253 |
- |
|
| 254 |
- price = parseFloat($('#sPrice').val());
|
|
| 255 |
- msgCnt = parseFloat(userMoney) / price; |
|
| 256 |
- |
|
| 257 |
- }*/ |
|
| 258 |
- |
|
| 259 |
- //금액 소수점 제거 하여 적용 20220623 소수점 버림 처리 |
|
| 260 |
- if(msgType == "P"){//그림문자
|
|
| 261 |
- |
|
| 262 |
- //그림 이미지 갯수에 따른 금액 계산 |
|
| 263 |
- if(imgCnt > 2){//그림 3장일경우
|
|
| 264 |
- price = $('#p3Price').val();
|
|
| 265 |
- }else if(imgCnt > 1){//그림 2장일경우
|
|
| 266 |
- price = $('#p2Price').val();
|
|
| 267 |
- }else{//그림 1장일 경우
|
|
| 268 |
- price = $('#pPrice').val();
|
|
| 269 |
- } |
|
| 270 |
- |
|
| 271 |
- msgCnt = userMoney / price; |
|
| 272 |
- |
|
| 273 |
- }else if(msgType == "M"){//장문 문자
|
|
| 274 |
- |
|
| 275 |
- price = $('#mPrice').val();
|
|
| 276 |
- msgCnt = userMoney / price; |
|
| 277 |
- |
|
| 278 |
- }else{//단문문자
|
|
| 279 |
- |
|
| 280 |
- price = $('#sPrice').val();
|
|
| 281 |
- msgCnt = userMoney / price; |
|
| 282 |
- |
|
| 283 |
- } |
|
| 284 |
- |
|
| 285 |
- totalPrice = price * collNumCnt; |
|
| 286 |
- |
|
| 287 |
- // 소수점 첫째자리 까지 표시 |
|
| 288 |
- totalPrice = totalPrice.toFixed(1); |
|
| 289 |
- |
|
| 290 |
- if(totalPrice > 0){
|
|
| 291 |
- |
|
| 292 |
- //totalStr = totalPrice.toFixed(2); |
|
| 293 |
- totalStr = totalPrice; |
|
| 294 |
- |
|
| 295 |
- } |
|
| 296 |
- |
|
| 297 |
- //개별 문자 단가 파라미터에 입력 |
|
| 298 |
- $('#eachPrice').val(numberWithCommas(price));
|
|
| 299 |
- |
|
| 300 |
- |
|
| 301 |
- //결제금액 합계 파라이터에 입력 |
|
| 302 |
- $('#totPrice').val(numberWithCommas(totalStr));
|
|
| 303 |
- |
|
| 304 |
- //결제금액 합계 화면에 표시 |
|
| 305 |
- $('#totalPriceTxt').text(numberWithCommas(totalStr));
|
|
| 306 |
- |
|
| 307 |
- //현재 문자 전송 가능 갯수 표시 |
|
| 308 |
- $('.nowMsgCnt').text(numberWithCommas(msgCnt.toFixed()));
|
|
| 309 |
- |
|
| 310 |
- if(msgType == 'P'){
|
|
| 311 |
- |
|
| 312 |
- $('#nowMsgType').text("그림");
|
|
| 313 |
- |
|
| 314 |
- }else if(msgType == 'M'){
|
|
| 315 |
- |
|
| 316 |
- $('#nowMsgType').text("장문");
|
|
| 317 |
- |
|
| 318 |
- }else{
|
|
| 319 |
- |
|
| 320 |
- $('#nowMsgType').text("단문");
|
|
| 321 |
- |
|
| 322 |
- } |
|
| 323 |
- |
|
| 324 |
- $('#repPriceTxt').hide();
|
|
| 325 |
- |
|
| 326 |
- return totalStr; |
|
| 327 |
- |
|
| 328 |
-} |
|
| 329 |
- |
|
| 330 |
-function replTotalPriceSum(msg_short, msg_long, totRows){
|
|
| 331 |
- |
|
| 332 |
- var shortPrice = 0; //단문 개별 건수 금액 |
|
| 333 |
- var longPrice = 0; //장문 개별 건수 금액 |
|
| 334 |
- var imgPrice = 0; //그림문자 개별 건수 금액 |
|
| 335 |
- var totalPrice = 0; //전체 금액 |
|
| 336 |
- var totalStr = "0"; //전체 합계 금액 |
|
| 337 |
- var contents = $('#smsTxtArea').val(); //입력 문자 내용
|
|
| 338 |
- var msgType = conTypeCheck(contents); //입력 문자 길이 체크 |
|
| 339 |
- var userMoney = $('#hdUserMoney').text(); //헤더 영역 보유 금액 불러오기
|
|
| 340 |
- var msgCnt = 0; //발송 가능 문자 건수 |
|
| 341 |
- var imgCnt = $("#imgCnt").val(); // 현재 페이지에 첨부된 이미지 갯수
|
|
| 342 |
- var collNumCnt = parseInt(totRows); //받는사람 건수 |
|
| 343 |
- var totalCntTxt = ""; |
|
| 344 |
- |
|
| 345 |
- //금액 소수점 제거하여 금액 처리 |
|
| 346 |
- if(msgType == "P"){//그림문자
|
|
| 347 |
- |
|
| 348 |
- //그림 이미지 갯수에 따른 금액 계산 |
|
| 349 |
- if(imgCnt > 2){//그림 3장일경우
|
|
| 350 |
- imgPrice = $('#p3Price').val();
|
|
| 351 |
- }else if(imgCnt > 1){//그림 2장일경우
|
|
| 352 |
- imgPrice = $('#p2Price').val();
|
|
| 353 |
- |
|
| 354 |
- }else{//그림 1장일 경우
|
|
| 355 |
- imgPrice = $('#pPrice').val();
|
|
| 356 |
- } |
|
| 357 |
- |
|
| 358 |
- msgCnt = userMoney.replaceAll(",","") / imgPrice;
|
|
| 359 |
- |
|
| 360 |
- var imgTotPrice = imgPrice * collNumCnt; |
|
| 361 |
- imgTotPrice = Math.round(imgTotPrice * 100) / 100; //소수점 2자리 반올리 처리해주기 |
|
| 362 |
- |
|
| 363 |
- totalPrice = totalPrice + imgTotPrice; |
|
| 364 |
- |
|
| 365 |
- //input hidden 개별 문자 단가 파라미터에 입력 |
|
| 366 |
- $('#eachPrice').val(numberWithCommas(imgPrice));
|
|
| 367 |
- |
|
| 368 |
- //input hidden 결제금액 합계 파라이터에 입력 |
|
| 369 |
- $('#totPrice').val(numberWithCommas(totalStr));
|
|
| 370 |
- |
|
| 371 |
- //결제금액 합계 화면에 표시 |
|
| 372 |
- $('#totalPriceTxt').text(numberWithCommas(totalStr));
|
|
| 373 |
- |
|
| 374 |
- //현재 문자 전송 가능 갯수 표시 |
|
| 375 |
- $('.nowMsgCnt').text(numberWithCommas(msgCnt.toFixed()));
|
|
| 376 |
- |
|
| 377 |
- //변환문자 건수 내용 표기 |
|
| 378 |
- totalCntTxt = "그림 : <strong>" + numberWithCommas(totRows) + "</strong> 건";; |
|
| 379 |
- |
|
| 380 |
- }else{
|
|
| 381 |
- |
|
| 382 |
- if(msg_long > 0){//장문 문자
|
|
| 383 |
- |
|
| 384 |
- longPrice = $('#mPrice').val();
|
|
| 385 |
- var longTotPrice = longPrice * msg_long; |
|
| 386 |
- longTotPrice = Math.round(longTotPrice * 100) / 100; //소수점 2자리 반올리 처리해주기 |
|
| 387 |
- |
|
| 388 |
- totalPrice = totalPrice + longTotPrice; |
|
| 389 |
- |
|
| 390 |
- //input hidden 개별 문자 단가 파라미터에 입력 |
|
| 391 |
- $('#eachPrice').val(numberWithCommas(longPrice));
|
|
| 392 |
- |
|
| 393 |
- //변환문자 건수 내용 표기 |
|
| 394 |
- totalCntTxt = "장문 : <strong>" + numberWithCommas(msg_long) + "</strong> 건"; |
|
| 395 |
- |
|
| 396 |
- //변환장문 건수 Hidden 폼에 넣어주기 |
|
| 397 |
- $('#longMsgCnt').val(msg_long);
|
|
| 398 |
- |
|
| 399 |
- }else{
|
|
| 400 |
- |
|
| 401 |
- //변환장문 건수 Hidden 폼에 넣어주기 |
|
| 402 |
- $('#longMsgCnt').val(msg_long);
|
|
| 403 |
- |
|
| 404 |
- } |
|
| 405 |
- |
|
| 406 |
- if(msg_short > 0){//단문문자
|
|
| 407 |
- |
|
| 408 |
- shortPrice = $('#sPrice').val();
|
|
| 409 |
- var shortTotPrice = shortPrice * msg_short; |
|
| 410 |
- shortTotPrice = Math.round(shortTotPrice * 100) / 100; //소수점 2자리 반올리 처리해주기 |
|
| 411 |
- |
|
| 412 |
- totalPrice = totalPrice + shortTotPrice; |
|
| 413 |
- |
|
| 414 |
- //input hidden 개별 문자 단가 파라미터에 입력 |
|
| 415 |
- $('#eachPrice').val(numberWithCommas(shortPrice));
|
|
| 416 |
- |
|
| 417 |
- if(msg_long > 0){
|
|
| 418 |
- |
|
| 419 |
- //변환문자 건수 내용 표기 |
|
| 420 |
- totalCntTxt = totalCntTxt + "/ 단문 : <strong>" + numberWithCommas(msg_short) + "</strong> 건"; |
|
| 421 |
- |
|
| 422 |
- }else{
|
|
| 423 |
- |
|
| 424 |
- //변환문자 건수 내용 표기 |
|
| 425 |
- totalCntTxt = "단문 : <strong>" + numberWithCommas(msg_short) + "</strong> 건"; |
|
| 426 |
- |
|
| 427 |
- } |
|
| 428 |
- |
|
| 429 |
- //변환단문 건수 Hidden 폼에 넣어주기 |
|
| 430 |
- $('#shortMsgCnt').val(msg_short);
|
|
| 431 |
- |
|
| 432 |
- }else{
|
|
| 433 |
- |
|
| 434 |
- //변환단문 건수 Hidden 폼에 넣어주기 |
|
| 435 |
- $('#shortMsgCnt').val(msg_short);
|
|
| 436 |
- |
|
| 437 |
- } |
|
| 438 |
- |
|
| 439 |
- } |
|
| 440 |
- |
|
| 441 |
- |
|
| 442 |
- if(totalPrice > 0){
|
|
| 443 |
- |
|
| 444 |
- //totalStr = totalPrice.toFixed(2); |
|
| 445 |
- totalStr = totalPrice; |
|
| 446 |
- |
|
| 447 |
- } |
|
| 448 |
- |
|
| 449 |
- //input hidden 결제금액 합계 파라이터에 입력 |
|
| 450 |
- $('#totPrice').val(numberWithCommas(totalStr));
|
|
| 451 |
- |
|
| 452 |
- //결제금액 합계 화면에 표시 |
|
| 453 |
- $('#totalPriceTxt').text(numberWithCommas(totalStr));
|
|
| 454 |
- |
|
| 455 |
- //결제금액 합계 파라이터에 입력 |
|
| 456 |
- $('#totPrice').val(numberWithCommas(totalStr));
|
|
| 457 |
- |
|
| 458 |
- //특정문구 일괄 변환으로 인한 단/장문 건수 표시 |
|
| 459 |
- $('#repPriceTxt').show();
|
|
| 460 |
- $('#repPriceTxt').html("(" + totalCntTxt + ")");
|
|
| 461 |
- |
|
| 462 |
- if(msgType == 'P'){
|
|
| 463 |
- |
|
| 464 |
- $('#nowMsgType').text("그림");
|
|
| 465 |
- |
|
| 466 |
- }else if(msgType == 'M'){
|
|
| 467 |
- |
|
| 468 |
- $('#nowMsgType').text("장문");
|
|
| 469 |
- |
|
| 470 |
- }else{
|
|
| 471 |
- |
|
| 472 |
- $('#nowMsgType').text("단문");
|
|
| 473 |
- |
|
| 474 |
- } |
|
| 475 |
- |
|
| 476 |
- return totalStr; |
|
| 477 |
- |
|
| 478 |
-} |
|
| 479 |
- |
|
| 480 |
-//예약 날짜 체크 함수 |
|
| 481 |
-function getGday(date) { /* 현재와 이전 날자의 차이를 년-개월-일 형태로 가져오기 */
|
|
| 482 |
- var now = new Date().getTime(); // 현재 날짜를 시간으로 변환 |
|
| 483 |
- var d = new Date(date.substring(0, 10)).getTime(); // 이전 날짜를 시간으로 변환 |
|
| 484 |
- var gap = now - d; // 현재 날짜와 이전 날짜의 차이를 밀리초 시간으로 구한다. |
|
| 485 |
- var result = Math.floor(gap/(1000 * 60 * 60 * 24)); // 날짜 차이를 일수로 계산 |
|
| 486 |
- |
|
| 487 |
- var year = Math.floor(result / 365); // 현재 날짜 년 - 개월 - 일 수로 표현하기 |
|
| 488 |
- var month = Math.floor(result % 365 / 30); |
|
| 489 |
- var day = result % 365 % 30; |
|
| 490 |
- |
|
| 491 |
- return result; |
|
| 492 |
- |
|
| 493 |
- //각 년도, 월, 일을 따로 리턴하려면 아래를 사용하면 됨 |
|
| 494 |
- /* return {
|
|
| 495 |
- year: year, |
|
| 496 |
- month: month, |
|
| 497 |
- day: day |
|
| 498 |
- }; */ |
|
| 499 |
-} |
|
| 500 |
- |
|
| 501 |
-/* |
|
| 502 |
- * 예약 날짜 오류 체크 함수 |
|
| 503 |
- * 날짜, 시간, 분 파라미터 전달 |
|
| 504 |
- * 현재 날짜와 파라미터 시간의 분 간격 계산해주기 |
|
| 505 |
- * */ |
|
| 506 |
-function getGapDayTime(paramDate,paramHours,paramMin) { /* 현재와 이전 날자의 차이를 년-개월-일 형태로 가져오기 */
|
|
| 507 |
- |
|
| 508 |
- var now = new Date(); |
|
| 509 |
- |
|
| 510 |
- //현재시간 구분하기 |
|
| 511 |
- var year = now.getFullYear(); |
|
| 512 |
- var month = now.getMonth() + 1 ; |
|
| 513 |
- var day = now.getDate(); |
|
| 514 |
- var hours = now.getHours(); |
|
| 515 |
- var min = now.getMinutes(); |
|
| 516 |
- |
|
| 517 |
- //비교시간 |
|
| 518 |
- var stDt = paramDate.split("/");
|
|
| 519 |
- var stYear = stDt[0]; |
|
| 520 |
- var stMonth = stDt[1]; |
|
| 521 |
- var stDay = stDt[2]; |
|
| 522 |
- |
|
| 523 |
- var nowDate = new Date(year, month-1, day, hours, min); |
|
| 524 |
- var stDate = new Date(stYear, stMonth-1, stDay, paramHours, paramMin); |
|
| 525 |
- var elapsedMSec = stDate.getTime() - nowDate.getTime(); |
|
| 526 |
- var elapseMin = elapsedMSec / 1000 / 60; |
|
| 527 |
- |
|
| 528 |
- elapseMin = parseInt(elapseMin); |
|
| 529 |
- |
|
| 530 |
- return elapseMin; |
|
| 531 |
- |
|
| 532 |
- //각 년도, 월, 일을 따로 리턴하려면 아래를 사용하면 됨 |
|
| 533 |
- /* return {
|
|
| 534 |
- year: year, |
|
| 535 |
- month: month, |
|
| 536 |
- day: day |
|
| 537 |
- }; */ |
|
| 538 |
-} |
|
| 539 |
- |
|
| 540 |
-// 중복 주소 체크하기 |
|
| 541 |
-/*function dupliAddrData(data){
|
|
| 542 |
- |
|
| 543 |
- var chk = true; //중복값 유무 |
|
| 544 |
- var uniqData = []; // 중복값 삭제 후 데이터 저장 |
|
| 545 |
- var dupCnt = 0; |
|
| 546 |
- |
|
| 547 |
- //첨부 주소 정보에서 연락처가 중복되는 경우 하나만 남기고 나머지는 삭제 하고 보여줌 |
|
| 548 |
- $.each(data, function(i, item){
|
|
| 549 |
- |
|
| 550 |
- chk = true; //중복값 유무 |
|
| 551 |
- |
|
| 552 |
- $.each(uniqData, function(j, item2){
|
|
| 553 |
- |
|
| 554 |
- if(item.phone == item2.phone){
|
|
| 555 |
- |
|
| 556 |
- chk = false; |
|
| 557 |
- dupCnt = dupCnt + 1; |
|
| 558 |
- console.log("++++++++++++++ dupCnt ::: "+ dupCnt);
|
|
| 559 |
- |
|
| 560 |
- } |
|
| 561 |
- |
|
| 562 |
- }); |
|
| 563 |
- |
|
| 564 |
- if(chk){
|
|
| 565 |
- |
|
| 566 |
- uniqData.push(item); |
|
| 567 |
- |
|
| 568 |
- } |
|
| 569 |
- |
|
| 570 |
- }); |
|
| 571 |
- |
|
| 572 |
- $("#rowDupCnt").text(dupCnt);
|
|
| 573 |
- return uniqData; |
|
| 574 |
- |
|
| 575 |
-}*/ |
|
| 576 |
- |
|
| 577 |
-var dupliPhoneDataRealList = []; |
|
| 578 |
- |
|
| 579 |
-//중복 전화번호 체크하기 |
|
| 580 |
-function dupliPhoneData(data){
|
|
| 581 |
- // console.log('dupliPhoneData : ', data);
|
|
| 582 |
- |
|
| 583 |
- var chk = true; //중복값 유무 |
|
| 584 |
- var uniqData = []; // 중복값 삭제 후 데이터 저장 |
|
| 585 |
- var dupCnt = 0; |
|
| 586 |
- |
|
| 587 |
- //첨부 주소 정보에서 연락처가 중복되는 경우 하나만 남기고 나머지는 삭제 하고 보여줌 |
|
| 588 |
- $.each(data, function(i, item){
|
|
| 589 |
- |
|
| 590 |
- chk = true; //중복값 유무 |
|
| 591 |
- |
|
| 592 |
- $.each(uniqData, function(j, item2){
|
|
| 593 |
- if(item.phone.length > 0){
|
|
| 594 |
- if(item.phone == item2.phone){
|
|
| 595 |
- |
|
| 596 |
- chk = false; |
|
| 597 |
- dupCnt = dupCnt + 1; |
|
| 598 |
- |
|
| 599 |
- } |
|
| 600 |
- } |
|
| 601 |
- |
|
| 602 |
- }); |
|
| 603 |
- |
|
| 604 |
- if(chk){
|
|
| 605 |
- uniqData.push(item); |
|
| 606 |
- } |
|
| 607 |
- else {
|
|
| 608 |
- // Get 중복 연락처 |
|
| 609 |
- GetDupliPhoneDataReal(item.phone); |
|
| 610 |
- } |
|
| 611 |
- |
|
| 612 |
- }); |
|
| 613 |
- |
|
| 614 |
- //중복건수 텍스트 입력해 주기 |
|
| 615 |
- $("#rowDupCnt").text(dupCnt);
|
|
| 616 |
- |
|
| 617 |
- // 중복번호 버튼 노출 |
|
| 618 |
- if($("#btnAddrMassDupli").length > 0) {
|
|
| 619 |
- $("#btnAddrMassDupli").show();
|
|
| 620 |
- } |
|
| 621 |
- |
|
| 622 |
- // 중복번호(기존 주소록) 버튼 노출 |
|
| 623 |
- if($("#btnAddrMassSaveDupli").length > 0) {
|
|
| 624 |
- $("#btnAddrMassSaveDupli").hide();
|
|
| 625 |
- } |
|
| 626 |
- |
|
| 627 |
- return uniqData; |
|
| 628 |
-} |
|
| 629 |
- |
|
| 630 |
- |
|
| 631 |
-//연락처 중복검사 속도 개선 버전 |
|
| 632 |
-function getSpupDupliPhoneDataChk(data){
|
|
| 633 |
- |
|
| 634 |
- var dataLen = data.length; |
|
| 635 |
- const arrUnique = data.filter((character, idx, arr)=>{
|
|
| 636 |
- return arr.findIndex((item) => item.phone === character.phone) === idx |
|
| 637 |
- }); |
|
| 638 |
- |
|
| 639 |
- var uniqLen = arrUnique.length; |
|
| 640 |
- var dupCnt = dataLen - uniqLen; |
|
| 641 |
- //중복건수 텍스트 입력해 주기 |
|
| 642 |
- $("#rowDupCnt").text(dupCnt);
|
|
| 643 |
- |
|
| 644 |
- return arrUnique; |
|
| 645 |
-} |
|
| 646 |
- |
|
| 647 |
-// Get 중복 연락처 |
|
| 648 |
-function GetDupliPhoneDataReal(item) {
|
|
| 649 |
- var isDuplicate = false; |
|
| 650 |
- if (dupliPhoneDataRealList.length == 0) {
|
|
| 651 |
- dupliPhoneDataRealList.push(item); |
|
| 652 |
- } |
|
| 653 |
- else {
|
|
| 654 |
- for (var i = 0; i < dupliPhoneDataRealList.length; i++) {
|
|
| 655 |
- if (dupliPhoneDataRealList[i] == item) {
|
|
| 656 |
- isDuplicate = true; |
|
| 657 |
- } |
|
| 658 |
- } |
|
| 659 |
- |
|
| 660 |
- if (isDuplicate) {
|
|
| 661 |
- return; |
|
| 662 |
- } |
|
| 663 |
- else {
|
|
| 664 |
- dupliPhoneDataRealList.push(item); |
|
| 665 |
- } |
|
| 666 |
- } |
|
| 667 |
-} |
|
| 668 |
- |
|
| 669 |
-//중복 전화번호 체크하여 중복 갯수 리턴하기 |
|
| 670 |
-function dupliPhoneDataChk(data){
|
|
| 671 |
- |
|
| 672 |
- var chk = true; //중복값 유무 |
|
| 673 |
- var uniqData = []; // 중복값 삭제 후 데이터 저장 |
|
| 674 |
- var dupCnt = 0; |
|
| 675 |
- |
|
| 676 |
- //첨부 주소 정보에서 연락처가 중복되는 경우 하나만 남기고 나머지는 삭제 하고 보여줌 |
|
| 677 |
- $.each(data, function(i, item){
|
|
| 678 |
- |
|
| 679 |
- chk = true; //중복값 유무 |
|
| 680 |
- |
|
| 681 |
- $.each(uniqData, function(j, item2){
|
|
| 682 |
- |
|
| 683 |
- if(item.phone.length > 0){
|
|
| 684 |
- |
|
| 685 |
- if(item.phone == item2.phone){
|
|
| 686 |
- |
|
| 687 |
- chk = false; |
|
| 688 |
- dupCnt = dupCnt + 1; |
|
| 689 |
- |
|
| 690 |
- } |
|
| 691 |
- |
|
| 692 |
- } |
|
| 693 |
- |
|
| 694 |
- }); |
|
| 695 |
- |
|
| 696 |
- if(chk){
|
|
| 697 |
- |
|
| 698 |
- uniqData.push(item); |
|
| 699 |
- |
|
| 700 |
- } |
|
| 701 |
- |
|
| 702 |
- }); |
|
| 703 |
- |
|
| 704 |
- return dupCnt; |
|
| 705 |
- |
|
| 706 |
-} |
|
| 707 |
- |
|
| 708 |
-//특정 바이트수 만큼 문자열 잘라서 반환해주기 |
|
| 709 |
-function strUnderLineSubstring(str, maxLength){
|
|
| 710 |
- |
|
| 711 |
- for(b=i=0;c=str.charCodeAt(i);) {
|
|
| 712 |
- |
|
| 713 |
- b+=c>>7?2:1; |
|
| 714 |
- |
|
| 715 |
- if (b > maxLength) |
|
| 716 |
- |
|
| 717 |
- break; |
|
| 718 |
- |
|
| 719 |
- i++; |
|
| 720 |
- |
|
| 721 |
- } |
|
| 722 |
- |
|
| 723 |
- return str.substring(0,i); |
|
| 724 |
- |
|
| 725 |
-} |
|
| 726 |
- |
|
| 727 |
- |
|
| 728 |
-//특정 글자수 만큼 문자열 잘라서 반환해주기 |
|
| 729 |
-function strMaxLengthSubstring(str, maxLength){
|
|
| 730 |
- |
|
| 731 |
- for(b=i=0;c=str.charCodeAt(i);) {
|
|
| 732 |
- |
|
| 733 |
- if (i > maxLength) |
|
| 734 |
- |
|
| 735 |
- break; |
|
| 736 |
- |
|
| 737 |
- i++; |
|
| 738 |
- |
|
| 739 |
- } |
|
| 740 |
- |
|
| 741 |
- return str.substring(0,i); |
|
| 742 |
- |
|
| 743 |
-} |
|
| 744 |
- |
|
| 745 |
-//문자열 글자수 반환해주기(한글, 영문, 특수문자, 엔터와 상관없이 글자수로 체크함) |
|
| 746 |
-function strMaxCharacterCnt(str){
|
|
| 747 |
- |
|
| 748 |
- var totLen = 0; |
|
| 749 |
- for(b=i=0;c=str.charCodeAt(i);) {
|
|
| 750 |
- i++; |
|
| 751 |
- totLen = i; |
|
| 752 |
- } |
|
| 753 |
- return totLen; |
|
| 754 |
-} |
|
| 755 |
- |
|
| 756 |
-//문자입력 첫번째 글자가 한글, 숫자, 영문자가 아니면 경고 표시 |
|
| 757 |
-function strFirstCharCheck(str){
|
|
| 758 |
- |
|
| 759 |
- var pattern1 = /[0-9]/; |
|
| 760 |
- var pattern2 = /[a-zA-Z]/; |
|
| 761 |
- var pattern3 = /[ㄱ-ㅎ|ㅏ-ㅣ|가-힣]/; |
|
| 762 |
- |
|
| 763 |
- var spChar = 0; |
|
| 764 |
- for(var i=0; i<str.length; i++){
|
|
| 765 |
- |
|
| 766 |
- if (!pattern1.test(str.charAt(i)) && !pattern2.test(str.charAt(i)) && !pattern3.test(str.charAt(i))) {
|
|
| 767 |
- spChar++; |
|
| 768 |
- }else{
|
|
| 769 |
- break; |
|
| 770 |
- } |
|
| 771 |
- |
|
| 772 |
- } |
|
| 773 |
- |
|
| 774 |
- var repStr = str.substring(0,spChar); |
|
| 775 |
- return repStr; |
|
| 776 |
- |
|
| 777 |
-} |
|
| 778 |
- |
|
| 779 |
-function strChinJpnCheck(str){
|
|
| 780 |
- |
|
| 781 |
- var rtnStr = ""; |
|
| 782 |
- for(var i=0; i < str.length; i++){
|
|
| 783 |
- |
|
| 784 |
- var cont = str.charAt(i); |
|
| 785 |
- |
|
| 786 |
- if(str.charAt(i) >= '\u4E00' && str.charAt(i) <= '\u9FFF'){//한중일 공통한자일 경우
|
|
| 787 |
- |
|
| 788 |
- if(rtnStr.length == 0){
|
|
| 789 |
- rtnStr = cont; |
|
| 790 |
- }else{
|
|
| 791 |
- rtnStr = rtnStr + ", " + cont; |
|
| 792 |
- } |
|
| 793 |
- |
|
| 794 |
- }else if(str.charAt(i) >= '\u2E80' && str.charAt(i) <= '\u2EFF'){//한자부수
|
|
| 795 |
- |
|
| 796 |
- if(rtnStr.length == 0){
|
|
| 797 |
- rtnStr = cont; |
|
| 798 |
- }else{
|
|
| 799 |
- rtnStr = rtnStr + ", " + cont; |
|
| 800 |
- } |
|
| 801 |
- |
|
| 802 |
- }else if(str.charAt(i) >= '\u3400' && str.charAt(i) <= '\u4DB5'){//한자확장A
|
|
| 803 |
- |
|
| 804 |
- if(rtnStr.length == 0){
|
|
| 805 |
- rtnStr = cont; |
|
| 806 |
- }else{
|
|
| 807 |
- rtnStr = rtnStr + ", " + cont; |
|
| 808 |
- } |
|
| 809 |
- |
|
| 810 |
- } |
|
| 811 |
- |
|
| 812 |
- } |
|
| 813 |
- |
|
| 814 |
- return rtnStr; |
|
| 815 |
-} |
|
| 816 |
- |
|
| 817 |
-//받아온 str 에 이모지가 포함되어있는지 체크하여 갯수로 반환 |
|
| 818 |
-function kakaoTemplateEmojiCheck (str) {
|
|
| 819 |
- var regex = /[\u{1F004}-\u{1F9E6}]|[\u{1F600}-\u{1F9D0}]/gu;
|
|
| 820 |
- var usedEmoji = ""; |
|
| 821 |
- var returnFlag = true; |
|
| 822 |
- |
|
| 823 |
- var splitMsg = str.split(/.*?/u); |
|
| 824 |
- |
|
| 825 |
- for(var i=0; i < splitMsg.length; i++){
|
|
| 826 |
- if(splitMsg[i].match(regex)) {
|
|
| 827 |
- usedEmoji = usedEmoji + splitMsg[i]; |
|
| 828 |
- returnFlag = false; |
|
| 829 |
- } |
|
| 830 |
- } |
|
| 831 |
- if(!returnFlag) alert("알림톡 내용에 이모지는 사용할 수 없습니다.\n이모지 삭제후 등록해주세요.\n(" + usedEmoji + ")");
|
|
| 832 |
- |
|
| 833 |
- return returnFlag; |
|
| 834 |
-} |
|
| 835 |
- |
|
| 836 |
-//받아온 str 에 이모지가 포함되어있는지 체크하여 갯수로 반환 |
|
| 837 |
-function emojiCheck (str) {
|
|
| 838 |
- var regex = /[\u{1F004}-\u{1F9E6}]|[\u{1F600}-\u{1F9D0}]/gu;
|
|
| 839 |
- var usedEmoji = ""; |
|
| 840 |
- var returnFlag = true; |
|
| 841 |
- |
|
| 842 |
- var splitMsg = str.split(/.*?/u); |
|
| 843 |
- |
|
| 844 |
- for(var i=0; i < splitMsg.length; i++){
|
|
| 845 |
- if(splitMsg[i].match(regex)) {
|
|
| 846 |
- usedEmoji = usedEmoji + splitMsg[i]; |
|
| 847 |
- returnFlag = false; |
|
| 848 |
- } |
|
| 849 |
- } |
|
| 850 |
- if(!returnFlag) alert("문자 제목, 내용에 이모지는 사용할 수 없습니다.\n이모지 삭제후 발송해주세요.\n(" + usedEmoji + ")");
|
|
| 851 |
- |
|
| 852 |
- return returnFlag; |
|
| 853 |
-} |
|
| 854 |
- |
|
| 855 |
-function addrEmojiCheck (str) {
|
|
| 856 |
- var regex = /[\u{1F004}-\u{1F9E6}]|[\u{1F600}-\u{1F9D0}]/gu;
|
|
| 857 |
- var usedEmoji = ""; |
|
| 858 |
- var returnFlag = true; |
|
| 859 |
- |
|
| 860 |
- var splitMsg = str.split(/.*?/u); |
|
| 861 |
- |
|
| 862 |
- for(var i=0; i < splitMsg.length; i++){
|
|
| 863 |
- if(splitMsg[i].match(regex)) {
|
|
| 864 |
- usedEmoji = usedEmoji + splitMsg[i]; |
|
| 865 |
- returnFlag = false; |
|
| 866 |
- } |
|
| 867 |
- } |
|
| 868 |
- |
|
| 869 |
- if(!returnFlag) {
|
|
| 870 |
- //로딩창 hide |
|
| 871 |
- $('.loading_layer').removeClass('active');
|
|
| 872 |
- |
|
| 873 |
- alert("주소록 저장 목록 중 이모지를 사용할 수 없습니다.\n이모지 삭제후 발송해주세요.\n(" + usedEmoji + ")");
|
|
| 874 |
- } |
|
| 875 |
- |
|
| 876 |
- return returnFlag; |
|
| 877 |
-} |
|
| 878 |
- |
|
| 879 |
-// 제목이 치환 문구 체크 |
|
| 880 |
-function getSpacialStringChk(mmsSubject){
|
|
| 881 |
- |
|
| 882 |
- var returnStr = false; |
|
| 883 |
- |
|
| 884 |
- if(mmsSubject.indexOf("[*이름*]") > -1 || mmsSubject.indexOf("[*1*]") > -1 || mmsSubject.indexOf("[*2*]") > -1 || mmsSubject.indexOf("[*3*]") > -1 || mmsSubject.indexOf("[*4*]") > -1){
|
|
| 885 |
- returnStr = true; |
|
| 886 |
- } |
|
| 887 |
- |
|
| 888 |
- return returnStr; |
|
| 889 |
- |
|
| 890 |
-} |
|
| 891 |
- |
|
| 892 |
-//커서 위치에 삽입 |
|
| 893 |
-function setCursorInsertText(pTxtArea, pAddTxt) {
|
|
| 894 |
- var txtArea = document.getElementById(pTxtArea); |
|
| 895 |
- var txtValue = txtArea.value; |
|
| 896 |
- var selectPos = txtArea.selectionStart; // 커서 위치 지정 |
|
| 897 |
- var beforeTxt = txtValue.substring(0, selectPos); // 기존텍스트 ~ 커서시작점 까지의 문자 |
|
| 898 |
- var afterTxt = txtValue.substring(txtArea.selectionEnd, txtValue.length); // 커서끝지점 ~ 기존텍스트 까지의 문자 |
|
| 899 |
- var addTxt = pAddTxt; // 추가 입력 할 텍스트 |
|
| 900 |
- txtArea.value = beforeTxt + addTxt + afterTxt; |
|
| 901 |
- |
|
| 902 |
- selectPos = selectPos + addTxt.length; |
|
| 903 |
- txtArea.selectionStart = selectPos; // 커서 시작점을 추가 삽입된 텍스트 이후로 지정 |
|
| 904 |
- txtArea.selectionEnd = selectPos; // 커서 끝지점을 추가 삽입된 텍스트 이후로 지정 |
|
| 905 |
- txtArea.focus(); |
|
| 906 |
-} |
|
| 907 |
- |
|
| 908 |
-//받는사람 목록의 체크박스가 20개가 모두 체크 되었는지 확인 |
|
| 909 |
-function fnCallToChkAllCnt(){
|
|
| 910 |
- |
|
| 911 |
- var chkCnt = 0; |
|
| 912 |
- var totChkCnt = $("input:checkbox[name='chkCallTo']").length;
|
|
| 913 |
- var btnAllVal = $("#checkAll").val();
|
|
| 914 |
- |
|
| 915 |
- //체크박스 체크된 갯수 구하기 |
|
| 916 |
- $("input:checkbox[name='chkCallTo']").each(function () {
|
|
| 917 |
- if($(this).is(':checked')){
|
|
| 918 |
- chkCnt++; |
|
| 919 |
- }; |
|
| 920 |
- }); |
|
| 921 |
- |
|
| 922 |
- //전체선택 체크 여부 값 변경해 주기 |
|
| 923 |
- //현재 체크된 체크박스 갯수와 전체 체크박스 갯수 비교하기 |
|
| 924 |
- if(totChkCnt > 0 && totChkCnt == chkCnt){
|
|
| 925 |
- |
|
| 926 |
- if(btnAllVal == 'N'){
|
|
| 927 |
- $("#checkAll").val("Y");
|
|
| 928 |
- $("#checkAll").text("선택해제");
|
|
| 929 |
- }else{
|
|
| 930 |
- $("#checkAll").val("N");
|
|
| 931 |
- $("#checkAll").text("전체선택");
|
|
| 932 |
- } |
|
| 933 |
- |
|
| 934 |
- }else{
|
|
| 935 |
- |
|
| 936 |
- $("#checkAll").val("N");
|
|
| 937 |
- $("#checkAll").text("전체선택");
|
|
| 938 |
- |
|
| 939 |
- } |
|
| 940 |
- |
|
| 941 |
-} |
|
| 942 |
- |
|
| 943 |
-//선거문자 20건 수신자 목록 추가된 건수 및 발송 금액 변경해주기 |
|
| 944 |
-function fnChkCallToChange(){
|
|
| 945 |
- |
|
| 946 |
- var callToCnt = 0; |
|
| 947 |
- $("input[name=chkCallTo]").each(function(){
|
|
| 948 |
- |
|
| 949 |
- var chkSts = $(this).is(':checked');
|
|
| 950 |
- if(chkSts){
|
|
| 951 |
- callToCnt++; |
|
| 952 |
- } |
|
| 953 |
- }); |
|
| 954 |
- |
|
| 955 |
- //체크박스가 모두 체크 되어있는지 확인 하기 |
|
| 956 |
- fnCallToChkAllCnt(); |
|
| 957 |
- |
|
| 958 |
- updateTotCnt(callToCnt); //전체 데이터 갯수 구하기 |
|
| 959 |
- totalPriceSum(callToCnt); |
|
| 960 |
- |
|
| 961 |
-} |
|
| 962 |
- |
|
| 963 |
-//Tabulator 주소록 그룹 목록일 경우 각 그룹 주소 갯수 합산해주기 |
|
| 964 |
-function getTabulatorLAddrGrpCnt(){
|
|
| 965 |
- |
|
| 966 |
- var selectedData = tableL.getRows(); |
|
| 967 |
- var totAddrCnt = 0; |
|
| 968 |
- for(var i=0; i < selectedData.length; i++){
|
|
| 969 |
- |
|
| 970 |
- //일괄변환 문자에 콤마(,)가 들어가있으면 배열로 넘길때 문제가 발생하여 특수문자(§)로 치환하여 넘겨주도록 한다. |
|
| 971 |
- var addrGrpCnt = tableL.getRows()[i].getData().addrGrpCnt; |
|
| 972 |
- |
|
| 973 |
- totAddrCnt = Number(totAddrCnt) + Number(addrGrpCnt); |
|
| 974 |
- |
|
| 975 |
- } |
|
| 976 |
- |
|
| 977 |
- return totAddrCnt; |
|
| 1 |
+/** |
|
| 2 |
+ * 휴대폰번호 유효성 체크 |
|
| 3 |
+ * true, false 반환 |
|
| 4 |
+ * 대시 유무 상관없음 |
|
| 5 |
+ */ |
|
| 6 |
+function checkHpNum(str) {
|
|
| 7 |
+ |
|
| 8 |
+ var regExp = /^(050[2345678]{1}|01[016789]{1})-?[0-9]{3,4}-?[0-9]{4}$/;
|
|
| 9 |
+ //var regExp = /^(01[016789]{1}|070|02|0[3-9]{1}[0-9]{1})-?[0-9]{3,4}-?[0-9]{4}$/; //지역번호(일반전화) 형식까지 체크해주는 정규식
|
|
| 10 |
+ return regExp.test(str); |
|
| 11 |
+} |
|
| 978 | 12 |
|
| 979 |
-} |
|
| 980 |
- |
|
| 981 |
-/** |
|
| 982 |
-* @ phone을 기준으로 중복 제거 및 갯수 계산 |
|
| 983 |
-* @ 결과 반환 |
|
| 984 |
-* return {
|
|
| 985 |
-* uniqueArray, // 중복 제거된 배열 |
|
| 986 |
-* uniqueCount, // 중복 제거된 데이터 개수 |
|
| 987 |
-* duplicateArray // 중복된 데이터 배열 |
|
| 988 |
-* duplicateCount: duplicateArray.length // 중복된 데이터 개수 |
|
| 989 |
-* }; |
|
| 990 |
-*/ |
|
| 991 |
-function removeDuplicatesAndCount(array, key) {
|
|
| 992 |
- // 중복 체크를 위한 Map 사용 |
|
| 993 |
- const seen = new Map(); |
|
| 994 |
- const uniqueArray = []; |
|
| 995 |
- const duplicateArray = []; |
|
| 996 |
- |
|
| 997 |
- array.forEach(item => {
|
|
| 998 |
- const value = item[key]; |
|
| 999 |
- if (seen.has(value)) {
|
|
| 1000 |
- // 중복된 데이터는 중복 배열에 추가 |
|
| 1001 |
- duplicateArray.push(item); |
|
| 1002 |
- } else {
|
|
| 1003 |
- // 처음 본 데이터는 고유 배열에 추가하고 Map에 기록 |
|
| 1004 |
- uniqueArray.push(item); |
|
| 1005 |
- seen.set(value, true); |
|
| 1006 |
- } |
|
| 1007 |
- }); |
|
| 1008 |
- |
|
| 1009 |
- // 결과 반환 |
|
| 1010 |
- return {
|
|
| 1011 |
- uniqueArray, // 중복 제거된 배열 |
|
| 1012 |
- uniqueCount: uniqueArray.length, // 중복 제거된 데이터 개수 |
|
| 1013 |
- duplicateArray, // 중복된 데이터 배열 |
|
| 1014 |
- duplicateCount: duplicateArray.length // 중복된 데이터 개수 |
|
| 1015 |
- }; |
|
| 1016 |
-} |
|
| 1017 |
- |
|
| 1018 |
- |
|
| 1019 |
-function validateRowLimit(totalRows, limit = 300000) {
|
|
| 1020 |
- // 값과 타입 확인 |
|
| 1021 |
- |
|
| 1022 |
- // 숫자 변환 |
|
| 1023 |
- const totalRowsNum = Number(totalRows); |
|
| 1024 |
- const limitNum = Number(limit); |
|
| 1025 |
- console.log('totalRowsNum : ', totalRowsNum);
|
|
| 1026 |
- console.log('limitNum : ', limitNum);
|
|
| 1027 |
- |
|
| 1028 |
- // 변환 후 값 확인 |
|
| 1029 |
- |
|
| 1030 |
- // 비교 연산 결과 확인 |
|
| 1031 |
- const isOverLimit = totalRowsNum > limitNum; |
|
| 1032 |
- |
|
| 1033 |
- // 조건 처리 |
|
| 1034 |
- if (isOverLimit) {
|
|
| 1035 |
- alert('안정적인 서비스 운영을 위해서 최대 ' + limit + '건 이내로 분할 발송해 주시기 바랍니다.');
|
|
| 1036 |
- return false; |
|
| 1037 |
- } |
|
| 1038 |
- return true; |
|
| 1039 |
-} |
|
| 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 |
- */ |
|
| 1090 |
-function setRowDupCnt(cnt){
|
|
| 1091 |
- $('#rowDupCnt').text(cnt)
|
|
| 1092 |
-} |
|
| 1093 |
- |
|
| 1094 |
- |
|
| 1095 |
- |
|
| 13 |
+/** |
|
| 14 |
+ * 휴대폰번호만 유효성 체크 |
|
| 15 |
+ * true, false 반환 |
|
| 16 |
+ * 대시 유무 상관없음 |
|
| 17 |
+ */ |
|
| 18 |
+function checkOnlyHpNum(str) {
|
|
| 19 |
+ |
|
| 20 |
+ //var regExp = /^(050[234567]{1}|01[016789]{1})-?[0-9]{3,4}-?[0-9]{4}$/;
|
|
| 21 |
+ var regExp = /^(01[016789]{1})-?[0-9]{3,4}-?[0-9]{4}$/; //지역번호(일반전화) 형식까지 체크해주는 정규식
|
|
| 22 |
+ return regExp.test(str); |
|
| 23 |
+} |
|
| 24 |
+ |
|
| 25 |
+/** |
|
| 26 |
+ * 팩스 번호 유효성 체크 |
|
| 27 |
+ * true, false 반환 |
|
| 28 |
+ * 앞 3자리를 체크 함 |
|
| 29 |
+ * -- 전국 지역번호 |
|
| 30 |
+ * 02 서울특별시 |
|
| 31 |
+ 031 경기도 |
|
| 32 |
+ 032 인천광역시 |
|
| 33 |
+ 033 강원도 |
|
| 34 |
+ 041 충청남도 |
|
| 35 |
+ 042 대전광역시 |
|
| 36 |
+ 043 충청북도 |
|
| 37 |
+ 044 세종특별자치시 |
|
| 38 |
+ 051 부산광역시 |
|
| 39 |
+ 052 울산광역시 |
|
| 40 |
+ 053 대구광역시 |
|
| 41 |
+ 054 경상북도 |
|
| 42 |
+ 055 경상남도 |
|
| 43 |
+ 061 전라남도 |
|
| 44 |
+ 062 광주광역시 |
|
| 45 |
+ 063 전라북도 |
|
| 46 |
+ 064 제주특별자치도 |
|
| 47 |
+ |
|
| 48 |
+ -- 타사부가번호 |
|
| 49 |
+ 030* |
|
| 50 |
+ 050* |
|
| 51 |
+ 060 |
|
| 52 |
+ 070 |
|
| 53 |
+ 080 |
|
| 54 |
+ 1** |
|
| 55 |
+ |
|
| 56 |
+ 위 번호로 시작하는 팩스 번호만 허용함. |
|
| 57 |
+ */ |
|
| 58 |
+ function checkFaxNum(str) {
|
|
| 59 |
+ str = removeDash(str); |
|
| 60 |
+ var subNum = str.substring(0,3); |
|
| 61 |
+ var regExp = /^(02\d|03[1-3]|04[1-4]|05[1-5]|06[1-4]|030|050|060|070|080|1\d{2})$/; // 수정된 정규식
|
|
| 62 |
+ return regExp.test(subNum); |
|
| 63 |
+ } |
|
| 64 |
+ |
|
| 65 |
+/* |
|
| 66 |
+ * 일반전화 유효성 체크 |
|
| 67 |
+ * true, false 반환 |
|
| 68 |
+ * |
|
| 69 |
+ * */ |
|
| 70 |
+function checkNorPhoneNum(str){
|
|
| 71 |
+ |
|
| 72 |
+ var regExp = /^(02|0[3-9]{1}[0-9]{1})-?[0-9]{3,4}-?[0-9]{4}$/;
|
|
| 73 |
+ |
|
| 74 |
+ /** |
|
| 75 |
+ * 기간통신사업자 공통 부가서비스 번호 체크 |
|
| 76 |
+ * 번호 사업자 |
|
| 77 |
+ 1588,1577,1899 KT |
|
| 78 |
+ 1544,1644,1661,1800 ,1833 LG유플러스 |
|
| 79 |
+ 1566,1600,1670 SK브로드밴드 |
|
| 80 |
+ 1688,1666 온세텔레콤 |
|
| 81 |
+ 1599 SK텔링크 |
|
| 82 |
+ 1877 한국케이블텔레콤 |
|
| 83 |
+ 1855 CJ헬로비전 |
|
| 84 |
+ 1661 alleh KT |
|
| 85 |
+ * |
|
| 86 |
+ * */ |
|
| 87 |
+ |
|
| 88 |
+ if(str.substring(0,2) == "15"){
|
|
| 89 |
+ |
|
| 90 |
+ regExp = /^(15[0-9]{2})-?[0-9]{4}$/;
|
|
| 91 |
+ |
|
| 92 |
+ }else if(str.substring(0,2) == "16"){
|
|
| 93 |
+ |
|
| 94 |
+ regExp = /^(16[0-9]{2})-?[0-9]{4}$/;
|
|
| 95 |
+ |
|
| 96 |
+ }else if(str.substring(0,2) == "18"){
|
|
| 97 |
+ |
|
| 98 |
+ regExp = /^(18[0-9]{2})-?[0-9]{4}$/;
|
|
| 99 |
+ |
|
| 100 |
+ } |
|
| 101 |
+ |
|
| 102 |
+ return regExp.test(str); |
|
| 103 |
+} |
|
| 104 |
+ |
|
| 105 |
+/* |
|
| 106 |
+ * 일반전화 / 핸드폰 번호 종류 확인 |
|
| 107 |
+ * true, false 반환 |
|
| 108 |
+ * |
|
| 109 |
+ * */ |
|
| 110 |
+function checkTelHpType(str){
|
|
| 111 |
+ |
|
| 112 |
+ var subCall = str.substring(0,3); // 전화번호 앞 3자리 받아오기 |
|
| 113 |
+ var strType = ""; // 결과 반환 |
|
| 114 |
+ |
|
| 115 |
+ if(subCall != '010' |
|
| 116 |
+ && subCall != '011' |
|
| 117 |
+ && subCall != '016' |
|
| 118 |
+ && subCall != '017'){//일반전화 번호이면
|
|
| 119 |
+ |
|
| 120 |
+ strType = "Tel"; |
|
| 121 |
+ |
|
| 122 |
+ }else{
|
|
| 123 |
+ |
|
| 124 |
+ strType = "Hp"; |
|
| 125 |
+ } |
|
| 126 |
+ |
|
| 127 |
+ return strType; |
|
| 128 |
+} |
|
| 129 |
+ |
|
| 130 |
+ |
|
| 131 |
+/** |
|
| 132 |
+ * 휴대폰번호 대시('-') 제거
|
|
| 133 |
+ */ |
|
| 134 |
+/** |
|
| 135 |
+ * 휴대폰번호에서 숫자가 아닌 문자를 모두 제거 |
|
| 136 |
+ */ |
|
| 137 |
+function removeDash(str) {
|
|
| 138 |
+ return str.replace(/\D/g, ''); // 숫자 이외의 문자 제거 |
|
| 139 |
+} |
|
| 140 |
+ |
|
| 141 |
+ |
|
| 142 |
+/** |
|
| 143 |
+ * 휴대폰번호 대시('-') 추가
|
|
| 144 |
+ * 대시 유무 상관없음 |
|
| 145 |
+ * 유효성 맞지 않을시 변환안됨. |
|
| 146 |
+ */ |
|
| 147 |
+function addDash(str) {
|
|
| 148 |
+ return str.replace(/(^01[016789]{1}|070)([0-9]{3}|[0-9]{4})([0-9]{4})$/,"$1-$2-$3").replace("--", "-");
|
|
| 149 |
+} |
|
| 150 |
+ |
|
| 151 |
+/** |
|
| 152 |
+ * ReplaceAll (by javascript prototype) |
|
| 153 |
+ * 정규식 패턴에서 \는 두 개 사용 |
|
| 154 |
+ */ |
|
| 155 |
+String.prototype.replaceAll = function(pattern, changeString) {
|
|
| 156 |
+ var regExp = new RegExp(pattern, 'g'); |
|
| 157 |
+ return this.replace(regExp, changeString); |
|
| 158 |
+}; |
|
| 159 |
+ |
|
| 160 |
+/** |
|
| 161 |
+ * 이메일 유효성 체크 |
|
| 162 |
+ * true, false 반환 |
|
| 163 |
+ * |
|
| 164 |
+ */ |
|
| 165 |
+function checkEmail(str) {
|
|
| 166 |
+ var regExp = /^[A-Za-z0-9_\.\-]+@[A-Za-z0-9\-]+\.[A-Za-z0-9\-]+/; |
|
| 167 |
+ return regExp.test(str); |
|
| 168 |
+} |
|
| 169 |
+ |
|
| 170 |
+/** |
|
| 171 |
+ * XSS 체크하기 |
|
| 172 |
+ * |
|
| 173 |
+ * |
|
| 174 |
+ */ |
|
| 175 |
+ |
|
| 176 |
+function XSSCheck(str, level) {
|
|
| 177 |
+ if (level == undefined || level == 0) {
|
|
| 178 |
+ str = str.replace(/\<|\>|\"|\'|\%|\;|\(|\)|\&|\+|\-/g,""); |
|
| 179 |
+ } else if (level != undefined && level == 1) {
|
|
| 180 |
+ str = str.replace(/\</g, "<"); |
|
| 181 |
+ str = str.replace(/\>/g, ">"); |
|
| 182 |
+ } |
|
| 183 |
+ return str; |
|
| 184 |
+} |
|
| 185 |
+ |
|
| 186 |
+/** |
|
| 187 |
+ * XSS 변경하기 |
|
| 188 |
+ * |
|
| 189 |
+ * |
|
| 190 |
+ */ |
|
| 191 |
+function XSSChange(str) {
|
|
| 192 |
+ |
|
| 193 |
+ str = str.replaceAll(/(<br>|<br\/>|<br \/>)/g, '\r\n'); |
|
| 194 |
+ str = str.replaceAll("<", '<');
|
|
| 195 |
+ str = str.replaceAll(">", '>');
|
|
| 196 |
+ str = str.replaceAll("&", '&');
|
|
| 197 |
+ |
|
| 198 |
+ return str; |
|
| 199 |
+} |
|
| 200 |
+ |
|
| 201 |
+//숫자 천단위 콤마 찍어주기 |
|
| 202 |
+function numberWithCommas(x) {
|
|
| 203 |
+ return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
|
|
| 204 |
+} |
|
| 205 |
+ |
|
| 206 |
+function comma(num){
|
|
| 207 |
+ var len, point, str; |
|
| 208 |
+ num = num + ""; |
|
| 209 |
+ point = num.length % 3; |
|
| 210 |
+ len = num.length; |
|
| 211 |
+ str = num.substring(0, point); |
|
| 212 |
+ while (point < len) {
|
|
| 213 |
+ if (str != "") str += ","; |
|
| 214 |
+ str += num.substring(point, point + 3); |
|
| 215 |
+ point += 3; |
|
| 216 |
+ } |
|
| 217 |
+ return str; |
|
| 218 |
+} |
|
| 219 |
+ |
|
| 220 |
+ |
|
| 221 |
+function totalPriceSum(totRows){
|
|
| 222 |
+ |
|
| 223 |
+ var contents = $('#smsTxtArea').val(); //입력 문자 내용
|
|
| 224 |
+ var msgType = conTypeCheck(contents); //입력 문자 길이 체크 |
|
| 225 |
+ var collNumCnt = parseInt(totRows); //받는사람 건수 |
|
| 226 |
+ var price = 0; //개별 건수 금액 |
|
| 227 |
+ var totalPrice = 0; //전체 금액 |
|
| 228 |
+ //var strDot = []; |
|
| 229 |
+ //var subPrice = ""; |
|
| 230 |
+ //var spPrice = ""; |
|
| 231 |
+ var totalStr = "0"; //전체 합계 금액 |
|
| 232 |
+ var userMoney = $('#hdUserMoney').text(); //헤더 영역 보유 금액 불러오기
|
|
| 233 |
+ var msgCnt = 0; //발송 가능 문자 건수 |
|
| 234 |
+ var imgCnt = $("#imgCnt").val(); // 현재 페이지에 첨부된 이미지 갯수
|
|
| 235 |
+ |
|
| 236 |
+ if(!userMoney > 0){
|
|
| 237 |
+ |
|
| 238 |
+ userMoney = 0; |
|
| 239 |
+ |
|
| 240 |
+ } |
|
| 241 |
+ //헤더 영역 보유 금액 콤마 문자 제거 |
|
| 242 |
+ if(userMoney != ''){
|
|
| 243 |
+ |
|
| 244 |
+ userMoney = userMoney.replaceAll("," , "");
|
|
| 245 |
+ |
|
| 246 |
+ } |
|
| 247 |
+ |
|
| 248 |
+ /*if(msgType == "P"){//그림문자
|
|
| 249 |
+ |
|
| 250 |
+ //그림 이미지 갯수에 따른 금액 계산 |
|
| 251 |
+ if(imgCnt > 2){//그림 3장일경우
|
|
| 252 |
+ price = parseFloat($('#p3Price').val());
|
|
| 253 |
+ }else if(imgCnt > 1){//그림 2장일경우
|
|
| 254 |
+ price = parseFloat($('#p2Price').val());
|
|
| 255 |
+ }else{//그림 1장일 경우
|
|
| 256 |
+ price = parseFloat($('#pPrice').val());
|
|
| 257 |
+ } |
|
| 258 |
+ |
|
| 259 |
+ msgCnt = parseFloat(userMoney) / price; |
|
| 260 |
+ |
|
| 261 |
+ }else if(msgType == "M"){//장문 문자
|
|
| 262 |
+ |
|
| 263 |
+ price = parseFloat($('#mPrice').val());
|
|
| 264 |
+ msgCnt = parseFloat(userMoney) / price; |
|
| 265 |
+ |
|
| 266 |
+ }else{//단문문자
|
|
| 267 |
+ |
|
| 268 |
+ price = parseFloat($('#sPrice').val());
|
|
| 269 |
+ msgCnt = parseFloat(userMoney) / price; |
|
| 270 |
+ |
|
| 271 |
+ }*/ |
|
| 272 |
+ |
|
| 273 |
+ //금액 소수점 제거 하여 적용 20220623 소수점 버림 처리 |
|
| 274 |
+ if(msgType == "P"){//그림문자
|
|
| 275 |
+ |
|
| 276 |
+ //그림 이미지 갯수에 따른 금액 계산 |
|
| 277 |
+ if(imgCnt > 2){//그림 3장일경우
|
|
| 278 |
+ price = $('#p3Price').val();
|
|
| 279 |
+ }else if(imgCnt > 1){//그림 2장일경우
|
|
| 280 |
+ price = $('#p2Price').val();
|
|
| 281 |
+ }else{//그림 1장일 경우
|
|
| 282 |
+ price = $('#pPrice').val();
|
|
| 283 |
+ } |
|
| 284 |
+ |
|
| 285 |
+ msgCnt = userMoney / price; |
|
| 286 |
+ |
|
| 287 |
+ }else if(msgType == "M"){//장문 문자
|
|
| 288 |
+ |
|
| 289 |
+ price = $('#mPrice').val();
|
|
| 290 |
+ msgCnt = userMoney / price; |
|
| 291 |
+ |
|
| 292 |
+ }else{//단문문자
|
|
| 293 |
+ |
|
| 294 |
+ price = $('#sPrice').val();
|
|
| 295 |
+ msgCnt = userMoney / price; |
|
| 296 |
+ |
|
| 297 |
+ } |
|
| 298 |
+ |
|
| 299 |
+ totalPrice = price * collNumCnt; |
|
| 300 |
+ |
|
| 301 |
+ // 소수점 첫째자리 까지 표시 |
|
| 302 |
+ totalPrice = totalPrice.toFixed(1); |
|
| 303 |
+ |
|
| 304 |
+ if(totalPrice > 0){
|
|
| 305 |
+ |
|
| 306 |
+ //totalStr = totalPrice.toFixed(2); |
|
| 307 |
+ totalStr = totalPrice; |
|
| 308 |
+ |
|
| 309 |
+ } |
|
| 310 |
+ |
|
| 311 |
+ //개별 문자 단가 파라미터에 입력 |
|
| 312 |
+ $('#eachPrice').val(numberWithCommas(price));
|
|
| 313 |
+ |
|
| 314 |
+ |
|
| 315 |
+ //결제금액 합계 파라이터에 입력 |
|
| 316 |
+ $('#totPrice').val(numberWithCommas(totalStr));
|
|
| 317 |
+ |
|
| 318 |
+ //결제금액 합계 화면에 표시 |
|
| 319 |
+ $('#totalPriceTxt').text(numberWithCommas(totalStr));
|
|
| 320 |
+ |
|
| 321 |
+ //현재 문자 전송 가능 갯수 표시 |
|
| 322 |
+ $('.nowMsgCnt').text(numberWithCommas(msgCnt.toFixed()));
|
|
| 323 |
+ |
|
| 324 |
+ if(msgType == 'P'){
|
|
| 325 |
+ |
|
| 326 |
+ $('#nowMsgType').text("그림");
|
|
| 327 |
+ |
|
| 328 |
+ }else if(msgType == 'M'){
|
|
| 329 |
+ |
|
| 330 |
+ $('#nowMsgType').text("장문");
|
|
| 331 |
+ |
|
| 332 |
+ }else{
|
|
| 333 |
+ |
|
| 334 |
+ $('#nowMsgType').text("단문");
|
|
| 335 |
+ |
|
| 336 |
+ } |
|
| 337 |
+ |
|
| 338 |
+ $('#repPriceTxt').hide();
|
|
| 339 |
+ |
|
| 340 |
+ return totalStr; |
|
| 341 |
+ |
|
| 342 |
+} |
|
| 343 |
+ |
|
| 344 |
+function replTotalPriceSum(msg_short, msg_long, totRows){
|
|
| 345 |
+ |
|
| 346 |
+ var shortPrice = 0; //단문 개별 건수 금액 |
|
| 347 |
+ var longPrice = 0; //장문 개별 건수 금액 |
|
| 348 |
+ var imgPrice = 0; //그림문자 개별 건수 금액 |
|
| 349 |
+ var totalPrice = 0; //전체 금액 |
|
| 350 |
+ var totalStr = "0"; //전체 합계 금액 |
|
| 351 |
+ var contents = $('#smsTxtArea').val(); //입력 문자 내용
|
|
| 352 |
+ var msgType = conTypeCheck(contents); //입력 문자 길이 체크 |
|
| 353 |
+ var userMoney = $('#hdUserMoney').text(); //헤더 영역 보유 금액 불러오기
|
|
| 354 |
+ var msgCnt = 0; //발송 가능 문자 건수 |
|
| 355 |
+ var imgCnt = $("#imgCnt").val(); // 현재 페이지에 첨부된 이미지 갯수
|
|
| 356 |
+ var collNumCnt = parseInt(totRows); //받는사람 건수 |
|
| 357 |
+ var totalCntTxt = ""; |
|
| 358 |
+ |
|
| 359 |
+ //금액 소수점 제거하여 금액 처리 |
|
| 360 |
+ if(msgType == "P"){//그림문자
|
|
| 361 |
+ |
|
| 362 |
+ //그림 이미지 갯수에 따른 금액 계산 |
|
| 363 |
+ if(imgCnt > 2){//그림 3장일경우
|
|
| 364 |
+ imgPrice = $('#p3Price').val();
|
|
| 365 |
+ }else if(imgCnt > 1){//그림 2장일경우
|
|
| 366 |
+ imgPrice = $('#p2Price').val();
|
|
| 367 |
+ |
|
| 368 |
+ }else{//그림 1장일 경우
|
|
| 369 |
+ imgPrice = $('#pPrice').val();
|
|
| 370 |
+ } |
|
| 371 |
+ |
|
| 372 |
+ msgCnt = userMoney.replaceAll(",","") / imgPrice;
|
|
| 373 |
+ |
|
| 374 |
+ var imgTotPrice = imgPrice * collNumCnt; |
|
| 375 |
+ imgTotPrice = Math.round(imgTotPrice * 100) / 100; //소수점 2자리 반올리 처리해주기 |
|
| 376 |
+ |
|
| 377 |
+ totalPrice = totalPrice + imgTotPrice; |
|
| 378 |
+ |
|
| 379 |
+ //input hidden 개별 문자 단가 파라미터에 입력 |
|
| 380 |
+ $('#eachPrice').val(numberWithCommas(imgPrice));
|
|
| 381 |
+ |
|
| 382 |
+ //input hidden 결제금액 합계 파라이터에 입력 |
|
| 383 |
+ $('#totPrice').val(numberWithCommas(totalStr));
|
|
| 384 |
+ |
|
| 385 |
+ //결제금액 합계 화면에 표시 |
|
| 386 |
+ $('#totalPriceTxt').text(numberWithCommas(totalStr));
|
|
| 387 |
+ |
|
| 388 |
+ //현재 문자 전송 가능 갯수 표시 |
|
| 389 |
+ $('.nowMsgCnt').text(numberWithCommas(msgCnt.toFixed()));
|
|
| 390 |
+ |
|
| 391 |
+ //변환문자 건수 내용 표기 |
|
| 392 |
+ totalCntTxt = "그림 : <strong>" + numberWithCommas(totRows) + "</strong> 건";; |
|
| 393 |
+ |
|
| 394 |
+ }else{
|
|
| 395 |
+ |
|
| 396 |
+ if(msg_long > 0){//장문 문자
|
|
| 397 |
+ |
|
| 398 |
+ longPrice = $('#mPrice').val();
|
|
| 399 |
+ var longTotPrice = longPrice * msg_long; |
|
| 400 |
+ longTotPrice = Math.round(longTotPrice * 100) / 100; //소수점 2자리 반올리 처리해주기 |
|
| 401 |
+ |
|
| 402 |
+ totalPrice = totalPrice + longTotPrice; |
|
| 403 |
+ |
|
| 404 |
+ //input hidden 개별 문자 단가 파라미터에 입력 |
|
| 405 |
+ $('#eachPrice').val(numberWithCommas(longPrice));
|
|
| 406 |
+ |
|
| 407 |
+ //변환문자 건수 내용 표기 |
|
| 408 |
+ totalCntTxt = "장문 : <strong>" + numberWithCommas(msg_long) + "</strong> 건"; |
|
| 409 |
+ |
|
| 410 |
+ //변환장문 건수 Hidden 폼에 넣어주기 |
|
| 411 |
+ $('#longMsgCnt').val(msg_long);
|
|
| 412 |
+ |
|
| 413 |
+ }else{
|
|
| 414 |
+ |
|
| 415 |
+ //변환장문 건수 Hidden 폼에 넣어주기 |
|
| 416 |
+ $('#longMsgCnt').val(msg_long);
|
|
| 417 |
+ |
|
| 418 |
+ } |
|
| 419 |
+ |
|
| 420 |
+ if(msg_short > 0){//단문문자
|
|
| 421 |
+ |
|
| 422 |
+ shortPrice = $('#sPrice').val();
|
|
| 423 |
+ var shortTotPrice = shortPrice * msg_short; |
|
| 424 |
+ shortTotPrice = Math.round(shortTotPrice * 100) / 100; //소수점 2자리 반올리 처리해주기 |
|
| 425 |
+ |
|
| 426 |
+ totalPrice = totalPrice + shortTotPrice; |
|
| 427 |
+ |
|
| 428 |
+ //input hidden 개별 문자 단가 파라미터에 입력 |
|
| 429 |
+ $('#eachPrice').val(numberWithCommas(shortPrice));
|
|
| 430 |
+ |
|
| 431 |
+ if(msg_long > 0){
|
|
| 432 |
+ |
|
| 433 |
+ //변환문자 건수 내용 표기 |
|
| 434 |
+ totalCntTxt = totalCntTxt + "/ 단문 : <strong>" + numberWithCommas(msg_short) + "</strong> 건"; |
|
| 435 |
+ |
|
| 436 |
+ }else{
|
|
| 437 |
+ |
|
| 438 |
+ //변환문자 건수 내용 표기 |
|
| 439 |
+ totalCntTxt = "단문 : <strong>" + numberWithCommas(msg_short) + "</strong> 건"; |
|
| 440 |
+ |
|
| 441 |
+ } |
|
| 442 |
+ |
|
| 443 |
+ //변환단문 건수 Hidden 폼에 넣어주기 |
|
| 444 |
+ $('#shortMsgCnt').val(msg_short);
|
|
| 445 |
+ |
|
| 446 |
+ }else{
|
|
| 447 |
+ |
|
| 448 |
+ //변환단문 건수 Hidden 폼에 넣어주기 |
|
| 449 |
+ $('#shortMsgCnt').val(msg_short);
|
|
| 450 |
+ |
|
| 451 |
+ } |
|
| 452 |
+ |
|
| 453 |
+ } |
|
| 454 |
+ |
|
| 455 |
+ |
|
| 456 |
+ if(totalPrice > 0){
|
|
| 457 |
+ |
|
| 458 |
+ //totalStr = totalPrice.toFixed(2); |
|
| 459 |
+ totalStr = totalPrice; |
|
| 460 |
+ |
|
| 461 |
+ } |
|
| 462 |
+ |
|
| 463 |
+ //input hidden 결제금액 합계 파라이터에 입력 |
|
| 464 |
+ $('#totPrice').val(numberWithCommas(totalStr));
|
|
| 465 |
+ |
|
| 466 |
+ //결제금액 합계 화면에 표시 |
|
| 467 |
+ $('#totalPriceTxt').text(numberWithCommas(totalStr));
|
|
| 468 |
+ |
|
| 469 |
+ //결제금액 합계 파라이터에 입력 |
|
| 470 |
+ $('#totPrice').val(numberWithCommas(totalStr));
|
|
| 471 |
+ |
|
| 472 |
+ //특정문구 일괄 변환으로 인한 단/장문 건수 표시 |
|
| 473 |
+ $('#repPriceTxt').show();
|
|
| 474 |
+ $('#repPriceTxt').html("(" + totalCntTxt + ")");
|
|
| 475 |
+ |
|
| 476 |
+ if(msgType == 'P'){
|
|
| 477 |
+ |
|
| 478 |
+ $('#nowMsgType').text("그림");
|
|
| 479 |
+ |
|
| 480 |
+ }else if(msgType == 'M'){
|
|
| 481 |
+ |
|
| 482 |
+ $('#nowMsgType').text("장문");
|
|
| 483 |
+ |
|
| 484 |
+ }else{
|
|
| 485 |
+ |
|
| 486 |
+ $('#nowMsgType').text("단문");
|
|
| 487 |
+ |
|
| 488 |
+ } |
|
| 489 |
+ |
|
| 490 |
+ return totalStr; |
|
| 491 |
+ |
|
| 492 |
+} |
|
| 493 |
+ |
|
| 494 |
+//예약 날짜 체크 함수 |
|
| 495 |
+function getGday(date) { /* 현재와 이전 날자의 차이를 년-개월-일 형태로 가져오기 */
|
|
| 496 |
+ var now = new Date().getTime(); // 현재 날짜를 시간으로 변환 |
|
| 497 |
+ var d = new Date(date.substring(0, 10)).getTime(); // 이전 날짜를 시간으로 변환 |
|
| 498 |
+ var gap = now - d; // 현재 날짜와 이전 날짜의 차이를 밀리초 시간으로 구한다. |
|
| 499 |
+ var result = Math.floor(gap/(1000 * 60 * 60 * 24)); // 날짜 차이를 일수로 계산 |
|
| 500 |
+ |
|
| 501 |
+ var year = Math.floor(result / 365); // 현재 날짜 년 - 개월 - 일 수로 표현하기 |
|
| 502 |
+ var month = Math.floor(result % 365 / 30); |
|
| 503 |
+ var day = result % 365 % 30; |
|
| 504 |
+ |
|
| 505 |
+ return result; |
|
| 506 |
+ |
|
| 507 |
+ //각 년도, 월, 일을 따로 리턴하려면 아래를 사용하면 됨 |
|
| 508 |
+ /* return {
|
|
| 509 |
+ year: year, |
|
| 510 |
+ month: month, |
|
| 511 |
+ day: day |
|
| 512 |
+ }; */ |
|
| 513 |
+} |
|
| 514 |
+ |
|
| 515 |
+/* |
|
| 516 |
+ * 예약 날짜 오류 체크 함수 |
|
| 517 |
+ * 날짜, 시간, 분 파라미터 전달 |
|
| 518 |
+ * 현재 날짜와 파라미터 시간의 분 간격 계산해주기 |
|
| 519 |
+ * */ |
|
| 520 |
+function getGapDayTime(paramDate,paramHours,paramMin) { /* 현재와 이전 날자의 차이를 년-개월-일 형태로 가져오기 */
|
|
| 521 |
+ |
|
| 522 |
+ var now = new Date(); |
|
| 523 |
+ |
|
| 524 |
+ //현재시간 구분하기 |
|
| 525 |
+ var year = now.getFullYear(); |
|
| 526 |
+ var month = now.getMonth() + 1 ; |
|
| 527 |
+ var day = now.getDate(); |
|
| 528 |
+ var hours = now.getHours(); |
|
| 529 |
+ var min = now.getMinutes(); |
|
| 530 |
+ |
|
| 531 |
+ //비교시간 |
|
| 532 |
+ var stDt = paramDate.split("/");
|
|
| 533 |
+ var stYear = stDt[0]; |
|
| 534 |
+ var stMonth = stDt[1]; |
|
| 535 |
+ var stDay = stDt[2]; |
|
| 536 |
+ |
|
| 537 |
+ var nowDate = new Date(year, month-1, day, hours, min); |
|
| 538 |
+ var stDate = new Date(stYear, stMonth-1, stDay, paramHours, paramMin); |
|
| 539 |
+ var elapsedMSec = stDate.getTime() - nowDate.getTime(); |
|
| 540 |
+ var elapseMin = elapsedMSec / 1000 / 60; |
|
| 541 |
+ |
|
| 542 |
+ elapseMin = parseInt(elapseMin); |
|
| 543 |
+ |
|
| 544 |
+ return elapseMin; |
|
| 545 |
+ |
|
| 546 |
+ //각 년도, 월, 일을 따로 리턴하려면 아래를 사용하면 됨 |
|
| 547 |
+ /* return {
|
|
| 548 |
+ year: year, |
|
| 549 |
+ month: month, |
|
| 550 |
+ day: day |
|
| 551 |
+ }; */ |
|
| 552 |
+} |
|
| 553 |
+ |
|
| 554 |
+// 중복 주소 체크하기 |
|
| 555 |
+/*function dupliAddrData(data){
|
|
| 556 |
+ |
|
| 557 |
+ var chk = true; //중복값 유무 |
|
| 558 |
+ var uniqData = []; // 중복값 삭제 후 데이터 저장 |
|
| 559 |
+ var dupCnt = 0; |
|
| 560 |
+ |
|
| 561 |
+ //첨부 주소 정보에서 연락처가 중복되는 경우 하나만 남기고 나머지는 삭제 하고 보여줌 |
|
| 562 |
+ $.each(data, function(i, item){
|
|
| 563 |
+ |
|
| 564 |
+ chk = true; //중복값 유무 |
|
| 565 |
+ |
|
| 566 |
+ $.each(uniqData, function(j, item2){
|
|
| 567 |
+ |
|
| 568 |
+ if(item.phone == item2.phone){
|
|
| 569 |
+ |
|
| 570 |
+ chk = false; |
|
| 571 |
+ dupCnt = dupCnt + 1; |
|
| 572 |
+ console.log("++++++++++++++ dupCnt ::: "+ dupCnt);
|
|
| 573 |
+ |
|
| 574 |
+ } |
|
| 575 |
+ |
|
| 576 |
+ }); |
|
| 577 |
+ |
|
| 578 |
+ if(chk){
|
|
| 579 |
+ |
|
| 580 |
+ uniqData.push(item); |
|
| 581 |
+ |
|
| 582 |
+ } |
|
| 583 |
+ |
|
| 584 |
+ }); |
|
| 585 |
+ |
|
| 586 |
+ $("#rowDupCnt").text(dupCnt);
|
|
| 587 |
+ return uniqData; |
|
| 588 |
+ |
|
| 589 |
+}*/ |
|
| 590 |
+ |
|
| 591 |
+var dupliPhoneDataRealList = []; |
|
| 592 |
+ |
|
| 593 |
+//중복 전화번호 체크하기 |
|
| 594 |
+function dupliPhoneData(data){
|
|
| 595 |
+ // console.log('dupliPhoneData : ', data);
|
|
| 596 |
+ |
|
| 597 |
+ var chk = true; //중복값 유무 |
|
| 598 |
+ var uniqData = []; // 중복값 삭제 후 데이터 저장 |
|
| 599 |
+ var dupCnt = 0; |
|
| 600 |
+ |
|
| 601 |
+ //첨부 주소 정보에서 연락처가 중복되는 경우 하나만 남기고 나머지는 삭제 하고 보여줌 |
|
| 602 |
+ $.each(data, function(i, item){
|
|
| 603 |
+ |
|
| 604 |
+ chk = true; //중복값 유무 |
|
| 605 |
+ |
|
| 606 |
+ $.each(uniqData, function(j, item2){
|
|
| 607 |
+ if(item.phone.length > 0){
|
|
| 608 |
+ if(item.phone == item2.phone){
|
|
| 609 |
+ |
|
| 610 |
+ chk = false; |
|
| 611 |
+ dupCnt = dupCnt + 1; |
|
| 612 |
+ |
|
| 613 |
+ } |
|
| 614 |
+ } |
|
| 615 |
+ |
|
| 616 |
+ }); |
|
| 617 |
+ |
|
| 618 |
+ if(chk){
|
|
| 619 |
+ uniqData.push(item); |
|
| 620 |
+ } |
|
| 621 |
+ else {
|
|
| 622 |
+ // Get 중복 연락처 |
|
| 623 |
+ GetDupliPhoneDataReal(item.phone); |
|
| 624 |
+ } |
|
| 625 |
+ |
|
| 626 |
+ }); |
|
| 627 |
+ |
|
| 628 |
+ //중복건수 텍스트 입력해 주기 |
|
| 629 |
+ $("#rowDupCnt").text(dupCnt);
|
|
| 630 |
+ |
|
| 631 |
+ // 중복번호 버튼 노출 |
|
| 632 |
+ if($("#btnAddrMassDupli").length > 0) {
|
|
| 633 |
+ $("#btnAddrMassDupli").show();
|
|
| 634 |
+ } |
|
| 635 |
+ |
|
| 636 |
+ // 중복번호(기존 주소록) 버튼 노출 |
|
| 637 |
+ if($("#btnAddrMassSaveDupli").length > 0) {
|
|
| 638 |
+ $("#btnAddrMassSaveDupli").hide();
|
|
| 639 |
+ } |
|
| 640 |
+ |
|
| 641 |
+ return uniqData; |
|
| 642 |
+} |
|
| 643 |
+ |
|
| 644 |
+ |
|
| 645 |
+//연락처 중복검사 속도 개선 버전 |
|
| 646 |
+function getSpupDupliPhoneDataChk(data){
|
|
| 647 |
+ |
|
| 648 |
+ var dataLen = data.length; |
|
| 649 |
+ const arrUnique = data.filter((character, idx, arr)=>{
|
|
| 650 |
+ return arr.findIndex((item) => item.phone === character.phone) === idx |
|
| 651 |
+ }); |
|
| 652 |
+ |
|
| 653 |
+ var uniqLen = arrUnique.length; |
|
| 654 |
+ var dupCnt = dataLen - uniqLen; |
|
| 655 |
+ //중복건수 텍스트 입력해 주기 |
|
| 656 |
+ $("#rowDupCnt").text(dupCnt);
|
|
| 657 |
+ |
|
| 658 |
+ return arrUnique; |
|
| 659 |
+} |
|
| 660 |
+ |
|
| 661 |
+// Get 중복 연락처 |
|
| 662 |
+function GetDupliPhoneDataReal(item) {
|
|
| 663 |
+ var isDuplicate = false; |
|
| 664 |
+ if (dupliPhoneDataRealList.length == 0) {
|
|
| 665 |
+ dupliPhoneDataRealList.push(item); |
|
| 666 |
+ } |
|
| 667 |
+ else {
|
|
| 668 |
+ for (var i = 0; i < dupliPhoneDataRealList.length; i++) {
|
|
| 669 |
+ if (dupliPhoneDataRealList[i] == item) {
|
|
| 670 |
+ isDuplicate = true; |
|
| 671 |
+ } |
|
| 672 |
+ } |
|
| 673 |
+ |
|
| 674 |
+ if (isDuplicate) {
|
|
| 675 |
+ return; |
|
| 676 |
+ } |
|
| 677 |
+ else {
|
|
| 678 |
+ dupliPhoneDataRealList.push(item); |
|
| 679 |
+ } |
|
| 680 |
+ } |
|
| 681 |
+} |
|
| 682 |
+ |
|
| 683 |
+//중복 전화번호 체크하여 중복 갯수 리턴하기 |
|
| 684 |
+function dupliPhoneDataChk(data){
|
|
| 685 |
+ |
|
| 686 |
+ var chk = true; //중복값 유무 |
|
| 687 |
+ var uniqData = []; // 중복값 삭제 후 데이터 저장 |
|
| 688 |
+ var dupCnt = 0; |
|
| 689 |
+ |
|
| 690 |
+ //첨부 주소 정보에서 연락처가 중복되는 경우 하나만 남기고 나머지는 삭제 하고 보여줌 |
|
| 691 |
+ $.each(data, function(i, item){
|
|
| 692 |
+ |
|
| 693 |
+ chk = true; //중복값 유무 |
|
| 694 |
+ |
|
| 695 |
+ $.each(uniqData, function(j, item2){
|
|
| 696 |
+ |
|
| 697 |
+ if(item.phone.length > 0){
|
|
| 698 |
+ |
|
| 699 |
+ if(item.phone == item2.phone){
|
|
| 700 |
+ |
|
| 701 |
+ chk = false; |
|
| 702 |
+ dupCnt = dupCnt + 1; |
|
| 703 |
+ |
|
| 704 |
+ } |
|
| 705 |
+ |
|
| 706 |
+ } |
|
| 707 |
+ |
|
| 708 |
+ }); |
|
| 709 |
+ |
|
| 710 |
+ if(chk){
|
|
| 711 |
+ |
|
| 712 |
+ uniqData.push(item); |
|
| 713 |
+ |
|
| 714 |
+ } |
|
| 715 |
+ |
|
| 716 |
+ }); |
|
| 717 |
+ |
|
| 718 |
+ return dupCnt; |
|
| 719 |
+ |
|
| 720 |
+} |
|
| 721 |
+ |
|
| 722 |
+//특정 바이트수 만큼 문자열 잘라서 반환해주기 |
|
| 723 |
+function strUnderLineSubstring(str, maxLength){
|
|
| 724 |
+ |
|
| 725 |
+ for(b=i=0;c=str.charCodeAt(i);) {
|
|
| 726 |
+ |
|
| 727 |
+ b+=c>>7?2:1; |
|
| 728 |
+ |
|
| 729 |
+ if (b > maxLength) |
|
| 730 |
+ |
|
| 731 |
+ break; |
|
| 732 |
+ |
|
| 733 |
+ i++; |
|
| 734 |
+ |
|
| 735 |
+ } |
|
| 736 |
+ |
|
| 737 |
+ return str.substring(0,i); |
|
| 738 |
+ |
|
| 739 |
+} |
|
| 740 |
+ |
|
| 741 |
+ |
|
| 742 |
+//특정 글자수 만큼 문자열 잘라서 반환해주기 |
|
| 743 |
+function strMaxLengthSubstring(str, maxLength){
|
|
| 744 |
+ |
|
| 745 |
+ for(b=i=0;c=str.charCodeAt(i);) {
|
|
| 746 |
+ |
|
| 747 |
+ if (i > maxLength) |
|
| 748 |
+ |
|
| 749 |
+ break; |
|
| 750 |
+ |
|
| 751 |
+ i++; |
|
| 752 |
+ |
|
| 753 |
+ } |
|
| 754 |
+ |
|
| 755 |
+ return str.substring(0,i); |
|
| 756 |
+ |
|
| 757 |
+} |
|
| 758 |
+ |
|
| 759 |
+//문자열 글자수 반환해주기(한글, 영문, 특수문자, 엔터와 상관없이 글자수로 체크함) |
|
| 760 |
+function strMaxCharacterCnt(str){
|
|
| 761 |
+ |
|
| 762 |
+ var totLen = 0; |
|
| 763 |
+ for(b=i=0;c=str.charCodeAt(i);) {
|
|
| 764 |
+ i++; |
|
| 765 |
+ totLen = i; |
|
| 766 |
+ } |
|
| 767 |
+ return totLen; |
|
| 768 |
+} |
|
| 769 |
+ |
|
| 770 |
+//문자입력 첫번째 글자가 한글, 숫자, 영문자가 아니면 경고 표시 |
|
| 771 |
+function strFirstCharCheck(str){
|
|
| 772 |
+ |
|
| 773 |
+ var pattern1 = /[0-9]/; |
|
| 774 |
+ var pattern2 = /[a-zA-Z]/; |
|
| 775 |
+ var pattern3 = /[ㄱ-ㅎ|ㅏ-ㅣ|가-힣]/; |
|
| 776 |
+ |
|
| 777 |
+ var spChar = 0; |
|
| 778 |
+ for(var i=0; i<str.length; i++){
|
|
| 779 |
+ |
|
| 780 |
+ if (!pattern1.test(str.charAt(i)) && !pattern2.test(str.charAt(i)) && !pattern3.test(str.charAt(i))) {
|
|
| 781 |
+ spChar++; |
|
| 782 |
+ }else{
|
|
| 783 |
+ break; |
|
| 784 |
+ } |
|
| 785 |
+ |
|
| 786 |
+ } |
|
| 787 |
+ |
|
| 788 |
+ var repStr = str.substring(0,spChar); |
|
| 789 |
+ return repStr; |
|
| 790 |
+ |
|
| 791 |
+} |
|
| 792 |
+ |
|
| 793 |
+function strChinJpnCheck(str){
|
|
| 794 |
+ |
|
| 795 |
+ var rtnStr = ""; |
|
| 796 |
+ for(var i=0; i < str.length; i++){
|
|
| 797 |
+ |
|
| 798 |
+ var cont = str.charAt(i); |
|
| 799 |
+ |
|
| 800 |
+ if(str.charAt(i) >= '\u4E00' && str.charAt(i) <= '\u9FFF'){//한중일 공통한자일 경우
|
|
| 801 |
+ |
|
| 802 |
+ if(rtnStr.length == 0){
|
|
| 803 |
+ rtnStr = cont; |
|
| 804 |
+ }else{
|
|
| 805 |
+ rtnStr = rtnStr + ", " + cont; |
|
| 806 |
+ } |
|
| 807 |
+ |
|
| 808 |
+ }else if(str.charAt(i) >= '\u2E80' && str.charAt(i) <= '\u2EFF'){//한자부수
|
|
| 809 |
+ |
|
| 810 |
+ if(rtnStr.length == 0){
|
|
| 811 |
+ rtnStr = cont; |
|
| 812 |
+ }else{
|
|
| 813 |
+ rtnStr = rtnStr + ", " + cont; |
|
| 814 |
+ } |
|
| 815 |
+ |
|
| 816 |
+ }else if(str.charAt(i) >= '\u3400' && str.charAt(i) <= '\u4DB5'){//한자확장A
|
|
| 817 |
+ |
|
| 818 |
+ if(rtnStr.length == 0){
|
|
| 819 |
+ rtnStr = cont; |
|
| 820 |
+ }else{
|
|
| 821 |
+ rtnStr = rtnStr + ", " + cont; |
|
| 822 |
+ } |
|
| 823 |
+ |
|
| 824 |
+ } |
|
| 825 |
+ |
|
| 826 |
+ } |
|
| 827 |
+ |
|
| 828 |
+ return rtnStr; |
|
| 829 |
+} |
|
| 830 |
+ |
|
| 831 |
+//받아온 str 에 이모지가 포함되어있는지 체크하여 갯수로 반환 |
|
| 832 |
+function kakaoTemplateEmojiCheck (str) {
|
|
| 833 |
+ var regex = /[\u{1F004}-\u{1F9E6}]|[\u{1F600}-\u{1F9D0}]/gu;
|
|
| 834 |
+ var usedEmoji = ""; |
|
| 835 |
+ var returnFlag = true; |
|
| 836 |
+ |
|
| 837 |
+ var splitMsg = str.split(/.*?/u); |
|
| 838 |
+ |
|
| 839 |
+ for(var i=0; i < splitMsg.length; i++){
|
|
| 840 |
+ if(splitMsg[i].match(regex)) {
|
|
| 841 |
+ usedEmoji = usedEmoji + splitMsg[i]; |
|
| 842 |
+ returnFlag = false; |
|
| 843 |
+ } |
|
| 844 |
+ } |
|
| 845 |
+ if(!returnFlag) alert("알림톡 내용에 이모지는 사용할 수 없습니다.\n이모지 삭제후 등록해주세요.\n(" + usedEmoji + ")");
|
|
| 846 |
+ |
|
| 847 |
+ return returnFlag; |
|
| 848 |
+} |
|
| 849 |
+ |
|
| 850 |
+//받아온 str 에 이모지가 포함되어있는지 체크하여 갯수로 반환 |
|
| 851 |
+function emojiCheck (str) {
|
|
| 852 |
+ var regex = /[\u{1F004}-\u{1F9E6}]|[\u{1F600}-\u{1F9D0}]/gu;
|
|
| 853 |
+ var usedEmoji = ""; |
|
| 854 |
+ var returnFlag = true; |
|
| 855 |
+ |
|
| 856 |
+ var splitMsg = str.split(/.*?/u); |
|
| 857 |
+ |
|
| 858 |
+ for(var i=0; i < splitMsg.length; i++){
|
|
| 859 |
+ if(splitMsg[i].match(regex)) {
|
|
| 860 |
+ usedEmoji = usedEmoji + splitMsg[i]; |
|
| 861 |
+ returnFlag = false; |
|
| 862 |
+ } |
|
| 863 |
+ } |
|
| 864 |
+ if(!returnFlag) alert("문자 제목, 내용에 이모지는 사용할 수 없습니다.\n이모지 삭제후 발송해주세요.\n(" + usedEmoji + ")");
|
|
| 865 |
+ |
|
| 866 |
+ return returnFlag; |
|
| 867 |
+} |
|
| 868 |
+ |
|
| 869 |
+function addrEmojiCheck (str) {
|
|
| 870 |
+ var regex = /[\u{1F004}-\u{1F9E6}]|[\u{1F600}-\u{1F9D0}]/gu;
|
|
| 871 |
+ var usedEmoji = ""; |
|
| 872 |
+ var returnFlag = true; |
|
| 873 |
+ |
|
| 874 |
+ var splitMsg = str.split(/.*?/u); |
|
| 875 |
+ |
|
| 876 |
+ for(var i=0; i < splitMsg.length; i++){
|
|
| 877 |
+ if(splitMsg[i].match(regex)) {
|
|
| 878 |
+ usedEmoji = usedEmoji + splitMsg[i]; |
|
| 879 |
+ returnFlag = false; |
|
| 880 |
+ } |
|
| 881 |
+ } |
|
| 882 |
+ |
|
| 883 |
+ if(!returnFlag) {
|
|
| 884 |
+ //로딩창 hide |
|
| 885 |
+ $('.loading_layer').removeClass('active');
|
|
| 886 |
+ |
|
| 887 |
+ alert("주소록 저장 목록 중 이모지를 사용할 수 없습니다.\n이모지 삭제후 발송해주세요.\n(" + usedEmoji + ")");
|
|
| 888 |
+ } |
|
| 889 |
+ |
|
| 890 |
+ return returnFlag; |
|
| 891 |
+} |
|
| 892 |
+ |
|
| 893 |
+// 제목이 치환 문구 체크 |
|
| 894 |
+function getSpacialStringChk(mmsSubject){
|
|
| 895 |
+ |
|
| 896 |
+ var returnStr = false; |
|
| 897 |
+ |
|
| 898 |
+ if(mmsSubject.indexOf("[*이름*]") > -1 || mmsSubject.indexOf("[*1*]") > -1 || mmsSubject.indexOf("[*2*]") > -1 || mmsSubject.indexOf("[*3*]") > -1 || mmsSubject.indexOf("[*4*]") > -1){
|
|
| 899 |
+ returnStr = true; |
|
| 900 |
+ } |
|
| 901 |
+ |
|
| 902 |
+ return returnStr; |
|
| 903 |
+ |
|
| 904 |
+} |
|
| 905 |
+ |
|
| 906 |
+//커서 위치에 삽입 |
|
| 907 |
+function setCursorInsertText(pTxtArea, pAddTxt) {
|
|
| 908 |
+ var txtArea = document.getElementById(pTxtArea); |
|
| 909 |
+ var txtValue = txtArea.value; |
|
| 910 |
+ var selectPos = txtArea.selectionStart; // 커서 위치 지정 |
|
| 911 |
+ var beforeTxt = txtValue.substring(0, selectPos); // 기존텍스트 ~ 커서시작점 까지의 문자 |
|
| 912 |
+ var afterTxt = txtValue.substring(txtArea.selectionEnd, txtValue.length); // 커서끝지점 ~ 기존텍스트 까지의 문자 |
|
| 913 |
+ var addTxt = pAddTxt; // 추가 입력 할 텍스트 |
|
| 914 |
+ txtArea.value = beforeTxt + addTxt + afterTxt; |
|
| 915 |
+ |
|
| 916 |
+ selectPos = selectPos + addTxt.length; |
|
| 917 |
+ txtArea.selectionStart = selectPos; // 커서 시작점을 추가 삽입된 텍스트 이후로 지정 |
|
| 918 |
+ txtArea.selectionEnd = selectPos; // 커서 끝지점을 추가 삽입된 텍스트 이후로 지정 |
|
| 919 |
+ txtArea.focus(); |
|
| 920 |
+} |
|
| 921 |
+ |
|
| 922 |
+//받는사람 목록의 체크박스가 20개가 모두 체크 되었는지 확인 |
|
| 923 |
+function fnCallToChkAllCnt(){
|
|
| 924 |
+ |
|
| 925 |
+ var chkCnt = 0; |
|
| 926 |
+ var totChkCnt = $("input:checkbox[name='chkCallTo']").length;
|
|
| 927 |
+ var btnAllVal = $("#checkAll").val();
|
|
| 928 |
+ |
|
| 929 |
+ //체크박스 체크된 갯수 구하기 |
|
| 930 |
+ $("input:checkbox[name='chkCallTo']").each(function () {
|
|
| 931 |
+ if($(this).is(':checked')){
|
|
| 932 |
+ chkCnt++; |
|
| 933 |
+ }; |
|
| 934 |
+ }); |
|
| 935 |
+ |
|
| 936 |
+ //전체선택 체크 여부 값 변경해 주기 |
|
| 937 |
+ //현재 체크된 체크박스 갯수와 전체 체크박스 갯수 비교하기 |
|
| 938 |
+ if(totChkCnt > 0 && totChkCnt == chkCnt){
|
|
| 939 |
+ |
|
| 940 |
+ if(btnAllVal == 'N'){
|
|
| 941 |
+ $("#checkAll").val("Y");
|
|
| 942 |
+ $("#checkAll").text("선택해제");
|
|
| 943 |
+ }else{
|
|
| 944 |
+ $("#checkAll").val("N");
|
|
| 945 |
+ $("#checkAll").text("전체선택");
|
|
| 946 |
+ } |
|
| 947 |
+ |
|
| 948 |
+ }else{
|
|
| 949 |
+ |
|
| 950 |
+ $("#checkAll").val("N");
|
|
| 951 |
+ $("#checkAll").text("전체선택");
|
|
| 952 |
+ |
|
| 953 |
+ } |
|
| 954 |
+ |
|
| 955 |
+} |
|
| 956 |
+ |
|
| 957 |
+//선거문자 20건 수신자 목록 추가된 건수 및 발송 금액 변경해주기 |
|
| 958 |
+function fnChkCallToChange(){
|
|
| 959 |
+ |
|
| 960 |
+ var callToCnt = 0; |
|
| 961 |
+ $("input[name=chkCallTo]").each(function(){
|
|
| 962 |
+ |
|
| 963 |
+ var chkSts = $(this).is(':checked');
|
|
| 964 |
+ if(chkSts){
|
|
| 965 |
+ callToCnt++; |
|
| 966 |
+ } |
|
| 967 |
+ }); |
|
| 968 |
+ |
|
| 969 |
+ //체크박스가 모두 체크 되어있는지 확인 하기 |
|
| 970 |
+ fnCallToChkAllCnt(); |
|
| 971 |
+ |
|
| 972 |
+ updateTotCnt(callToCnt); //전체 데이터 갯수 구하기 |
|
| 973 |
+ totalPriceSum(callToCnt); |
|
| 974 |
+ |
|
| 975 |
+} |
|
| 976 |
+ |
|
| 977 |
+//Tabulator 주소록 그룹 목록일 경우 각 그룹 주소 갯수 합산해주기 |
|
| 978 |
+function getTabulatorLAddrGrpCnt(){
|
|
| 979 |
+ |
|
| 980 |
+ var selectedData = tableL.getRows(); |
|
| 981 |
+ var totAddrCnt = 0; |
|
| 982 |
+ for(var i=0; i < selectedData.length; i++){
|
|
| 983 |
+ |
|
| 984 |
+ //일괄변환 문자에 콤마(,)가 들어가있으면 배열로 넘길때 문제가 발생하여 특수문자(§)로 치환하여 넘겨주도록 한다. |
|
| 985 |
+ var addrGrpCnt = tableL.getRows()[i].getData().addrGrpCnt; |
|
| 986 |
+ |
|
| 987 |
+ totAddrCnt = Number(totAddrCnt) + Number(addrGrpCnt); |
|
| 988 |
+ |
|
| 989 |
+ } |
|
| 990 |
+ |
|
| 991 |
+ return totAddrCnt; |
|
| 992 |
+ |
|
| 993 |
+} |
|
| 994 |
+ |
|
| 995 |
+/** |
|
| 996 |
+* @ phone을 기준으로 중복 제거 및 갯수 계산 |
|
| 997 |
+* @ 결과 반환 |
|
| 998 |
+* return {
|
|
| 999 |
+* uniqueArray, // 중복 제거된 배열 |
|
| 1000 |
+* uniqueCount, // 중복 제거된 데이터 개수 |
|
| 1001 |
+* duplicateArray // 중복된 데이터 배열 |
|
| 1002 |
+* duplicateCount: duplicateArray.length // 중복된 데이터 개수 |
|
| 1003 |
+* }; |
|
| 1004 |
+*/ |
|
| 1005 |
+function removeDuplicatesAndCount(array, key) {
|
|
| 1006 |
+ // 중복 체크를 위한 Map 사용 |
|
| 1007 |
+ const seen = new Map(); |
|
| 1008 |
+ const uniqueArray = []; |
|
| 1009 |
+ const duplicateArray = []; |
|
| 1010 |
+ |
|
| 1011 |
+ array.forEach(item => {
|
|
| 1012 |
+ const value = item[key]; |
|
| 1013 |
+ if (seen.has(value)) {
|
|
| 1014 |
+ // 중복된 데이터는 중복 배열에 추가 |
|
| 1015 |
+ duplicateArray.push(item); |
|
| 1016 |
+ } else {
|
|
| 1017 |
+ // 처음 본 데이터는 고유 배열에 추가하고 Map에 기록 |
|
| 1018 |
+ uniqueArray.push(item); |
|
| 1019 |
+ seen.set(value, true); |
|
| 1020 |
+ } |
|
| 1021 |
+ }); |
|
| 1022 |
+ |
|
| 1023 |
+ // 결과 반환 |
|
| 1024 |
+ return {
|
|
| 1025 |
+ uniqueArray, // 중복 제거된 배열 |
|
| 1026 |
+ uniqueCount: uniqueArray.length, // 중복 제거된 데이터 개수 |
|
| 1027 |
+ duplicateArray, // 중복된 데이터 배열 |
|
| 1028 |
+ duplicateCount: duplicateArray.length // 중복된 데이터 개수 |
|
| 1029 |
+ }; |
|
| 1030 |
+} |
|
| 1031 |
+ |
|
| 1032 |
+ |
|
| 1033 |
+function validateRowLimit(totalRows, limit = 300000) {
|
|
| 1034 |
+ // 값과 타입 확인 |
|
| 1035 |
+ |
|
| 1036 |
+ // 숫자 변환 |
|
| 1037 |
+ const totalRowsNum = Number(totalRows); |
|
| 1038 |
+ const limitNum = Number(limit); |
|
| 1039 |
+ console.log('totalRowsNum : ', totalRowsNum);
|
|
| 1040 |
+ console.log('limitNum : ', limitNum);
|
|
| 1041 |
+ |
|
| 1042 |
+ // 변환 후 값 확인 |
|
| 1043 |
+ |
|
| 1044 |
+ // 비교 연산 결과 확인 |
|
| 1045 |
+ const isOverLimit = totalRowsNum > limitNum; |
|
| 1046 |
+ |
|
| 1047 |
+ // 조건 처리 |
|
| 1048 |
+ if (isOverLimit) {
|
|
| 1049 |
+ alert('안정적인 서비스 운영을 위해서 최대 ' + limit + '건 이내로 분할 발송해 주시기 바랍니다.');
|
|
| 1050 |
+ return false; |
|
| 1051 |
+ } |
|
| 1052 |
+ return true; |
|
| 1053 |
+} |
|
| 1054 |
+ |
|
| 1055 |
+ |
|
| 1056 |
+// 전화번호 리스트 처리 |
|
| 1057 |
+function processPhoneNumbers(phoneList) {
|
|
| 1058 |
+ return phoneList |
|
| 1059 |
+ .map(number => {
|
|
| 1060 |
+ const cleanPhone = removeDash(number.trim()); |
|
| 1061 |
+ if (!isValidPhoneNumber(cleanPhone)) return null; |
|
| 1062 |
+ return {
|
|
| 1063 |
+ name: "", |
|
| 1064 |
+ phone: cleanPhone, |
|
| 1065 |
+ rep1: "", |
|
| 1066 |
+ rep2: "", |
|
| 1067 |
+ rep3: "", |
|
| 1068 |
+ rep4: "", |
|
| 1069 |
+ }; |
|
| 1070 |
+ }) |
|
| 1071 |
+ .filter(data => data !== null); |
|
| 1072 |
+} |
|
| 1073 |
+ |
|
| 1074 |
+ |
|
| 1075 |
+// 데이터 병합 및 중복 제거 |
|
| 1076 |
+function mergeAndValidateData(existingData, newData, uniqueKey = 'phone') {
|
|
| 1077 |
+ const combinedData = existingData.concat(newData); |
|
| 1078 |
+ const result = removeDuplicatesAndCount(combinedData, uniqueKey); |
|
| 1079 |
+ |
|
| 1080 |
+ if (!validateRowLimit(result.uniqueCount)) {
|
|
| 1081 |
+ return null; |
|
| 1082 |
+ } |
|
| 1083 |
+ |
|
| 1084 |
+ return result; |
|
| 1085 |
+} |
|
| 1086 |
+ |
|
| 1087 |
+// 테이블 데이터 업데이트 |
|
| 1088 |
+function updateTableData(table, result) {
|
|
| 1089 |
+ if (!result) return false; |
|
| 1090 |
+ |
|
| 1091 |
+ table.setData(result.uniqueArray); |
|
| 1092 |
+ setRowDupCnt(result.duplicateArray.length); |
|
| 1093 |
+ updateButtons(0); |
|
| 1094 |
+ const totRows = table.getRows().length; |
|
| 1095 |
+ updateTotCnt(totRows); |
|
| 1096 |
+ totalPriceSum(totRows); |
|
| 1097 |
+ return true; |
|
| 1098 |
+} |
|
| 1099 |
+ |
|
| 1100 |
+/** |
|
| 1101 |
+ * @Discript : 문자발송 화면에 중복 카운트 입력 |
|
| 1102 |
+ * |
|
| 1103 |
+ */ |
|
| 1104 |
+function setRowDupCnt(cnt){
|
|
| 1105 |
+ $('#rowDupCnt').text(cnt)
|
|
| 1106 |
+} |
|
| 1107 |
+ |
|
| 1108 |
+ |
|
| 1109 |
+ |
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?