//공통함수 정의
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': 'jrtbSN8U7nFGMS6nkAToikw7gZYDocombPrVfJoFp2M='};
}
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 정의 끝 **************************************************************/