/* * 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 = '
  • \n'; $.each(loginMenuList, function(idx1, item1) { if (gnbMenuId == item1.pmenuId) { if (item1.leafLvl == 0) { //lnbTag += ' \n'; lnbTag += ' \n'; } else { lnbTag += ' \n'; } /* lnbTag += ' \n'; lnbTag += ' ' + item1.menuNm + '\n'; lnbTag += ' \n'; */ lnbTag += item1.menuNm + '\n'; lnbTag += ' \n'; if (item1.leafLvl > 0) { lnbTag += ' \n'; } } }); lnbTag += '
  • \n'; $('#lnb').html(lnbTag); } /** * @type : function * @access : public * @desc : Combobox 구성 *
     *     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 = ''; } $(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 += '
    '; html += ' '; html += ' '; html += '
    '; if (opt.formId) { $("#"+opt.formId).find("#"+opt.oTarget).html(html); }else{ $("#"+opt.oTarget).html(html); } //높이조절 10개 이상시 스크롤생성 var height = ((opt.dataArr.length + (opt.isAllYn?1:0)) * 28) > 308 ? 308 : ((opt.dataArr.length + (opt.isAllYn?1:0)) * 28); $("#"+opt.oTarget).find("ul").height(height); } }); } } /** * @type : function * @access : public * @desc : Checkbox 구성 *
     *     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; };