//공통함수 정의 var common = (function() { //common.속성 으로 접근할 object return var common = {}; /** * input 태그에_inputmask 적용 * 사용시 _inputmask attribute를 태그에 추가해 주어야 함. * https://github.com/RobinHerbots/Inputmask 참고 * @since 2017.07.18, SHINMJ */ common.inputmask = function(){ $("[_inputmask]").each(function(){ var data = $(this).attr("_inputmask"); var options = (function(){ var arr = data.split(','); var ret = {}; arr.map( function(a){ var curr = a.split(':'); this[curr[0]] = curr[1]; return a; }, ret ); return ret; })(); //기본속성 적용 {서버전송시mask 제거, numeric인경우 기본 천단위마다 ','로 나눔} //기본속성을 사용하지 않을 경우 각 페이지에서 option false 처리해주세요. $.extend(options, {autoUnmask:true,autoGroup:true,groupSeparator:","}); $(this).inputmask(options); }); }; /** * 지정된 객체의 문자열의 길이를 계산 * * @param str : 문자값 * @return 문자길이(byte) * @since 2020. 02. 05(양민우). */ common.validCheckByte = function (str) { return str.replace(/[\0-\x7f]|([0-\u07ff]|(.))/g, "$&$1$2").length; }; /** * 이메일의 정확성 검사 * * @param val : 이메일주소 문자 * @return 이메일 형식을 체크한 결과(true 또는 false) 반환 * * @since 2004. 05. 25(전수일) */ common.validEMail = function(val) { if(!val){ return false; } var re = /^[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*.[a-zA-Z]{2,3}$/i; if (re.test(val)) { return true; } return false; }; // 이미지 업로드 common.uploadImage = function(form, callback) { form.append("acceptedFiles", "image"); common.uploadFile(form, function(res) { if (_.isFunction(callback)) { callback(res); } }); }; // 파일정보 삭제 common.deleteFile = function($target, fileSeq) { // $.each($target.data(), function(key, value) { // if(key != "fileSeq") { // $target.data(key, ""); // } // }); $target.data("status", "D"); $target.val(""); if($target[0].tagName.toLowerCase() == "img") { $target.attr("src", ""); } } common.setFile = function($target, data) { $target.data("imageUrl", data.IMAGE_URL); $target.data("uploadFileName", data.UPLOAD_FILE_NAME); $target.data("originalFileName", data.ORIGINAL_FILE_NAME); $target.data("fileExtension", data.FILE_EXTENSION); $target.data("fileSize", data.FILE_SIZE); $target.data("contentType", data.CONTENT_TYPE); $target.data("status", data.STATUS || "N"); $target.data("dbInsertYn", data.DB_INSERT_YN); if(data.ATCH_FILE_ID) { $target.data("atchFileId", data.ATCH_FILE_ID); } if(data.FILE_SEQ && data.FILE_SEQ > 0) { $target.data("fileSeq", data.FILE_SEQ); } if(data.STATUS != "D") { // 삭제가 아닌 경우 표시 $target.val(data.ORIGINAL_FILE_NAME); if($target[0] && $target[0].tagName.toLowerCase() == "img") { $target.attr("src", data.IMAGE_URL); } } } common.emptyFile = function($target, data) { $target.removeData("imageUrl"); $target.removeData("uploadFileName"); $target.removeData("originalFileName"); $target.removeData("fileExtension"); $target.removeData("fileSize"); $target.removeData("contentType"); $target.removeData("status"); $target.removeData("dbInsertYn"); $target.removeData("atchFileId"); $target.removeData("fileSeq"); } // 파일정보 조회 common.getFile = function($target) { return { FILE_SEQ : $target.data("fileSeq") , UPLOAD_FILE_NAME : $target.data("uploadFileName") , ORIGINAL_FILE_NAME : $target.data("originalFileName") , FILE_EXTENSION : $target.data("fileExtension") , FILE_SIZE : $target.data("fileSize") , CONTENT_TYPE : $target.data("contentType") , IMAGE_URL : $target.data("imageUrl") , STATUS : $target.data("status") || "N" , DB_INSERT_YN : $target.data("dbInsertYn") , ATCH_FILE_ID : $target.data("atchFileId") } } // 파일 업로드 common.uploadFile = function(form, callback) { common.ajax2({ url : "/file/uploadFile" , data : form , ajaxType: 'file' , successCallback : function(resData) { if (_.isFunction(callback)) { if (typeof resData === "string") { callback($.parseJSON(resData)); } else { callback(resData); } } } , completeCallback : function() { $(":input[type='file']").val(""); } }); }; // 압축 다운로드 common.downloadZipFile = function(param) { if(!param.zipName) { param.zipName = "일괄 다운로드"; } if(common.isEmpty(param.fileList)) { alert("첨부파일이 존재하지 않습니다."); return false; } common.ajax2({ url : "/file/uploadZip" , data : param , successCallback : function(res) { if(res.result) { var zip = res.result; location.href = "/file/downloadZip" + "?UPLOAD_FILE_NAME=" + encodeURIComponent(zip.UPLOAD_FILE_NAME) + "&ORIGINAL_FILE_NAME=" + encodeURIComponent(zip.ORIGINAL_FILE_NAME); } } }); }; // 첨부파일 조회 common.selectFileDetailList = function(param, callback) { common.ajax2({ url : "/file/selectFileDetailList" , data : param , successCallback : function(resData) { if (_.isFunction(callback)) { if (typeof resData === "string") { callback($.parseJSON(resData)); } else { callback(resData); } } } }); }; common.selectCodeFileDetailList = function(param, callback) { common.ajax2({ url : "/file/selectCodeFileDetailList" , data : param , successCallback : function(resData) { if (_.isFunction(callback)) { if (typeof resData === "string") { callback($.parseJSON(resData)); } else { callback(resData); } } } }); }; // String unit, double fileSize, boolean isViewUnit, int round common.convertSize = function(unit, fileSize, isViewUnit, round) { if(!unit) return fileSize; if(!fileSize) return ""; // 단위치환 switch (unit.toUpperCase()) { case "TB" : fileSize = fileSize / 1024; case "GB" : fileSize = fileSize / 1024; case "MB" : fileSize = fileSize / 1024; case "KB" : fileSize = fileSize / 1024; default :; } // 소수점 버림 fileSize = fileSize.toFixed(round); // 콤마 fileSize = String(fileSize).replace(/(\d)(?=(?:\d{3})+(?!\d))/g, '$1,'); // 단위표시 if (isViewUnit == true) { fileSize += " " + unit; } return fileSize; }; /** * 패스워드는 영문자/숫자/특수문자 혼용, 9~20 자리 * * @param val : password 문자 * @return password 형식을 체크한 결과(true 또는 false) 반환 * * @since 2011. 07. 13(안가희) * @since 2013. 04. 02(김재열), minLength 추가하여 자릿 수를 지정할 수 있도록 변경, 미지정시 8자리 기본 * @since 2016. 01. 11(신명진), 영문자/숫자/특수문자 혼용하도록 수정, 기본 9~20자리 변경 * @since 2020. 02. 05(양민우), 영문자/숫자/특수문자 혼용하도록 수정, 기본 9~20자리 변경 */ common.validPassword = function(val, type) { if(!val) return false; var pwdRegPass = /.+/; var pwdReg1 = /^(?=.*[a-zA-Z])(?=.*[0-9])(?=.*[^a-zA-Z0-9]).{9,20}/; // 영문, 숫자, 특수문자 3가지 조합 9~20자리 var pwdReg2 = /^(?=.*[a-zA-Z])(?=.*[0-9]).{10,}$/; // 영문, 숫자 2가지 조합 10자리 이상 var isValid = false; switch(type) { case "cfcm" : case "cppms" : isValid = pwdReg1.test(val); break; case "scgs" : case "ibwp" : default : isValid = pwdRegPass.test(val); break; } return isValid; }; /** * 오직 숫자로만 이루어져 있는지 체크 한다. * * @param numNumeric * @return boolean * @old: common_isNumber * @since 2005. 01. 11(전수일). */ common.isNumber = function(num, isFloat) { num = common.trimRight(num); //num이 number 인 경우에는 아래 match 함수에서 에러가 발생하므로 //string으로 변환하여야 한다. if (typeof num != "string") { num = num.toString(); } if (isFloat == true){ //numStr = /^-?(\d+\.?\d*)$|(\d*\.?\d+)$/; //num.match(/^\b[0-9]+(\.[0-9]+)?\b$/) if (num.match(/^-?\b[0-9]+(\.[0-9]+)?\b$/)) { return true; } } else { if (num.match(/^\b\d+\b$/)) { return true; } } return false; }; /** * 오른쪽공백제거 * * @paramtext * @return String text 에서 오른쪽공백을 제외한 String * * @since 2005. 01. 11(전수일). */ common.trimRight = function(text) { if (text == "") { return text; } var len = text.length; var st = 0; while ((st < len) && (text.charAt(len - 1) <= ' ')) { len--; } return (len < text.length) ? text.substring(st, len) : text; } common.chkFileExt = function(fileName, extList) { if (common.isEmpty(extList)) { extList = ["jpg", "jpeg", "png", "pdf", "hwp", "doc", "docx", "xls", "xlsx", "ppt", "pptx", "zip"]; } var ext = fileName.split(".").pop().toLowerCase(); var msg = ""; if($.inArray(ext, extList) == -1) { msg = extList.join(", ") + " 파일만 업로드 가능합니다"; alert(msg); return false; } return true; } common.isNull = function(o) { var ret = false; if(o == null || typeof o === "undefined") { ret = true; return ret; } return ret; }; common.isEmpty = function(o) { var ret = false; if(common.isNull(o) == true || (typeof o === "object" && Object.keys(o).length < 1) || (typeof o === "string" && o.trim().length < 1)) { ret = true; return ret; } return ret; }; common.ajax2 = function(obj) { var ret = false; var setObj = {}; setObj.url = obj.url; setObj.data = obj.data || {}; setObj.sendObj = obj.sendObj; ret = common.isEmpty(obj.type); if (ret == false) { setObj.type = obj.type; // 'post', 'get' } else { setObj.type = 'post'; } ret = common.isNull(obj.async); if (ret == false) { setObj.async = obj.async; // async: true, false } else { setObj.async = true; } ret = common.isNull(obj.ajaxType); if (ret == false) { var ajaxType = obj.ajaxType.toLowerCase(); if(ajaxType == "file") { setObj.processData = false; setObj.contentType = false; setObj.dataType = "json"; } } else { setObj.dataType = "json"; setObj.contentType = "application/json"; setObj.data = JSON.stringify(setObj.data); } // jsonp ret = common.isNull(obj.jsonpCallback); if (ret == false) { setObj.dataType = "jsonp" setObj.jsonpCallback = obj.jsonpCallback; } if (setObj.dataType == "json") { setObj.headers = {'_CSRFtk': 'WaaSz+fSazNdSQfzjpp98PDEGhjbxJnvLOFI8VUMYpI='}; } setObj.beforeSendCallback = obj.beforeSendCallback; setObj.errorCallback = obj.errorCallback; setObj.successCallback = obj.successCallback; setObj.completeCallback = obj.completeCallback; setObj.beforeSend = function(jqXHR, textStatus) { var ret = common.isNull(this.beforeSendCallback); if (ret == false) { this.beforeSendCallback(jqXHR, textStatus); } }; setObj.error = function(jqXHR, textStatus, errorThrown) { var ret = common.isNull(this.errorCallback); var $responseText = $(jqXHR.responseText); var message = "오류가 발생하였습니다. 관리자에게 문의바랍니다."; if (ret == false) { var messageKey = $responseText.find("#messageKey").text(); if(messageKey && messageKey.indexOf("ERR") != -1) { message = $responseText.find("#message").text() } this.errorCallback(jqXHR, textStatus, errorThrown, message); } else { var messageKey = $responseText.find("#messageKey").text(); if(messageKey && messageKey.indexOf("ERR") != -1) { message = $responseText.find("#message").text() } alert(message); } }; setObj.success = function(responseData, textStatus, jqXHR) { var ret = common.isNull(this.successCallback); if (ret == false) { this.successCallback(responseData, textStatus, jqXHR, this.sendObj); } }; setObj.complete = function(jqXHR, textStatus) { var ret = common.isNull(this.completeCallback); if (ret == false) { this.completeCallback(jqXHR, textStatus); } }; return $.ajax(setObj); }; common.pathReplace = function(path) { path = path.replace(/\\+/gi, "/"); path = path.replace(/\/+/gi, "/"); return path; } common.getCurrentMonth = function () { var today = new Date(); if (today.getMonth() < 9) { return today.getFullYear() + "-0" + (today.getMonth() + 1); } return today.getFullYear() + "-" + (today.getMonth() + 1); }; common.getPrevMonth = function () { var today = new Date(); var curMon = new Date(today.getFullYear(), today.getMonth(), 1); var lastMon = new Date(curMon.setDate(curMon.getDate() - 1)); if (lastMon.getMonth() < 9) { return lastMon.getFullYear() + "-0" + (lastMon.getMonth() + 1); } return lastMon.getFullYear() + "-" + (lastMon.getMonth() + 1); }; common.getAddMonth = function (addValue) { var today = new Date(); var curMon = new Date(today.getFullYear(), today.getMonth(), 1); var lastMon = new Date(curMon.setMonth(curMon.getMonth() + addValue)); if (lastMon.getMonth() < 9) { return lastMon.getFullYear() + "-0" + (lastMon.getMonth() + 1); } return lastMon.getFullYear() + "-" + (lastMon.getMonth() + 1); }; common.getCurDate = function(fmt) { var d = new Date(); return common.dateFormat(d, fmt); }; // 날짜 포맷 common.dateFormat = function(d, f) { if (common.isEmpty(f) == true) { f = "YYYY-MM-DD"; } if (!d.valueOf()) return " "; var weekName = ["일요일", "월요일", "화요일", "수요일", "목요일", "금요일", "토요일"]; return f.replace(/(YYYY|yyyy|YY|yy|MM|DD|dd|E|HH|hh|mm|ss|a\/p)/g, function($1) { switch ($1) { case "YYYY": case "yyyy": return d.getFullYear(); case "YY": case "yy": return common.pad("0", (d.getFullYear() % 1000), 2); case "MM": return common.pad("0", (d.getMonth() + 1), 2); case "DD": case "dd": return common.pad("0", d.getDate(), 2); case "E": return weekName[d.getDay()]; case "HH": return common.pad("0", d.getHours(), 2); case "hh": return common.pad(((h = d.getHours() % 12) ? h : 12), 2); case "mm": return common.pad("0", d.getMinutes(), 2); case "ss": return common.pad("0", d.getSeconds(), 2); case "a/p": return d.getHours() < 12 ? "오전" : "오후"; default: return $1; } }); }; // 왼쪽에 pad 채우기 common.pad = function(pad, o, len) { var s = '', i = 0; o = o.toString(); while (i++ < len - o.length) { s += pad; } return s + o; }; // yyyyMMdd형식의 str을 date로 변환 common.parseDate = function(str) { if(!str) return null; str = String(str); var y = str.substr(0, 4); var m = str.substr(4, 2); var d = str.substr(6, 2); return new Date(y,m-1,d); } common.formInit = function(formId, obj) { var $form = $("#" + formId); $.each(obj, function(key, value) { var element = $form.find("[name='"+key+"']"); if (!element[0]) return true; // continue var tagName = element[0].tagName.toLowerCase(); switch(tagName) { case "input" : var type = element[0].type.toLowerCase(); switch(type) { case "radio" : case "checkbox" : element = $("[name='"+key+"'][value='"+value+"']"); element.prop("checked", true); break; default : element.val(value); } break; case "label" : case "span" : case "p" : case "em" : case "td" : element.text(value); break; case "img" : element.attr("src", value); break; default : element.val(value); break; } }); }; common.createFormInit = function(formId, obj) { var $form = $("#" + formId); if(!$form) return false; $.each(obj, function(key, value) { var element = $form.find("[name='"+key+"']"); if (!element[0] || element[0] == undefined) { $form.append($("", { type : "hidden" , name : key , value : value })); } else { element.val(value); } }); }; common.createFormInitWithID = function(formId, obj) { var $form = $("#" + formId); if(!$form) return false; $.each(obj, function(key, value) { var element = $form.find("[name='"+key+"']"); if (!element[0] || element[0] == undefined) { $form.append($("", { type : "hidden" , name : key , id : key , value : value })); } else { element.val(value); } }); }; common.maxLength = function(value) { return value.replace(/[\0-\x7f]|([0-\u07ff]|(.))/g, "$&$1$2").length; }; common.validation = function(formId) { var isValid = true; $.each($("#" + formId).find(":input, textarea, select, label, span"), function(i, reqEl) { var element = $(reqEl); // 유효성 검사 조건 var validCase = { required : element.hasClass("required") , maxLength : element.attr("maxLength") ? true : false }; var isContinue = true; $.each(validCase, function(key, status) { if(status == true) { isContinue = false; return false; // break; } }); if(isContinue == true) { return true; // continue } var str = ""; var tagName = element[0].tagName.toLowerCase(); switch(tagName) { case "input" : var type = element[0].type.toLowerCase(); switch(type) { case "radio" : case "checkbox" : element = $("[name='"+element.attr("name")+"']"); str = element.is(":checked") ? "IS CHECKED" : ""; break; default : str = element.val(); break; } break; case "textarea" : case "select" : str = element.val(); break; case "label" : case "span" : str = element.text(); break; default : str = "NOT INPUT TAG"; break; } if(str == "NOT INPUT TAG") return true; // continue var title = element.attr("title") || $("[for='"+element.attr("id")+"']").text() || "이 항목"; var msg = []; // 길이제한 if (validCase.maxLength) { var maxLength = element.attr("maxLength"); if (common.maxLength(str) > maxLength) { msg.push("[입력 길이제한(한글3byte)]"); msg.push(title + " : " + common.maxLength(str) + "byte(최대 : " + maxLength + "byte)"); } } // 필수값 여부 if (validCase.required) { if(common.isEmpty(str) == true) { msg.push(title + "은 필수값입니다."); } } if(common.isEmpty(msg) == false) { alert(msg.join("\n")); element.focus(); isValid = false; return false; // break } }); return isValid; } common.fileDownload = function(atchFileId, fileSeq) { $.fileDownload("/file/downloadFile" + "?ATCH_FILE_ID=" + atchFileId + "&FILE_SEQ=" + fileSeq); // .fail(function(data) { // alert("파일이 존재하지 않습니다.") // }); } return common; }()); /******************************************************** prototype 정의 시작 **************************************************************/ $('.allmenu-btn').on('click', function(){ $('.gnb-all-wrap').fadeIn(); }); $('.site-close-btn').on('click', function(){ $('.gnb-all-wrap').fadeOut(); }); // 창 닫을 때 팝업 창도 같이 닫히도록 처리 $(window).on("beforeunload", function() { popup.autoClose(); }); $(function() { _.templateSettings = { interpolate: /\{\{\=(.+?)\}\}/gim, evaluate: /\{\{([\s\S]+?)\}\}/gim, escape: /\{\{\-(.+?)\}\}/gim }; // form submit $("form").attr("onsubmit", "return false;"); // Enter 서브밋 $("form").attr("method", "post"); // post 전송 // $("form, :input").attr("autocomplete", "off"); // 자동완성기능 $.fn.smit = function(action, target) { if (action) { $(this).attr("action", action); } if(target) { $(this).attr("target", target); } var els = $(this).find("*[disabled]"); $.each(els, function(i, el) { $(el).prop("disabled", false); }); $(this).attr("onsubmit", "return true;"); $(this).submit(); }; }); /******************************************************** prototype 정의 끝 **************************************************************/