/* * Common Java Script by gagamel * * Copyright (c) 2010 gagamel * Dual licensed under the MIT (MIT-LICENSE.txt) * and GPL (GPL-LICENSE.txt) licenses. * * $Date: 2019-08-06 $ */ /** * 로그인메뉴목록을 sessionStorage에 담는다. */ let cfnSetLoginMenuList = function(loginMenuList) { sessionStorage.setItem('loginMenuList', JSON.stringify(loginMenuList)); } /** * sessionStorage에 담긴 메뉴정보를 가져온다. */ let cfnGetMenuInfo = function(menuId) { let loginMenuList = JSON.parse(sessionStorage.loginMenuList); let menu = ''; loginMenuList.forEach(function(item) { if (menuId == item.menuId) { menu = item; gagajf.setCookie("CK_MENU_ID", menuId, 1); // 쿠키 설정 return false; } }); return menu; } /** * LNB메뉴 그리기 */ let cfnDrawLnbMenu = function(gnbMenuId) { let loginMenuList = JSON.parse(sessionStorage.loginMenuList); let lnbTag = '
* cfnCreateCombo("/renderer/company/brand/list", oTarget, "[선택]");
*
* @param : actionUrl - URL. 필수
* oTarget - target 오브젝트. 필수
* defaultTxt - default 텍스트([선택]/[전체]). option
* chooseCd - 선택된 코드 값. option
* isCodeDisp - 코드표시(true/false). option
* @return : None
* @since : 2019/06/07
* @author : gagamel
*/
var cfnCreateCombo = function(actionUrl, oTarget, defaultTxt, chooseCd, isCodeDisp) {
if (gagajf.isNull(isCodeDisp)) isCodeDisp = true;
$.getJSON(actionUrl
, function(result, status) {
if (status == 'success') {
$('option', oTarget).remove();
if (!gagajf.isNull(defaultTxt)) {
$(oTarget).append('');
}
$.each(result, function(idx, data) {
var tag = '';
} else {
tag += '>' + data.cdNm + '';
}
$(oTarget).append(tag);
});
}
});
}
/**
* @type : function
* @access : public
* @desc : MultiCombobox 구성
*
* cfnCreateCombo("/renderer/company/brand/list", oTarget, "[선택]");
*
* @param : actionUrl - URL. 필수
* oTarget - target 오브젝트. 필수
* defaultTxt - default 텍스트([선택]/[전체]). option
* chooseValArr - 선택된 코드 값. option arr
* isCodeDisp - 코드표시(true/false). option
* isAllYn - 전체선택 존재여부. option
* searchParams - . option
* formId - target 오브젝트의 formId. option
*
* @return : None
* @since : 2019/06/07
* @author : gagamel
*/
var cfnCreateMultiCombo = function(actionUrl, oTarget, defaultTxt, chooseValArr, isCodeDisp, isAllYn, searchParams, formId){
var opt = {};
opt.actionUrl = actionUrl; //컨트롤러 URL
opt.oTarget = oTarget; //타겟DIV
opt.defaultTxt = defaultTxt; //디폴트 텍스트 기본 = 선택
opt.chooseValArr = chooseValArr; //기존 체크될 데이터
opt.isCodeDisp = isCodeDisp; //[코드] 값 표현여부
opt.isAllYn = isAllYn; //전체선택버튼 존재여부 Y:N
opt.params = searchParams; //조회시 파라미터 (json타입)
opt.formId = formId; //화면 formId
var html = "";
var isChecked = "";
if(opt.actionUrl){
$.getJSON(opt.actionUrl
, opt.params
, function(result, status) {
if (status == 'success') {
opt.dataArr = result;
html += '
* cfnCreateCheckbox("/renderer/company/brand/list", $('#div0'), "brandMngIdx", callBackFun);
*
* @param : actionUrl - URL. 필수
* oTarget - target 오브젝트. 필수
* checkboxNm - 체크박스명. 필수
* @return : None
* @since : 2019/06/14
* @author : gagamel
*/
var cfnCreateCheckbox = function(actionUrl, oTarget, checkboxNm, callBackFun) {
$.getJSON(actionUrl
, function(result, status) {
if (status == 'success') {
$(oTarget).html('');
$.each(result, function(idx, data) {
$(oTarget).append('');
});
if (typeof(callBackFun) != 'undefined')
callBackFun.call();
}
});
}
/**
* @type : function
* @access : public
* @desc : 다중 select의 선택된 값을 표시
*
* cfnShowMultiSelectedValue($('#detailForm select[name=roleDiv]'), "M,S,D");
*
* @param : objToShow - 표시할 다중 select 객체
* @param : values - 다중 선택된 값(콤마(,)로 연결). 예) M,S,D
* @since : 2019/06/04
* @author : gagamel
*/
var cfnShowMultiSelectedValue = function(objToShow, values) {
// 기존 선택된 옵션 값 초기화
$.each($('option', objToShow), function() {
$(this).prop('selected', false);
});
var mSelect = $(objToShow).parent()
$.each($(mSelect).find('.mSelected > li'), function() {
if (!$(this).hasClass('off') && !$(this).hasClass('srchFld')) {
$(this).addClass('off');
}
});
$.each($(mSelect).find('.mSelecting > ul > li'), function() {
if ($(this).hasClass('off')) {
$(this).removeClass('off');
}
});
// 기존 선택된 옵션 값 초기화
$.each($('option', objToShow), function(idx1) {
var obj = $(this);
if (gagajf.isNull(values)) return;
$.each(values.split(','), function(idx2, item2) {
if ($(obj).val() == item2) {
$(obj).prop('selected', true);
$(mSelect).find('.mSelected > li').eq(idx1).removeClass('off');
$(mSelect).find('.mSelecting > ul > li').eq(idx1).addClass('off');
}
});
});
}
/**
* @type : function
* @access : public
* @desc : Tab의 idx 번째를 show
*
* cfnShowTab($('.nav-tabs > li').eq(2));
*
* @param : objToShow - 보여줄 객체
* @param : idx - index
* @since : 2019/03/31
* @author : gagamel
*/
var cfnShowTab = function(objToShow) {
//$(objToShow).removeClass('on');
$(objToShow).siblings().removeClass('on');
$(objToShow).addClass('on');
$(objToShow).find('a').trigger('click');
}
/**
* Global Ajax Error Handler
*/
/*$(document).ajaxError(function(event, jqxhr, settings, thrownError) {
if (jqxhr.status !== 200) { // 404("Not Found"), 500("Internal Server Error") and ...
// 에러 처리 함수가 등록 안되어 있는 경우
if (settings && typeof settings.error !== 'function') {
// $(Element).load() 호출 시 에러가 발생할 경우 '/error'로 이동
if (settings.dataType == 'html') {
window.location.replace("/error");
} else {
alert('요청이 진행되지 못했습니다\n죄송합니다, 에러가 발생했습니다.');
}
}
}
});*/
/**
* @type : function
* @access : public
* @desc : 기간(from ~ to)로 날짜 구성
*
* cfnCreateCalendar('#sellTerms', 'startDt', 'endDt', true, '판매');
*
* @param : tgtId - 만들어진 tag를 표시할 Target ID
* @param : dtFromId - 시작일자 ID
* @param : dtToId - 종료일자 ID
* @param : isRequired - 검색조건 필수여부. 옵션
* @param : validName - 유효성검증 시 사용되는 명칭. isRequired 값이 true일 때만 사용. 옵션
* @since : 2019/09/09
* @author : gagamel
*/
function cfnCreateCalendar(tgtId, dtFromId, dtToId, isRequired, validName, empty, hideList) {
var tag = '';
tag += '\n';
tag += ' \n';
tag += ' ~\n';
tag += ' \n';
tag += '\n';
if(typeof empty!='undefined'){
tag += '\n';
}
tag += '\n';
tag += '\n';
tag += '\n';
tag += '\n';
tag += '\n';
tag += '\n';
tag += '\n';
tag += '\n';
tag += '\n';
$(tgtId).html(tag);
if(hideList && hideList.length > 0){
for(var i in hideList){
$(tgtId+" ."+hideList[i]).hide();
}
}
$(tgtId + ' .schDate').datepicker({
changeMonth: true,
changeYear: true,
firstDay: 0,
defaultDate: $(tgtId + '.schDate').val(),
onSelect: function(){
var fromVal = Number($(tgtId+" #"+dtFromId).val().replace(/-/gi, ''));
var toVal = Number($(tgtId+" #"+dtToId).val().replace(/-/gi, ''));
if($(this).val()==""){
return;
}
if($(this).attr("id")==dtFromId){
if($(tgtId+" #"+dtToId).val()!=""){
if(fromVal>toVal){
mcxDialog.alert('시작일자가 종료일자보다 큽니다.');
$(tgtId+" #"+dtFromId).val('');
$(tgtId+" #"+dtFromId).focus();
}
}
}else{
if($(tgtId+" #"+dtFromId).val()!=""){
if(fromVal>toVal){
mcxDialog.alert('종료일자가 시작일자보다 작습니다.');
$(tgtId+" #"+dtToId).val('');
$(tgtId+" #"+dtToId).focus();
}
}
}
}
});
$(tgtId+" #"+dtFromId).off("blur");
$(tgtId+" #"+dtFromId).on("blur", function(){
var fromVal = Number($(tgtId+" #"+dtFromId).val().replace(/-/gi, ''));
var toVal = Number($(tgtId+" #"+dtToId).val().replace(/-/gi, ''));
if($(this).val()==""){
return;
}else if($(tgtId+" #"+dtToId).val()!=""){
if(fromVal>toVal){
mcxDialog.alert('시작일자가 종료일자보다 큽니다.');
$(tgtId+" #"+dtFromId).val('');
$(tgtId+" #"+dtFromId).focus();
}
$(this).change();
}
});
$(tgtId+" #"+dtToId).off("blur");
$(tgtId+" #"+dtToId).on("blur", function(){
var fromVal = Number($(tgtId+" #"+dtFromId).val().replace(/-/gi, ''));
var toVal = Number($(tgtId+" #"+dtToId).val().replace(/-/gi, ''));
if($(this).val()==""){
return;
}else if($(tgtId+" #"+dtFromId).val()!=""){
if(fromVal>toVal){
mcxDialog.alert('종료일자가 시작일자보다 작습니다.');
$(tgtId+" #"+dtToId).val('');
$(tgtId+" #"+dtToId).focus();
}
$(this).change();
}
});
}
/**
* @type : function
* @access : public
* @desc : 기간으로 조회시 날짜지정
*
* cfnChangeCalendar('diff','obj1','obj2','dateFormat');
*
* @param : diff - 날짜간격(3m : 최근 3개월 , 1m : 최근 한달, 1d : 오늘, -1d : 어제, 7d : 최근 한 주, tw : 이번주, lw : 지난주, tm : 이번달, lm : 지난달)
* @param : obj1 - 시작날짜 오브젝트
* @param : obj2 - 종료날짜 오브젝트
* @param : dateFormat - 날짜형식
* @since : 2019/07/02
* @author : yhkim
*/
function cfnChangeCalendar(diff, obj1, obj2, dateFormat) {
var sdt = new Date();
var edt = new Date();
var smonth = sdt.getMonth();
var sday = sdt.getDate();
var emonth = edt.getMonth();
var weekday = sdt.getDay();
if (diff == '3m') {
sdt.setMonth(smonth - 3);
} else if (diff == '1m') {
sdt.setMonth(smonth - 1);
} else if (diff == '7d') {
sdt.setDate(sday - 7);
} else if (diff == '1d') {
sdt.setDate(sday);
} else if (diff == '-1d') {
sdt.setDate(sday - 1);
edt.setDate(sday - 1);
} else if (diff == 'tw') {
sdt.setDate(sday - weekday);
edt.setDate(edt.getDate() - weekday + 6);
} else if (diff == 'lw') {
sdt.setDate(sday - weekday - 7);
edt.setDate(edt.getDate() - weekday - 1);
} else if (diff == 'tm') {
sdt.setDate(1);
edt.setMonth(emonth + 1);
edt.setDate(0);
} else if (diff == 'lm') {
sdt.setMonth(smonth - 1);
sdt.setDate(1);
edt.setMonth(emonth);
edt.setDate(0);
} else {
$('#sdate').val('');
$('#edate').val('');
return;
}
var syear = sdt.getFullYear();
smonth = sdt.getMonth()+1;
smonth = ((smonth < 10) ? "0" + smonth : smonth);
sday = sdt.getDate();
sday = ((sday < 10) ? "0" + sday : sday);
var delimiter = "-";
if (dateFormat == "yymmdd") delimiter = "";
obj1.val(syear + delimiter + smonth + delimiter + sday);
var eyear = edt.getFullYear();
emonth = edt.getMonth()+1;
emonth = ((emonth < 10) ? "0" + emonth : emonth);
var eday = edt.getDate();
eday = ((eday < 10) ? "0" + eday : eday);
obj2.val(eyear + delimiter + emonth + delimiter + eday);
}
/**
* @type : function
* @access : public
* @desc : 입력 필드의 문자열 길이를 체크한다.
*
* cfnGetTextLength($('#msgContents'), 90, $('#dpLoc'));
*
* @param : obj - 입력필드 오브젝트
* @param : maxLen - 최대길이(bytes 수)
* @param : dpLoc - optional. 현재의 길이를 표시할 곳
* @return : None
* @since : 2019/07/22
* @author : gagamel
*/
var cfnGetTextLength = function(obj, maxLen, dpLoc) {
var valLen = $(obj).val().length;
var cByte = 0;
var sliceLen = 0;
for (i = 0; i < valLen; i++) {
var aChar = $(obj).val().charAt(i);
if (escape(aChar).length == 6) {
cByte += 3; //한글이면 3를 더한다
} else if (aChar == '\n') {
cByte += 2; //엔터면 2을 더한다
} else {
cByte++; //한글아니면 1을 더한다
}
if (cByte <= maxLen) {
sliceLen = i + 1;
}
}
// 사용자가 입력한 값이 제한 값을 초과하는지를 검사한다.
if (parseInt(cByte) > parseInt(maxLen)) {
mcxDialog.alert('허용된 글자수가 초과되었습니다.\n초과된 부분은 자동으로 삭제됩니다.');
//var orgStr = $(obj).val();
var slicedStr = $(obj).val().substr(0, sliceLen);
$(obj).val(slicedStr);
var cByte = 0;
for (i = 0; i < $(obj).val().length; i++) {
var aChar = $(obj).val().charAt(i);
if (escape(aChar).length == 6) {
cByte += 3; //한글이면 3를 더한다
} else if (aChar == '\n') {
cByte += 2; //엔터면 2을 더한다
} else {
cByte++; //한글아니면 1을 더한다
}
}
}
$(dpLoc).text(cByte.addComma());
}
/**
* @type : function
* @access : public
* @desc : 셀렉트박스 년도 설정
*
* cfnDateYearSetting('usacYear', 5);
*
* @param : elTarget - 셀렉트박스id
* @param : targetYear - +- 설정 년도
* @since : 2019/10/17
* @author : rladbwnd5
*/
var cfnDateYearSetting = function(elemetId,targetYear) {
var currentYear = (new Date()).getFullYear();
var optionHtml = "";
optionHtml += '';
for (var year = currentYear-targetYear; year <= currentYear+targetYear; year++) {
optionHtml += '\n';
}
$('#'+elemetId).append(optionHtml);
};
/**
* @type : function
* @access : public
* @desc : JQuery를 이용한 비동기 submit 처리
* 파라미터의 명칭은 쿼리문과 동일하게 작성해야 한다.
*
* var params = new Object();
* params.cmd = "getCodeDetailComboList";
* params.GROUP_CD = "G900";
* params.CODE = "0202";
*
* cfnAjaxSubmit("/renderer.do", "json", jfCallback, params);
*
* or
*
* cfnAjaxSubmit("/renderer.do", "json", jfCallback);
*
* @param : actionUrl - action url. 필수
* type - 처리결과 형식(text, html, xml, json). 필수
* callback - type이 text, xml, json 일 때는 콜백함수명
* type이 html일 때는 target명. 필수
* params - 파라미터 오브젝트. 옵션
* @return : None
* @since : 2014/10/14
* @author : gagamel
*/
var cfnAjaxSubmit = function(actionUrl, type, callback, params) {
if (!params) params = new Object();
$.post(actionUrl
, $.param(params)
, function(result) {
if (type == "html") {
if (!gagajf.isNull(callback))
$(document.getElementById(callback)).html(result);
$('.schDate').datepicker({
changeMonth: true,
changeYear: true,
defaultDate: $('.schDate').val()
});
} else {
// Callback 함수 호출
if (typeof(callback) == "function")
callback.call(this, result);
}
}
, type);
}
/**
* @type : function
* @access : public
* @desc : Form 객체를 가지고 JQuery를 이용한 비동기 Submit 처리
*
* cfnAjaxSubmitForm($('#formId'), "/base/rest/adminuser/create", "json", jfCreateAdminUserResult);
*
* 위와같이 사용했을 경우 true를 리턴한다.
* @param : formId - document form ID
* actionUrl - The URL to submit
* type - The data's type(text, html, xml, json, jsonp)
* callback - This attribute is optional.
* If type is 'html' then it is target's name when the result success.
* Otherwise it is function which calls when the result success.
* isDisabledEvent - This attribute is optional.
* If isDisabledEvent is true then you can not click all event.
* Otherwise you can click event.
* @author : gagamel
* @since : 2017/09/14
*/
var cfnAjaxSubmitForm = function(formId, actionUrl, type, callback, isDisabledEvent) {
var progressbarId;
if (type == "jsonp") {
$.ajax({
type : "POST",
url : actionUrl,
data : $(formId).serialize(),
dataType : type,
jsonp : "callback",
beforeSend : function(jqXHR, settings) {
if (isDisabledEvent) {
// Button disabled & progressBar show
progressbarId = "progressbar";
createProgressbar('body', progressbarId);
} else {
if (type == "html") {
// ProgressBar show
progressbarId = getUUID();
$('#' + progressbarId).remove();
createProgressbar('#' + callback, progressbarId);
}
}
},
complete : function() {
// ProgressBar remove
$('#' + progressbarId).remove();
},
success : function(result) {
if (typeof(callback) == "function")
callback.call(this, result);
},
error : function() {
alert("오류로 인해 처리되지 않았습니다.");
}
});
} else {
$.ajax({
type : "POST",
url : actionUrl,
data : $(formId).serialize(),
dataType : type,
beforeSend : function(jqXHR, settings) {
if (isDisabledEvent) {
// Button disabled & progressBar show
progressbarId = "progressbar";
createProgressbar('body', progressbarId);
} else {
if (type == "html") {
// ProgressBar show
progressbarId = getUUID();
$('#' + progressbarId).remove();
createProgressbar('#' + callback, progressbarId);
}
}
},
complete : function() {
// ProgressBar remove
$('#' + progressbarId).remove();
},
success : function(result) {
if (type == "html") {
if (!gagajf.isNull(callback))
$(document.getElementById(callback)).html(result);
} else {
// Callback 함수 호출
if (typeof(callback) == "function")
callback.call(this, result);
}
},
error : function() {
alert("오류로 인해 처리되지 않았습니다.");
}
});
}
}
/**
* @type : function
* @access : public
* @desc : 그리드 No 처리
*
* cfnGridNumner('searchForm', params.node.rowIndex, 'A');
*
* @param : formId - 화면 from id
* @param : idx - row idx
* @param : sortFlag - A : asc, D: desc
* @since : 2019/12/10
* @author : eskim
*/
var cfnGridNumner = function (formId, idx, sortFlag){
var result = idx;
var startRow = 0;
var pageNo = $('#'+formId).find('#pageNo').val().removeComma();
var pageSize = $('#'+formId).find('#pageSize').val().removeComma();
var totRowCnt = $('#'+formId).find('#gridRowTotalCount').text().removeComma();
if (typeof(sortFlag) == 'undefined' || sortFlag == "A"){
startRow = (Number(pageNo) - 1) * Number(pageSize);
result = (startRow + idx + 1)
}else{
startRow = (Number(pageNo) - 1) * Number(pageSize);
result = Number(totRowCnt) - (idx + startRow) ;
}
return result; //.addComma();
}
/**
* @type : function
* @access : public
* @desc : 샘플파일 다운로드
*
* cfnDownloadSampleFile('SF001');
*
* @param : sampleFileId - 샘플파일ID
* @since : 2019/12/26
* @author : rladbwnd5
*/
function cfnDownloadSampleFile(sampleFileId) {
$.get('/common/sample/file/' + sampleFileId
, function(result) {
if (gagajf.isNull(result)) {
mcxDialog.alert('다운로드 받을 파일이 존재하지 않습니다.');
return;
}
var str = '';
if ($('#aFileDownload').length == 0) {
$('body').append(str);
}
$('#aFileDownload').attr({
href : _sampleUrl + '/' + result
// href : '/src/main/webapp/files/data/csv/' + result
}).get(0).click();
});
}
/**
* @type : function
* @access : public
* @desc : 휴대폰 번호 자동 하이픈
* * cfnCellPhonnHypen(this); ** @param : obj - 입력필드 오브젝트 * @return : None * @since : 2019/03/13 * @author : jsshin */ function cfnCellPhonnHypen(obj) { //$(obj).val( $(obj).val().replace(/[^0-9]/g, '').replace(/(^0[0-9]{2})([0-9]+)?([0-9]{4})/, '$1-$2-$3').replace('--', '-') ); $(obj).val( $(obj).val().replace(/[^0-9]/g, "").replace(/(^02|^050[0-9]{1}|^1[0-9]{3}|^0[0-9]{2})([0-9]+)?([0-9]{4})$/,"$1-$2-$3").replace("--", "-") ); } var fnCalendarDateValidation = function(tgtId, dtFromId, dtToId) { var fromVal = Number($(tgtId+" #"+dtFromId).val().replace(/-/gi, '')); var toVal = Number($(tgtId+" #"+dtToId).val().replace(/-/gi, '')); var result = true; if(fromVal > toVal) { mcxDialog.alertC('시작일자가 종료일자보다 큽니다.',{ sureBtnText: "확인", sureBtnClick: function() { $(tgtId+" #"+dtFromId).focus(); } }); result = false; } return result; };