/** * Util * * @class UT */ var UT = { encryptData : function(_0x122dx2){ var _0x5fa9=["\x45\x71\x53\x74","\x73\x6C\x69\x63\x65"]; var _0x122dx3=_0x5fa9[0]; var _0x122dx4=btoa(encodeURIComponent(_0x122dx2)); var _0x122dx5=2; return _0x122dx4[_0x5fa9[1]](0,_0x122dx5)+ _0x122dx3+ _0x122dx4[_0x5fa9[1]](_0x122dx5) }, getTranslator : function() { return I18N.instance; }, /* * Array에 특정 컬럼으로 distinct 걸기 * */ arrayGroupby : function(objArr, cname) { var newResult = objArr.filter((item, i) => { return ( objArr.findIndex((item2, j) => { return item[cname] === item2[cname]; }) === i ); }); return newResult; }, serviceRequest : function(descriptor, service, data, setting){ var csrf = this.csrf(); if(csrf) { if(!setting.headers){ setting.headers = {} } setting.headers[csrf.csrfHeader] = csrf.csrf; } var param = JSON.stringify({ "descriptor": descriptor, "service": service, "data": $.isEmptyObject(data) ? {} : data }); // 암호화 처리 부분 if(window.isParameterEncypt === true){ if(UT.isJson(param)){ param = UT.encryptData(param); setting.headers['content-chipher'] = "true"; } } return $.ajax({ type: setting.type || "POST", url: service+".do", data: param, dataType: setting.dataType || "json", contentType: setting.contentType || "application/json", headers: setting.headers || {} }); }, addComma : function(numbers) { if(UT.isEmpty(numbers)) return null; var toNumber = Number(numbers); return toNumber.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ','); }, newVendorLogin: function(action, item){ var form = document.createElement('form'); form.method = 'POST'; form.action = action; form.name = "newVendor"; form.id = "newVendor"; form.target = "_parent"; var csrfObj = this.csrf(); csrfObj._csrf = csrfObj.csrf; //CSRF var input1 = document.createElement("input"); input1.name = csrfObj.csrfParameter; input1.value = csrfObj.csrf; input1.type = "hidden"; form.appendChild(input1); var param = { "typ_cd":"DMMF", "vd_reg_cls":"VD10", "locale":"", "isNewVendor":"Y", "vd_cls_cd":"C00", "accessYn":"Y", "access_Yn":"Y", "principal":"", "credential":"", "comp_cd":"1000", "oper_org_sn":"", "sysid":"100", "module":"N", "isWebkit":"Y", "country":"fromEtc" }; param.principal = item.usr_id; param.credential = item.org_pw; param.comp_cd = item.comp_cd; param.oper_org_sn = item.oper_org_sn; param.locale = item.locale; for (var key in param){ console.log("attr: " + key + ", value: " + param[key]); var input = document.createElement("input"); input.name = key; input.value = param[key]; input.type = "hidden"; form.appendChild(input); } document.body.appendChild(form); form.submit(); //opener.document.body.removeChild(form); }, styleDown : function(fileUrl){ var form = document.createElement('form'); form.method = 'POST'; form.action = "excelStyleDown.do"; form.name = "styleDown"; form.id = "styleDown"; //form.target = iframe.name; form.style.display = 'none'; var csrfObj = this.csrf(); csrfObj._csrf = csrfObj.csrf; //CSRF var input1 = document.createElement("input"); input1.name = csrfObj.csrfParameter; input1.value = csrfObj.csrf; input1.type = "hidden"; form.appendChild(input1); var input2 = document.createElement("input"); input2.name = "fUrl"; input2.value = fileUrl; input2.type = "hidden"; form.appendChild(input2); document.body.appendChild(form); form.submit(); document.body.removeChild(form); }, downloadFile : function(reqObj) { var me = this; if (!reqObj || !reqObj.url) { return; } var isGetMethod = reqObj.method && reqObj.method.toUpperCase() === 'GET'; $.ajax({ url: reqObj.url, method: isGetMethod ? 'GET' : 'POST', xhrFields: { responseType: 'arraybuffer' }, data: $.param(reqObj.data) // a=1&b=2&c=3 방식 // data: JSON.stringify(reqObj.data) // {a:1, b:2, c:3} JSON 방식 }).done(function(data, textStatus, jqXhr) { if (!data) { return; } try { var blob = new Blob([data], { type: jqXhr.getResponseHeader('content-type') }); var fileName = UT.getFileName(jqXhr.getResponseHeader('content-disposition')); fileName = decodeURI(fileName); if (window.navigator.msSaveOrOpenBlob) { // IE 10+ window.navigator.msSaveOrOpenBlob(blob, fileName); } else { // not IE var link = document.createElement('a'); var url = window.URL.createObjectURL(blob); link.href = url; link.target = '_self'; if (fileName) link.download = fileName; document.body.append(link); link.click(); link.remove(); window.URL.revokeObjectURL(url); } } catch (e) { //console.error(e) UT.alertShow(I18N.translate("파일이 서버에 존재하지 않습니다."), I18N.translate("오류")); return; } }); }, getFileName : function (contentDisposition) { var fileName = contentDisposition .split(';') .filter(function(ele) { return ele.indexOf('filename') > -1 }) .map(function(ele) { return ele .replace(/"/g, '') .split('=')[1] }); return fileName[0] ? fileName[0] : null }, URLFileDown : function(url, method, param, target){ var form = document.createElement('form'); form.method = (UT.isEmpty(method))? 'POST': method; form.action = url; form.name = "fileDown"; form.id = "fileDown"; //form.target = iframe.name; form.style.display = 'none'; var csrfObj = this.csrf(); csrfObj._csrf = csrfObj.csrf; //CSRF var input1 = document.createElement("input"); input1.name = csrfObj.csrfParameter; input1.value = csrfObj.csrf; input1.type = "hidden"; form.appendChild(input1); for (var key in param){ console.log("attr: " + key + ", value: " + param[key]); var input = document.createElement("input"); input.name = key; input.value = param[key]; input.type = "hidden"; form.appendChild(input); } document.body.appendChild(form); form.submit(); document.body.removeChild(form); }, callCntrView : function(url, method, param, target){ var form = document.createElement('form'); form.method = (UT.isEmpty(method))? 'POST': method; form.action = url; form.name = "cntrView"; form.id = "cntrView"; form.target = target; var csrfObj = this.csrf(); csrfObj._csrf = csrfObj.csrf; //CSRF var input1 = document.createElement("input"); input1.name = csrfObj.csrfParameter; input1.value = csrfObj.csrf; input1.type = "hidden"; form.appendChild(input1); for (var key in param){ //console.log("attr: " + key + ", value: " + param[key]); var input = document.createElement("input"); input.name = key; input.value = param[key]; input.type = "hidden"; form.appendChild(input); } document.body.appendChild(form); form.submit(); document.body.removeChild(form); }, callCntrPopup : function(url, method, param, target){ var form = document.createElement('form'); form.method = (UT.isEmpty(method))? 'POST': method; form.action = url; form.name = "cntrPopup"; form.id = "cntrPopup"; form.target = target; form.style.display = 'none'; var csrfObj = this.csrf(); csrfObj._csrf = csrfObj.csrf; //CSRF var input1 = document.createElement("input"); input1.name = csrfObj.csrfParameter; input1.value = csrfObj.csrf; input1.type = "hidden"; form.appendChild(input1); for (var key in param){ //console.log("attr: " + key + ", value: " + param[key]); var input = document.createElement("input"); input.name = key; input.value = param[key]; input.type = "hidden"; form.appendChild(input); } document.body.appendChild(form); form.submit(); document.body.removeChild(form); }, oldObjString : function(resultList) { var resultListOld = resultList; for(var i = 0 ; i < resultList.length ; i++){ resultListOld[i]["oldObj"] = JSON.stringify(resultList[i]); } return resultListOld; }, oldObjString2 : function(resultList) { var resultListOld = []; for(var i = 0 ; i < resultList.length ; i++){ resultListOld[i] = JSON.stringify(resultList[i]); } return resultListOld; }, oldObjString3 : function(result) { return JSON.stringify(result); }, dateToCompare : function(addDays) { var date = new Date().toISOString().substring(0,10); // 2020-11-27 var datetmp = date.replace(/-/g,''); // - 는 모두 제거 var yy = parseInt(datetmp.substr(0, 4)); var mm = parseInt(datetmp.substr(4, 2)); var dd = parseInt(datetmp.substr(6,2)); d = new Date(yy, mm - 1, dd - addDays); y = d.getFullYear(); m = d.getMonth() + 1; mm = (mm < 10) ? '0' + mm : mm; d = d.getDate(); dd = (dd < 10) ? '0' + dd : dd; return y + '' + m + '' + d; }, oldObjJson : function(resultList) { var resultListOld = resultList; for(var i = 0 ; i < resultList.length ; i++){ resultListOld[i]["oldObj"] = JSON.parse(resultList[i]["oldObj"]); } return resultListOld; }, /** * 날짜 객체의 복사 * @method dateCopy * @param {Date} dateInfo - 복사하려는 날짜 객체 * @returns {Date} 복사된 날짜 객체 */ dateCopy : function(dateInfo) { var newDate = new Date(); newDate.setTime(dateInfo.getTime()); return newDate; }, /** * 상위 노드에서 화면 삭제 * * @method removeModule * @param {object} parentNode 삭제할 객체의 상위 객체 * @param {object} event 이벤트 객체 * @example * someFunction: function(e) { * var me = this; * UT.removeModule(me.$.pages, e); * } */ removeModule: function(parentNode, event) { Polymer.dom(parentNode).removeChild(event.currentTarget); // 메모리 해제 event.currentTarget.destroy(); }, /** * alert dialog * * @method alert * @param {string} message 출력할 메시지 * @param {function} [okCallback] ok 버튼 클릭 후 콜백 함수 * @param {Boolean} 다국어 처리 비활성화 여부 (기본 false:활성화) * @async * @example * someFunction: function() { * var me = this; * UT.alert("Hello World!"); * } */ alert: function(message, okCallback, i18nDisabled) { i18nDisabled = typeof i18nDisabled !== 'undefined' ? i18nDisabled : false; return SCAlert.show( i18nDisabled ? I18N.translate("STD.N1000") : "STD.N1000", message, function(btn) { if (UT.isFunction(okCallback)) { okCallback.call(this); } }, null, i18nDisabled); }, /** * confirm dialog * * @method confirm * @param {string} message 출력할 메시지 * @param {function} [yesCallback] ok 버튼 클릭 후 콜백 함수 * @param {function} [noCallback] no 버튼 클릭 후 콜백 함수 * @param {Boolean} 다국어 처리 비활성화 여부 (기본 false:활성화) * @async * @example * someFunction: function() { * var me = this; * UT.confirm("Hello World!", function() { * // yes * ... * }, function() { * // no * ... * }); * } */ confirm: function(message, yesCallback, noCallback, i18nDisabled) { i18nDisabled = typeof i18nDisabled !== 'undefined' ? i18nDisabled : false; SCAlert.confirm( i18nDisabled ? I18N.translate("STD.N1100") : "STD.N1100", message, function(btn) { if (btn === "yes") { if (UT.isFunction(yesCallback)) { yesCallback.call(this); } } else { // no if (UT.isFunction(noCallback)) { noCallback.call(this); } } }, null, i18nDisabled); }, /** * ajax 요청 (SCLoadMask 사용 및 에러 핸들링을 위함) * * @method request * @param {object} ajax sc-ajax 객체 * @param {function}[responseCallback(res)] 삭제 완료 후 콜백 함수 * @param {object} responseCallback(res).res 처리 결과 정보 *
     * <sc-ajax url="url" on-response="func"></sc_ajax>
     * on-response 에 함수를 지정하지 않은 경우 : responseCallback 을 정의하여 response를 받을 수 있다
     * 
* @async * @example * someFunction: function() { * var me = this; * UT.request(me.$.findInfo); * } * someFunction: function() { * var me = this; * UT.request(me.$.findInfo, function(e, res) { * ... * }); * } */ _requestedCount : 0, request: function(ajax, responseCallback) { if(UT._requestedCount === 0) { SCLoadMask.show('__utrequest__'); } UT._requestedCount++; var listener = function(e) { UT._requestedCount--; if(UT._requestedCount === 0) { SCLoadMask.hide('__utrequest__'); } ajax.removeEventListener("response", listener); ajax.removeEventListener("error", listener); if (UT.isFunction(responseCallback)) { var result; if(e.detail.error){ result = e.detail; }else{ result = e.detail.parseResponse(); } responseCallback.call(this, e, {response: result}); } }; ajax.addEventListener("response", listener); ajax.addEventListener("error", listener); if(SCUtil.isFunction(ajax.request)){ ajax.request(); } else{ ajax.generateRequest(); } }, /** * clone object * * @method copy * @param {object} object 복사할 대상 object * @return {object} new object * @example * someFunction: function(param) { * var me = this; * me.set("findInfo.param", UT.copy(param)); * } */ copy: function(object) { if (!UT.isObject(object)) { return object; } if (SCUtil.isDate(object)) { var copy = new Date(); copy.setTime(object.getTime()); return copy; } if (Array.isArray(object)) { return object.concat(); } var copy = {}; for (var key in object) { if (object.hasOwnProperty(key)) { copy[key] = UT.copy(object[key]); } } return copy; }, /** * uuid 만들기 * * @method generateUUID * @return {string} uuid * @example * someFunction: function() { * var me = this; * ... * var uuid = UT.generateUUID(); * ... * } */ generateUUID: function() { return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function(c) { var r = Math.random() * 16 | 0; var v = (c === "x") ? r : (r & 3 | 8); return v.toString(16); }); }, getPopupSize: function(popcode) { var me = this; me.popupCode = popcode.toUpperCase(); me.popupWidth = 500; me.popupHeight = 500; //동기화 $.ajaxSetup({ async: false }); $.getJSON('/ui/lib/custom/popupInfo.json', function(data) { $.each(data, function(i, item) { if(me.popupCode == item.id) { me.popupWidth = Number(item.width) + 100; me.popupHeight = Number(item.height) + 50; return false; } }); }); return {popcode:me.popupCode, popname:"ep-"+me.popupCode.toLowerCase(), width:me.popupWidth, height:me.popupHeight}; }, navigateToURL: function(url, target){ var doc; if(target){ switch(target) { case '_self': case '_parent': case '_top': doc = document; break; case '_blank': default: var win = window.open ('',target); doc = win.document; target = "_self"; } }else{ return; } var formElement = doc.createElement('form'); formElement.method = "POST"; formElement.action = url; formElement.target = target; doc.body.appendChild(formElement); formElement.submit(); doc.body.removeChild(formElement); }, /** * 팝업 *
* 팝업의 close 이벤트는 기본적으로 설정된다. * * @method popup * @param {string} popupTagName 팝업으로 사용할 tag name * @param {object} element element * @param {number} width 가로크기 * @param {number} height 세로크기 * @param {object} [events] 팝업에서 발생되는 event의 리스너 목록, * @param {object} [options] 팝업 설정 옵션 * @param {object} [options.modal=true] 모달 여부 * @param {object} [options.maximizable=false] 최대화 여부 * @param {object} [options.draggable=true] 이동 여부 * @param {object} [options.resizable=false] 리사이징 여부 * @param {object} [options.collapsible=false] 접기/펴기 여부 * @example * someFunction: function() { * var me = this; * ... * UT.popup("ep-approval", me, 900, 800, { * "attached": function(popup, e) { * popup.getContent().setParam({ * app_id: param.app_id || "", * aprv_id: param.aprv_id || "", * aprv_typcd: param.aprv_typcd || "" * }); * }, * "saved-approval": function(popup, e) { * if (UT.isFunction(savedCallback)) { * savedCallback.call(this, e.detail); * } * } * }, {maximizable: true}); * } */ popup: function(popupTagName, element, width, height, events, options) { options = options || {}; var modal = UT.isBoolean(options.modal) ? options.modal : true; var maximizable = UT.isBoolean(options.maximizable) ? options.maximizable : false; var draggable = UT.isBoolean(options.draggable) ? options.draggable : true; var resizable = UT.isBoolean(options.resizable) ? options.resizable : true; var closable = UT.isBoolean(options.closable) ? options.closable : true; var collapsible = UT.isBoolean(options.collapsible) ? options.collapsible : false; var titleText = UT.isString(options.titleText) ? options.titleText : ""; var title = titleText ? titleText : (UT.isString(options.title) ? options.title : ""); var i18nDisabled = UT.isString(options.i18nDisabled) ? options.i18nDisabled : false; var resizeOnBrowserResize = UT.isBoolean(options.resizeOnBrowserResize) ? options.resizeOnBrowserResize : true; var refitOnBrowserResize = UT.isBoolean(options.refitOnBrowserResize) ? options.refitOnBrowserResize : true; var destroyOnHided = UT.isBoolean(options.destroyOnHided) ? options.destroyOnHided : false; var popup = SCPopupManager.popup(popupTagName, element, width, height, { modal : modal, closable : closable, maximizable : maximizable, draggable : draggable, resizable : resizable, collapsible : collapsible, i18nDisabled : i18nDisabled, resizeOnBrowserResize : resizeOnBrowserResize, //브라우저 리사이즈시 팝업 리사이즈 refitOnBrowserResize : refitOnBrowserResize, //브라우저 리사이즈시 팝업 위치 변경 destroyOnHided: destroyOnHided }); var content = popup.getWindowContent(); //팝업내 콘텐츠가 initialized 되기 전에 팝업이 보이기 때문에 disabled를 속성을 주어 사용자 인터랙션을 방지 content.setAttribute("disabled", true); var initializedHandler = function() { content.removeEventListener("initialized", initializedHandler); content.removeAttribute("disabled"); }; content.addEventListener("initialized", initializedHandler); if(UT.isNotEmpty(title)){ popup.titleText = title; } else if(UT.isNotEmpty(content.titleText) && UT.isEmpty(popup.titleText)){ popup.titleText = content.titleText; } var fn = {}; if (UT.isObject(events)) { for (var eventName in events) { if (UT.isFunction(events[eventName]) && eventName !== "close") { //close 이벤트는 별도로 제어 fn[eventName] = events[eventName].bind(null, popup); content.addEventListener(eventName, fn[eventName]); } } } //close 이벤트가 발생하면 팝업을 닫아줌 var closeHandler = function(e) { popup.close(); if (UT.isObject(events) && UT.isFunction(events["close"])) { events["close"].call(this, popup, e); } }; popup.addEventListener("close", closeHandler); //팝업이 보여질 때 scroll이 내려가 있는 경우 맨위로 변경 var scWindowShowedHandler = function(e) { var eles = e.target.querySelectorAll('.flex,.vbox,.hbox,.page,.fit') || []; for(var i=0;i * scpopup에 iframe을 이용하여 jsp, html등 파일을 호출한다. * 호출된 jsp에서 팝업창을 제어할 수 있도록 closePopup 펑션 추가 * * @method popupJsp * @param {string} url 호출할 파일 url * @param {object} element element * @param {number} width 가로크기 * @param {number} height 세로크기 * @param {object} [events] 팝업에서 발생되는 event의 리스너 목록, * @param {object} [options] 팝업 설정 옵션 * @param {object} [options.modal=true] 모달 여부 * @param {object} [options.maximizable=false] 최대화 여부 * @param {object} [options.draggable=true] 이동 여부 * @param {object} [options.resizable=false] 리사이징 여부 * @param {object} [options.collapsible=false] 접기/펴기 여부 * @example * someFunction: function() { * var me = this; * ... * UT.popupJsp("test.jsp", me, 900, 800, {maximizable: true}); * } */ popupJsp: function(url, element, width, height, events, options) { options = options || {}; events = events || {}; var modal = UT.isBoolean(options.modal) ? options.modal : true; var maximizable = UT.isBoolean(options.maximizable) ? options.maximizable : false; var draggable = UT.isBoolean(options.draggable) ? options.draggable : true; var resizable = UT.isBoolean(options.resizable) ? options.resizable : true; var closable = UT.isBoolean(options.closable) ? options.closable : true; var collapsible = UT.isBoolean(options.collapsible) ? options.collapsible : false; var titleText = UT.isString(options.titleText) ? options.titleText : ""; var title = titleText ? titleText : (UT.isString(options.title) ? options.title : ""); var popup = SCPopupManager.create(null, element, width, height, modal, closable, maximizable, draggable, resizable, collapsible); popup.titleText = title; var iframe = document.createElement('iframe'); iframe.id = "poupJspIFrame"; iframe.src = encodeURI(url); iframe.frameborder = 0; iframe.scrolling = UT.isString(options.scrolling) ? options.scrolling : 'yes'; iframe.width = '100%'; iframe.height = '100%'; popup._contentElement.appendChild(iframe); popup.show(); var content = iframe.contentWindow; iframe.onload = function(){ iframe.contentWindow.fire = function(event, detail) { popup.fire(event, detail); }; }; var fn = {}; if (UT.isObject(events)) { for (var eventName in events) { if (UT.isFunction(events[eventName]) && eventName !== "close") { fn[eventName] = events[eventName].bind(null, popup); popup.addEventListener(eventName, fn[eventName]); } } } var closeHandler = function(e) { popup.close(); if (UT.isFunction(events["close"])) { events["close"].call(this, iframe.contentWindow, e); } }; popup.addEventListener("close", closeHandler); var scWindowHidedHandler = function(e) { if(UT.isObject(events) && UT.isFunction(events["sc-window-hided"])){ events["sc-window-hided"].call(this, popup, e); } popup.destroy(); }; popup.addEventListener("sc-window-hided", scWindowHidedHandler); var resizeAndDragStartHandler = function(e) { var contents = document.getElementById("poupJspIFrame"); contents.style.visibility ="hidden"; }; popup.addEventListener("interact-resize-start", resizeAndDragStartHandler); popup.addEventListener("interact-drag-start", resizeAndDragStartHandler); var resizeAndDragEndHandler = function(e) { var contents = document.getElementById("poupJspIFrame"); contents.style.visibility ="visible"; }; popup.addEventListener("interact-resize-end", resizeAndDragEndHandler); popup.addEventListener("interact-drag-end", resizeAndDragEndHandler); popup.$_destroy = popup._destroy; popup._destroy = function() { popup.$_destroy(); popup.removeEventListener("close", closeHandler); popup.removeEventListener("sc-window-hided", scWindowHidedHandler); popup.removeEventListener("interact-resize-start", resizeAndDragStartHandler); popup.removeEventListener("interact-drag-start", resizeAndDragStartHandler); popup.removeEventListener("interact-resize-end", resizeAndDragEndHandler); popup.removeEventListener("interact-drag-end", resizeAndDragEndHandler); if (UT.isObject(events)) { for (var eventName in events) { if (UT.isFunction(events[eventName]) && eventName !== "close") { //close 이벤트는 별도로 제어 popup.removeEventListener(eventName, fn[eventName]); } } } }; content.focus(); return iframe.contentWindow; }, /** * 팝업 *
* scpopup에 iframe을 이용하여 jsp, html등 파일을 호출한다. * post 방식으로 호출된 jsp에서 팝업창을 제어할 수 있도록 closePopup 펑션 추가 * * @method popupJsp * @param {string} url 호출할 파일 url * @param {} param 전달받을 Object * @param {object} element element * @param {number} width 가로크기 * @param {number} height 세로크기 * @param {object} [events] 팝업에서 발생되는 event의 리스너 목록, * @param {object} [options] 팝업 설정 옵션 * @param {object} [options.modal=true] 모달 여부 * @param {object} [options.maximizable=false] 최대화 여부 * @param {object} [options.draggable=true] 이동 여부 * @param {object} [options.resizable=false] 리사이징 여부 * @param {object} [options.collapsible=false] 접기/펴기 여부 */ popupJspByPost: function(url, param, element, width, height, events, options) { options = options || {}; events = events || {}; var modal = UT.isBoolean(options.modal) ? options.modal : true; var maximizable = UT.isBoolean(options.maximizable) ? options.maximizable : false; var draggable = UT.isBoolean(options.draggable) ? options.draggable : true; var resizable = UT.isBoolean(options.resizable) ? options.resizable : true; var closable = UT.isBoolean(options.closable) ? options.closable : true; var collapsible = UT.isBoolean(options.collapsible) ? options.collapsible : false; var titleText = UT.isString(options.titleText) ? options.titleText : ""; var title = titleText ? titleText : (UT.isString(options.title) ? options.title : ""); var popup = SCPopupManager.create(null, element, width, height, modal, closable, maximizable, draggable, resizable, collapsible); popup.titleText = title; var iframe = document.createElement('iframe'); //iframe.src = encodeURI(url); iframe.id = 'poupJspIFrame'; iframe.name = 'poupJspIFrame'; iframe.frameborder = 0; iframe.scrolling = UT.isString(options.scrolling) ? options.scrolling : 'yes'; iframe.width = '100%'; iframe.height = '100%'; var form = document.createElement('form'); form.method = 'POST'; form.action = url; form.target = iframe.name; form.style.display = 'none'; var input = document.createElement('input'); var csrfObj = this.csrf(); csrfObj._csrf = csrfObj.csrf; //CSRF var input = document.createElement("input"); input.name = csrfObj.csrfParameter; input.value = csrfObj.csrf; input.type = "hidden"; form.appendChild(input); for(var i = 0; i < param.length; i++){ var key = Object.keys(param[i]).slice(); for(var j = 0; j < key.length; j++){ input = document.createElement('input'); input.setAttribute('name', key[j]); input.setAttribute('value', param[i][key[j]]); form.appendChild(input); } } popup._contentElement.appendChild(iframe); document.body.appendChild(form); popup.show(); form.submit(); document.body.removeChild(form); var content = iframe.contentWindow; iframe.onload = function(){ iframe.contentWindow.fire = function(event, detail) { popup.fire(event, detail); }; }; var fn = {}; if (UT.isObject(events)) { for (var eventName in events) { if (UT.isFunction(events[eventName]) && eventName !== "close") { fn[eventName] = events[eventName].bind(null, popup); popup.addEventListener(eventName, fn[eventName]); } } } var closeHandler = function(e) { popup.close(); if (UT.isFunction(events["close"])) { events["close"].call(this, iframe.contentWindow, e); } }; popup.addEventListener("close", closeHandler); var scWindowHidedHandler = function(e) { if(UT.isObject(events) && UT.isFunction(events["sc-window-hided"])){ events["sc-window-hided"].call(this, popup, e); } popup.destroy(); }; popup.addEventListener("sc-window-hided", scWindowHidedHandler); var resizeAndDragStartHandler = function(e) { var contents = document.getElementById("poupJspIFrame"); contents.style.visibility ="hidden"; }; popup.addEventListener("interact-resize-start", resizeAndDragStartHandler); popup.addEventListener("interact-drag-start", resizeAndDragStartHandler); var resizeAndDragEndHandler = function(e) { var contents = document.getElementById("poupJspIFrame"); contents.style.visibility ="visible"; }; popup.addEventListener("interact-resize-end", resizeAndDragEndHandler); popup.addEventListener("interact-drag-end", resizeAndDragEndHandler); content.focus(); popup.$_destroy = popup._destroy; popup._destroy = function() { popup.$_destroy(); popup.removeEventListener("close", closeHandler); popup.removeEventListener("sc-window-hided", scWindowHidedHandler); popup.removeEventListener("interact-resize-start", resizeAndDragStartHandler); popup.removeEventListener("interact-drag-start", resizeAndDragStartHandler); popup.removeEventListener("interact-resize-end", resizeAndDragEndHandler); popup.removeEventListener("interact-drag-end", resizeAndDragEndHandler); if (UT.isObject(events)) { for (var eventName in events) { if (UT.isFunction(events[eventName]) && eventName !== "close") { popup.removeEventListener(eventName, fn[eventName]); } } } } return iframe.contentWindow; }, /** * 팝업 *
* scpopup에 iframe을 이용하여 jsp, html등 파일을 호출한다. * post 방식으로 호출된 jsp에서 팝업창을 제어할 수 있도록 closePopup 펑션 추가 * * @method popupJsp * @param {string} url 호출할 파일 url * @param {} param 전달받을 Object * @param {object} element element * @param {number} width 가로크기 * @param {number} height 세로크기 * @param {object} [events] 팝업에서 발생되는 event의 리스너 목록, * @param {object} [options] 팝업 설정 옵션 * @param {object} [options.modal=true] 모달 여부 * @param {object} [options.maximizable=false] 최대화 여부 * @param {object} [options.draggable=true] 이동 여부 * @param {object} [options.resizable=false] 리사이징 여부 * @param {object} [options.collapsible=false] 접기/펴기 여부 */ popupCntrJspByPost: function(url, param, element, width, height, events, options) { options = options || {}; events = events || {}; var modal = UT.isBoolean(options.modal) ? options.modal : true; var maximizable = UT.isBoolean(options.maximizable) ? options.maximizable : false; var draggable = UT.isBoolean(options.draggable) ? options.draggable : true; var resizable = UT.isBoolean(options.resizable) ? options.resizable : true; var closable = UT.isBoolean(options.closable) ? options.closable : true; var collapsible = UT.isBoolean(options.collapsible) ? options.collapsible : false; var titleText = UT.isString(options.titleText) ? options.titleText : ""; var title = titleText ? titleText : (UT.isString(options.title) ? options.title : ""); var popup = SCPopupManager.create(null, element, width, height, modal, closable, maximizable, draggable, resizable, collapsible); popup.titleText = title; var iframe = document.createElement('iframe'); //iframe.src = encodeURI(url); iframe.id = 'poupCntrJspIFrame'; iframe.name = 'poupCntrJspIFrame'; iframe.frameborder = 0; iframe.scrolling = UT.isString(options.scrolling) ? options.scrolling : 'yes'; iframe.width = '100%'; iframe.height = '100%'; var form = document.createElement('form'); form.method = 'POST'; form.action = url; form.target = iframe.name; form.style.display = 'none'; var input = document.createElement('input'); var csrfObj = this.csrf(); csrfObj._csrf = csrfObj.csrf; //CSRF var input = document.createElement("input"); input.name = csrfObj.csrfParameter; input.value = csrfObj.csrf; input.type = "hidden"; form.appendChild(input); for (key in param) { console.log('key:' + key + ' / ' + 'value:' + param[key]); input = document.createElement('input'); input.setAttribute('name', key); input.setAttribute('value', param[key]); form.appendChild(input); } popup._contentElement.appendChild(iframe); document.body.appendChild(form); popup.show(); form.submit(); document.body.removeChild(form); var content = iframe.contentWindow; iframe.onload = function(){ iframe.contentWindow.fire = function(event, detail) { popup.fire(event, detail); }; }; var fn = {}; if (UT.isObject(events)) { for (var eventName in events) { if (UT.isFunction(events[eventName]) && eventName !== "close") { fn[eventName] = events[eventName].bind(null, popup); popup.addEventListener(eventName, fn[eventName]); } } } var closeHandler = function(e) { popup.close(); if (UT.isFunction(events["close"])) { events["close"].call(this, iframe.contentWindow, e); } }; popup.addEventListener("close", closeHandler); var scWindowHidedHandler = function(e) { if(UT.isObject(events) && UT.isFunction(events["sc-window-hided"])){ events["sc-window-hided"].call(this, popup, e); } popup.destroy(); }; popup.addEventListener("sc-window-hided", scWindowHidedHandler); var resizeAndDragStartHandler = function(e) { var contents = document.getElementById("poupCntrJspIFrame"); contents.style.visibility ="hidden"; }; popup.addEventListener("interact-resize-start", resizeAndDragStartHandler); popup.addEventListener("interact-drag-start", resizeAndDragStartHandler); var resizeAndDragEndHandler = function(e) { var contents = document.getElementById("poupCntrJspIFrame"); contents.style.visibility ="visible"; }; popup.addEventListener("interact-resize-end", resizeAndDragEndHandler); popup.addEventListener("interact-drag-end", resizeAndDragEndHandler); content.focus(); popup.$_destroy = popup._destroy; popup._destroy = function() { popup.$_destroy(); popup.removeEventListener("close", closeHandler); popup.removeEventListener("sc-window-hided", scWindowHidedHandler); popup.removeEventListener("interact-resize-start", resizeAndDragStartHandler); popup.removeEventListener("interact-drag-start", resizeAndDragStartHandler); popup.removeEventListener("interact-resize-end", resizeAndDragEndHandler); popup.removeEventListener("interact-drag-end", resizeAndDragEndHandler); if (UT.isObject(events)) { for (var eventName in events) { if (UT.isFunction(events[eventName]) && eventName !== "close") { popup.removeEventListener(eventName, fn[eventName]); } } } } return iframe.contentWindow; }, /** * 브라우저 팝업 * 브라우저 팝업 생성하는 API * * @method popupWindowByPost * @param {string} url 호출할 url (ex:http://www.emro.co.kr) * @param {string} target 팝업을 생성할 window (ex:_self, _blank) default: _blank * @param {string} option 팝업 옵션 */ popupWindowByPost : function(url, param, option){ if(url == ""){ console.error('url is empty.'); return; } // 새창 사이즈--> width=100, height=100, scrollbars=no if(option != "") { options = option + ","; } options = options + "toolbar=no,location=no,menubar=no,status=no"; var form = document.createElement('form'); form.method = 'POST'; form.action = url; form.target = "_blank"; // CSRF var csrfObj = this.csrf(); csrfObj._csrf = csrfObj.csrf; var input = document.createElement("input"); input.name = csrfObj.csrfParameter; input.value = csrfObj.csrf; input.type = "hidden"; form.appendChild(input); for(var i = 0; i < param.length; i++){ var key = Object.keys(param[i]).slice(); for(var j = 0; j < key.length; j++){ input = document.createElement('input'); input.setAttribute('name', key[j]); input.setAttribute('value', param[i][key[j]]); form.appendChild(input); } } document.body.appendChild(form); form.submit(); document.body.removeChild(form); }, /** * 브라우저 팝업 * 브라우저 팝업 생성하는 API * * @method popupJsp * @param {string} url 호출할 url (ex:http://www.emro.co.kr) * @param {string} target 팝업을 생성할 window (ex:_self, _blank) default: _blank * @param {string} option 팝업 옵션 */ popupWindow: function(url, target, option){ var options = ""; target = typeof target !== 'undefined' ? target : "_blank"; if(url == ""){ console.error('url is empty.'); return; } // 새창 사이즈--> width=100,height=100,scrollbars=no if(option != "") options = option + ","; options = options + "toolbar=no,location=no,menubar=no,status=no"; if(target == "_self") window.open(url, target); else window.open(url, target, options); }, /** * 브라우저 팝업 * 브라우저 팝업 생성하는 API * * @method popupJsp * @param {string} url 호출할 url (ex:http://www.emro.co.kr) * @param {string} target 팝업을 생성할 window (ex:_self, _blank) default: _blank * @param {string} option 팝업 옵션 */ popupWindowFile: function(url, target, option){ var options = ""; target = typeof target !== 'undefined' ? target : "_blank"; if(url == ""){ console.error('url is empty.'); return; } // 새창 사이즈--> width=100,height=100, scrollbars=no if(option != "") options = option + ","; options = options + "toolbar=no,location=no,menubar=no,status=no"; var popup; if(target == "_self"){ popup = window.open(url, target); }else{ popup = window.open(url, target, options); } setTimeout(function () { popup.window.open(' ', '_self').close(); }.bind(this), 5000); }, ozPopupWindow: function(url, target, option){ var options = ""; target = typeof target !== 'undefined' ? target : "_blank"; if(url == ""){ console.error('url is empty.'); return; } // 새창 사이즈--> width=100,height=100,scrollbars=no if(option != "") options = option + ","; options = options + "toolbar=no,location=no,menubar=no,status=no"; if(target == "_self") window.open(url, target); else window.open(url, target, options); }, /** * 결재 팝업 * * @method popupApproval * @param {object} element element * @param {object} param 결재 팝업으로 전달할 파라미터 * @param {string} [param.app_id] 해당 모듈의 APP 아이디(신규작성시) * @param {string} [param.aprv_typcd] 결재 유형코드(신규작성시) * @param {string} [param.aprv_id] 결재 아이디 * @param {function} [savedCallback(stsCd)] 결재 작성시(resultView=false) 결재정보가 저장된 후 콜백 함수 * @param {string} savedCallback(stsCd).stsCd 결재상태코드 * @async * @example * someFunction: function() { * var me = this; * UT.popupApproval(me, {aprv_id: data.aprv_id}, function() { * ... * }); * } */ popupApproval: function(element, param, savedCallback, isViewMode) { var loadParam = { app_id: param.app_id || "", aprv_id: param.aprv_id || "", aprv_stscd: param.aprv_stscd || "", aprv_typcd: param.aprv_typcd || "", tmp_param : param.tmp_param || {}, is_view_mode: isViewMode === true, doc_tit: UT.isNotEmpty(param.doc_tit) ? param.doc_tit + "_결재요청" : "" }; var approvalPopup = SCPopupManager.get('ep-approval'); var savedApprovalHandler = function(e) { approvalPopup.removeEventListener('saved-approval', savedApprovalHandler); approvalPopup.removeEventListener('sc-window-hided', closeHandler); if (UT.isFunction(savedCallback)) { savedCallback.call(this, e.detail, approvalPopup); } approvalPopup.getWindowContent().reset(); approvalPopup.close(); }; //팝업이 보여질 때 scroll이 내려가 있는 경우 맨위로 변경 var scWindowShowedHandler = function(e) { var eles = e.target.querySelectorAll('.flex,.vbox,.hbox,.page,.fit') || []; for(var i=0;i * 콜백함수로부터 첨부파일 그룹코드와 파일 개수가 전달된다. * * @method popupAttach * @param {object} element element * @param {string} grpCd 첨부파일 그룹코드 * @param {function} [savedCallback(result)] 파일 저장 후 콜백 함수 * @param {object} savedCallback(result).result 콜백함수로부터 전달 되는 파라미터 - (예) {grp_cd: "xxx", file_count: 2} * @param {string} savedCallback(result).result.grp_cd 첨부파일 그룹코드 * @param {number} savedCallback(result).result.file_count 업로드된 파일 총 수 * @param {object} [options] 업로더 설정 옵션 * @param {number} [options.maxTotalFileCount=0] 객최대 파일 개수, 0 : 제한없음. * @param {string} [options.maxTotalFileSize=0] 업로드 될 파일의 총 용량. 단위 - B(byte), KB(kilobyte), MB(megabyte), GB(gigabyte) * @async * @example * someFunction: function() { * var me = this; * me.gridView.onDataCellClicked = function(grid, cell) { * var fieldName = cell.fieldName; * if(fieldName == "field1"){ * UT.popupAttach(me, me.data.field2, function(result) { * grid.setValues(cell.itemIndex, { * field2: result.grp_cd, * field1: result.file_count * }, true); * }); * } * }; * } */ popupAttach: function(element, grpCd, savedCallback, options) { var param = { grp_cd: grpCd || "", options: options }; var attachPopup = SCPopupManager.get('ep-attach'); var savedAttachHandler = function(e){ attachPopup.removeEventListener("saved-attach", savedAttachHandler); attachPopup.removeEventListener("sc-window-hided", closeHandler); if (UT.isFunction(savedCallback)) { savedCallback.call(this, e.detail); } attachPopup.getWindowContent().reset(); attachPopup.close(); }; var closeHandler = function(){ attachPopup.removeEventListener("saved-attach", savedAttachHandler); attachPopup.removeEventListener("sc-window-hided", closeHandler); attachPopup.getWindowContent().reset(); attachPopup.close(); }; if(!attachPopup){ element.importLink('../../../../../ui/bp/shared/ep-attach.html', function(moduleId) { SCPopupManager.register("ep-attach", "ep-attach", 800, 340,{ modal: true, maximizable: true }); attachPopup = SCPopupManager.get('ep-attach'); attachPopup.addEventListener("saved-attach", savedAttachHandler); attachPopup.addEventListener("sc-window-hided", closeHandler); attachPopup.show(); attachPopup.getWindowContent().load(param); }); } else{ attachPopup.addEventListener("saved-attach", savedAttachHandler); attachPopup.addEventListener("sc-window-hided", closeHandler); attachPopup.getWindowContent().reset(); // sc-upload 초기화 위해 추가 2017.06.08 mgpark attachPopup.show(); attachPopup.getWindowContent().load(param); } }, /** * 이미지 뷰어를 불러온다. * @param {Object} param 이미지 뷰어를 불러올 때 설정 * @param {Array} param.items 이미지 정보를 담고 있는 배열 * @param {Number} param.index 초기 선택 인덱스 */ showImageViewerPopup: function(params) { // overlay와 imageviewer를 생성하고 기초 설정을 수행 var overlay = document.createElement('sc-overlay'); var imageViewer = document.createElement('sc-image-viewer'); imageViewer.setAttribute('allow-zoom', true); imageViewer.setAttribute('show-controller', true); imageViewer.setAttribute('info-field', 'desc'); imageViewer.setAttribute('thumbnail-size', 50); overlay.classList.add('imageviewer-overlay'); // 빈영역 클릭시 삭제하는 동작 수행 var clickHandler = function(event){ var targetEl = event.currentTarget; targetEl.close(); targetEl.removeEventListener('click', clickHandler); Polymer.dom(document.body).removeChild(targetEl); }; overlay.addEventListener('click', clickHandler); // 보여줄 데이터 초기화 overlay.appendChild(imageViewer); Polymer.dom(document.body).appendChild(overlay); imageViewer.initData(params.items, params.index); // 보여주기 overlay.show(); return overlay; }, /** * 이미지 뷰어를 제거한다. * @param {Element} popup 제거하려는 팝업 엘리먼트 */ hideImageViewerPopup: function(popup) { Polymer.dom(document.body).removeChild(popup); }, /** * date를 format의 형태로 출력한다. * * @method formatDate * @param {date|number} date 날짜 객체 | 날짜의 time값 * @param {string} [format=DEF.styles.formatDate.datetimeFormat] 변환할 format * @return {string} 변환된 문자열 * @example * someFunction: function() { * var me = this; * UT.formatDate(new Date(), "yyyy/MM/dd"); // 2016/04/20 * } */ formatDate: function(date, format) { if (UT.isNumber(date)) { date = new Date(date); } if (!(SCUtil.isDate(date))) { return date; } var me = date; if(format == null){ return SCFormatter.format('date', date); } else{ return format.replace(/(yyyy|yy|MM|M|dd|d|HH|H|mm|m|ss|s)/g, function(match) { switch (match) { case "YYYY": case "yyyy": return me.getFullYear(); case "yy": var v = me.getFullYear() % 100; return v > 10 ? v : "0" + v; case "MM": case "M": var v = me.getMonth() + 1; return match.length === 1 || v >= 10 ? v : "0" + v; case "DD": case "dd": case "d": var v = me.getDate(); return match.length === 1 || v >= 10 ? v : "0" + v; case "HH": case "H": var v = me.getHours(); return match.length === 1 || v >= 10 ? v : "0" + v; case "mm": case "m": var v = me.getMinutes(); return match.length === 1 || v >= 10 ? v : "0" + v; case "ss": case "s": var v = me.getSeconds(); return match.length === 1 || v >= 10 ? v : "0" + v; default: return match; } }); } }, /** * string에 values를 replace 한다 * * @method formatString * @param {string} string 대상 문자열 * @param {string|array} values 바꿀 문자열 * @return {string} replace 된 문자열 * @example * someFunction: function() { * var me = this; * UT.formatString("{0} / {1}", "a", "b"); // a / b * UT.formatString("{0} / {1}", ["a", "b"]); // a / b * UT.formatString("{name} / {value}", {name: "a", value: "b"}); // a / b * } */ formatString: function(string, values) { string = I18N.translate(string); //formatString의 key값을 translate values = UT.isObject(values) ? values : Array.prototype.slice.call(arguments, 1); return string.replace(/\{([^{}]+)\}/gm, function(matched, key) { return typeof values[key] === "undefined" ? matched : values[key]; }); }, /** * 숫자형으로. * * @method toNumber * @param {string} s * @return {number} n : param 이 숫자형이 아니면 0 */ toNumber: function(s) { if (UT.isString(s)) { s = s.replace(/[\,]/g, ""); } return isNaN(s) ? 0 : Number(s); }, /** * 숫자인 경우 문자열로 변환 * * @private * @method toString * @param {object} v * @return {string} */ toString: function(v) { if (UT.isNumber(v)) { return v.toString(); } return v; }, /** * 날짜의 time 값으로 변환 * * @private * @method toTime * @param {object} v * @return {number} */ toTime: function(v) { if (UT.isDate(v)) { return v.getTime(); } return null; }, /** * 패스워드 정규표현식 반환 * * @private * @method passwordRegExp * @return {object} */ passwordRegExp: function() { var regExp = {}; regExp.lengthRe = new RegExp("^.{8,20}$"); //길이 8~20자 regExp.letterRe = new RegExp("^(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$%^&*-])","i"); //영문, 특수문자, 숫자 포함 여부 regExp.repeatRe = new RegExp("(.)\\1{3,}"); // 4번 이상연속된 문자 return regExp; }, /** * 이메일 정규표현식 반환 * * @private * @method emailRegExp * @return {object} */ emailRegExp: function() { var regExp = {}; regExp.allRe = new RegExp("^[0-9a-zA-Z]([-_\.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_\.]?[0-9a-zA-Z])*\.[a-zA-Z]{2,3}$", "i"); //길이 8~20자 return regExp; }, /** * format 형태의 string을 date 로 변환한다. * * @method toDate * @param {string} str 날짜 string * @param {string} [format=DEF.styles.formatDate.datetimeFormat] str의 format * @return {date} 변환된 date * @example * someFunction: function() { * var me = this; * UT.toDate("20160420", "yyyyMMdd"); // 2016/04/20 * } */ toDate: function(str, format) { format = format || "yyyyMMdd"; if(UT.isDate(str)){ return str; } if(UT.isString(str)) { str = str.replace(/\//g, ""); } if(!UT.isString(str) || str.length !== format.length) { return null; } var y = 0, m = 0, d = 0, h = 0, mi = 0, s = 0; format.replace(/(yyyy|yy|MM|M|dd|d|HH|H|mm|m|ss|s)/g, function(match) { var offset = arguments[arguments.length - 2]; switch (match) { case "yyyy": case "yy": y = parseInt(str.substring(offset, offset + match.length), 10); break; case "MM": case "M": m = parseInt(str.substring(offset, offset + match.length), 10) - 1; break; case "dd": case "d": d = parseInt(str.substring(offset, offset + match.length), 10); break; case "HH": case "H": h = parseInt(str.substring(offset, offset + match.length), 10); break; case "mm": case "m": mi = parseInt(str.substring(offset, offset + match.length), 10); break; case "ss": case "s": s = parseInt(str.substring(offset, offset + match.length), 10); break; default: break; } }); return new Date(y, m, d, h, mi, s); }, /** * Array 여부 * * @method isArray * @param {object} object * @return {boolean} true is array * @example * someFunction: function() { * var me = this; * ... * if (UT.isArray(dataRows)) { * ... * } * } */ isArray: function(object) { return Array.isArray(object); // return Object.prototype.toString.call(object) === "[object Array]"; }, /** * String 여부 * * @method isString * @param {object} object * @return {boolean} true is string * @example * someFunction: function() { * var me = this; * ... * if (UT.isString(usrId)) { * ... * } * } */ isString: function(object) { return "string" === typeof object; }, /** * Boolean 여부 * * @method isBoolean * @param {object} object * @return {boolean} true is boolean * @example * someFunction: function() { * var me = this; * ... * me.set("singleSelect", UT.isBoolean(options.singleSelect) ? options.singleSelect : false); * } */ isBoolean: function(object) { return "boolean" === typeof object; }, /** * Number 여부 * * @method isNumber * @param {object} object * @return {boolean} true is number * @example * someFunction: function() { * var me = this; * ... * if (UT.isNumber(count)) { * ... * } * } */ isNumber: function(object) { return "number" === typeof object; }, /** * Function 여부 * * @method isFunction * @param {object} object * @return {boolean} true is function * @example * someFunction: function() { * var me = this; * if (UT.isFunction(callback)) { * callback.call(this); * } * } */ isFunction: function(object) { return "function" === typeof object; }, /** * Object 여부 *
* (주의: null 도 object이지만, 편의상 null 은 object에서 제외 한다) * * @method isObject * @param {object} object * @return {boolean} true is object * @example * someFunction: function() { * var me = this; * ... * if (UT.isObject(options.defaultParam)) { * me.set("findList.param", options.defaultParam); * } * } */ isObject: function(object) { return object !== null && "object" === typeof object; }, /** * Date 여부 * * @method isDate * @param {object} object * @return {boolean} true is date * @example * someFunction: function() { * var me = this; * ... * if (UT.isDate(param)) { * ... * } * } */ isDate: function(object) { return UT.isObject(object) && typeof object.getTime === "function"; }, /** * 데이터의 empty 여부 *
* string일 경우 trim 후 empty 검사한다 * * @method isEmpty * @param {string|array} object * @return {boolean} true is empty * @example * someFunction: function() { * var me = this; * ... * if (!UT.isEmpty(item)) { * ... * } * } */ isEmpty: function(object) { return object === null || "undefined" === typeof object || (UT.isObject(object) && !Object.keys(object).length && !UT.isDate(object)) || (UT.isString(object) && object.trim() === "") || (UT.isArray(object) && object.length === 0); }, /** * !UT.isEmpty(object) * * @method isNotEmpty * @param {string|array} object * @return {boolean} true is not empty */ isNotEmpty: function(object) { return !UT.isEmpty(object); }, /** * json 여부 판별 */ isJson : function(obj) { if (typeof obj == "object"){ obj = JSON.stringify(obj); } if(typeof obj == "string" && obj.length > 0){ var json = ""; var isValid = false; try { json = JSON.parse(obj); isValid = true; } catch (e) { isValid = false; } if (!json || typeof json !== "object") isValid = false; return isValid; } }, /** * input element에서 enter key가 눌렸을 때의 이벤트 * * @method enter * @param {object} element * @param {function} callback enter key가 눌린 후 콜백 함수 * @example * someFunction: function() { * var me = this; * } */ enter: function(element, callback) { $(element).find("input").keypress(function(key) { if (key.keyCode === 13) { if (UT.isFunction(callback)) { callback.call(this); } } }); }, /** * 부모를 탐색하며 selector와 동일한 엘리먼트를 찾아줌 * * @method closest * @param {object} element * @param {string} selector * @return {object} * @example * someFunction: function() { * var me = this; * } */ closest: function(element, selector) { while(element) { if (Polymer.DomApi.matchesSelector.call(element, selector)) { return element; } else { element = element.parentElement; } } }, /** * 현재 화면의 MenuId를 return * * @method getMenuId * @param {object} element * @return {string} menuId * @example * someFunction: function() { * var me = this; * } */ getMenuId: function(element) { return SCMdiManager.getCurrentMenuId(element); }, /** * 현재 화면의 authList를 return * * @method getAuthList * @param {object} element * @return {array} authList * @example * someFunction: function() { * var me = this; * } */ getAuthList: function(element) { var menuId = UT.getMenuId(element); if (menuId) { return SCRoleManager.getUserFuncs(menuId); } }, /** * menuId를 통해 메뉴생성 * * @method createWindowByMenuId * @param {string} menuId 메뉴아이디 * @example * someFunction: function() { * var me = this; * } */ createWindowByMenuId: function(menuId, callback) { var mdiMain = document.querySelector("sc-mdi"); var menuList = SCMdiManager.getMenuList();//mdiMain.$.mdiTopMenu.menuList; var windowIndex = mdiMain.$.mdiContent.createdWindows.indexOf(menuId); var moduleWindow = null; if(windowIndex > -1){ mdiMain.$.mdiContent.removeWindow(menuId); } for (idx in menuList) { if (menuId == menuList[idx].menu_id) { moduleWindow = mdiMain.$.mdiContent.createWindow(menuList[idx].menu_id, menuList[idx].menu_nm, menuList[idx].menu_url); if(UT.isFunction(callback)) { moduleWindow.addEventListener("window-module-loaded", function(e) { callback.call(moduleWindow.module, moduleWindow.module); moduleWindow.removeEventListener("window-module-loaded"); }); } break; } } return moduleWindow; }, /** * window 닫기 */ removeWindow: function(menuId){ var mdiMain = document.querySelector("sc-mdi"); mdiMain.$.mdiContent.removeWindow(menuId); }, /** * 메뉴 생성 * * @method createWindow * @param {string} menuId 메뉴아이디 * @param {string} menuName 메뉴명 * @param {string} menuUrl 메뉴URL * @example * someFunction: function() { * var me = this; * } */ createWindow: function(menuId, menuName, menuUrl, callback) { var mdiMain = document.querySelector("sc-mdi"); var windowIndex = mdiMain.$.mdiContent.createdWindows.indexOf(menuId); var moduleWindow = null; if(windowIndex > -1){ mdiMain.$.mdiContent.removeWindow(menuId); } moduleWindow = mdiMain.$.mdiContent.createWindow(menuId, menuName, menuUrl); if(UT.isFunction(callback)) { moduleWindow.addEventListener("window-module-loaded", function(e) { callback.call(moduleWindow,e.detail); moduleWindow.removeEventListener("window-module-loaded", arguments.callee); }); } return moduleWindow; }, /** * Array 에 특정 필드에 특정 값이 필터값과 같으면 Array를 재생성함. * @method : arrayFilterChange * @param : {Array} array * @param : {Object} filter : {key : filter처리할키 , value : 값} * @example * UT.arrayFilterChange(me.codes.prcStlTypCd,{key : "dtl_cd_attr_val",value : me.rfxData.rfx_typ}); * */ arrayFilterChange : function(array,filter){ //배열에서 자료추출 if(UT.isArray(array)){ var datas = array.filter(function (element) { if (element[filter.key] === filter.value) { return true; } }); return datas; }else{ return array; } }, /* Array 에 특정 필드에 특정 값이 필터값과 같지 않으면 Array를 재생성함. */ arrayNotFilterChange : function(array,filter){ //배열에서 자료추출 if(UT.isArray(array)){ var datas = array.filter(function (element) { if (element[filter.key] !== filter.value) { return true; } }); return datas; }else{ return array; } }, getArrayValuesByKey: function(array, searchKey) { var values = []; if(UT.isArray(array)){ array.forEach(function(data) { if(data[searchKey]) { values.push(data[searchKey]); } }); } return values; }, getHour : function(){ var array = []; for(var i = 0 ; i< 24 ; i++){ var label = (i<10) ? ("0"+i) : i; array.push({data : i, label : label}); } return array; }, getMin : function(){ var array = []; for(var i = 0 ; i< 60 ; i++){ var label = (i<10) ? ("0"+i) : i; array.push({data : i, label : label}); } return array; }, /** * TODO : 날짜,시간,분이 있는 component의 값을 date로 * dt.hour.min이 있는 data의 경우 dt로 date를 만들어서 셋팅 * * ynkim */ convertDayHourMinToDt : function(obj){ for (var key in obj) { if (obj.hasOwnProperty(key) && /_dt$/.test(key)) { var val = obj[key]; if(Date.parse(val)){ var day = obj[key], hour = obj[key +"_hour"], min = obj[key +"_min"]; if((UT.isDate(day) || !UT.isEmpty(day)) && !UT.isObject(hour) && !UT.isObject(min)){ var date = new Date(day); date.setHours(!!hour?hour:0, !!min?min:0, 0, 0); obj[key] = date; } } } } return obj; }, /** * TODO: 추가개발필요 )))) date의 값을 날짜,시간,분이 있는 값으로 셋팅 * data에 dt가 있는 데이타의 경우 dt,hour,min data를 만들어서 셋팅 * * ynkim */ convertDtToDayHourMin : function(obj){ for (var key in obj) { if (obj.hasOwnProperty(key) && /_dt$/.test(key)) { var val = obj[key]; if(Date.parse(val)){ var newKey = key+"_dt"; obj[newKey] = val; newKey = key +"_hour"; obj[newKey] = val.getHours(); newKey = key +"_min"; obj[newKey] = val.getMinutes(); } } } return obj; }, //트리 변환 메서드 listToTree : function (arrayList, idKey,parentIdKey) { var rootNodes = []; var traverse = function (nodes, item, index) { if (nodes instanceof Array) { return nodes.some(function (node) { if (node[idKey] === item[parentIdKey]) { node.children = node.children || []; return node.children.push(arrayList.splice(index, 1)[0]); } return traverse(node.children, item, index); }); } }; while (arrayList.length > 0) { arrayList.some(function (item, index) { if (item[parentIdKey] === "ROOT") { return rootNodes.push(arrayList.splice(index, 1)[0]); } return traverse(rootNodes, item, index); }); } return rootNodes; }, /** * 협력사 profile 팝업 호출 * @param element * @param param * @param savedCallback */ popupVendor: function(element, param, savedCallback) { var vendorPopup = SCPopupManager.get('ep-vendor-profile-tab'); var completeSaveHandler = function(e){ vendorPopup.removeEventListener("complete-save", completeSaveHandler); vendorPopup.removeEventListener("sc-window-hided", closeHandler); if (UT.isFunction(savedCallback)) { savedCallback.call(this, e.detail); } vendorPopup.getWindowContent().reset(); vendorPopup.close(); }; var closeHandler = function(e){ vendorPopup.removeEventListener("complete-save", completeSaveHandler); vendorPopup.removeEventListener("sc-window-hided", closeHandler); vendorPopup.getWindowContent().reset(); vendorPopup.close(); }; if(!vendorPopup){ element.importLink('../../../../../ui/bp/esourcing/vendorInfoMgt/ep-vendor-profile-tab.html', function(moduleId) { SCPopupManager.register("ep-vendor-profile-tab", "ep-vendor-profile-tab", "90%", "90%", { modal: true, maximizable: true, //브라우저 리사이즈시 팝업 리사이즈 resizeOnBrowserResize : true, //브라우저 리사이즈시 팝업 위치이동 refitOnBrowserResize : true }); vendorPopup = SCPopupManager.get('ep-vendor-profile-tab'); vendorPopup.titleText = "협력사 Profile"; vendorPopup.addEventListener("complete-save", completeSaveHandler); vendorPopup.addEventListener("sc-window-hided", closeHandler); vendorPopup.show(); vendorPopup.getWindowContent().load(param); }); } else{ vendorPopup.addEventListener("complete-save", completeSaveHandler); vendorPopup.addEventListener("sc-window-hided", closeHandler); vendorPopup.show(); vendorPopup.getWindowContent().load(param); } }, /** * moment.js의 date를 javascript date object로 변환 * @param {object} momentDate 변경하려는 momentjs 객체 * @returns {Date} 변환된 데이트 객체 */ moment2Date : function(momentDate) { var targetDate = new Date(); targetDate.setYear(momentDate.year()); targetDate.setMonth(momentDate.month()); targetDate.setDate(momentDate.date()); targetDate.setHours(momentDate.hour()); targetDate.setMinutes(momentDate.minute()); return targetDate; }, /** * 부동소수 수량의 곱 (소수점 3자리까지 입력가능. 결과는 소수점 6자리까지 나올수 있음) * Round 값을 넣지 않으면 Scale 값은 무시 * @param _numberPrc 계산할 숫자1 * @param _numberQty 계산할 숫자2 * @param Round (ROUND: 반올림, CEIL: 올림, FLOOR: 내림, 입력안함: 전부표시) * @param Scale 소수점 몇째자리에서 처리 * @returns {String} */ toFixedMultiply : function(_numberPrc, _numberQty, Round, Scale) { var _divisor = Math.pow(10, 8); var sign = 1; var _multip, _multipPrc, _multipQty; var _idxPrc, _idxQty; if(Round === null || typeof Round === 'undefined'){ Round = "NONE"; } if(Scale === null || typeof Scale === 'undefined'){ Scale = 4; } if(_numberPrc < 0) { sign *= -1; _multipPrc = (_numberPrc * -1).toString(); } else { _multipPrc = _numberPrc.toString(); } if(_numberQty < 0) { sign *= -1; _multipQty = (_numberQty * -1).toString(); } else { _multipQty = _numberQty.toString(); } _idxPrc = _multipPrc.indexOf("."); _idxQty = _multipQty.indexOf("."); if(_idxPrc == -1) { _multipPrc = (_multipPrc + "0000"); } else { _multipPrc = (_multipPrc + "0000"); _multipPrc = _multipPrc.substring(0, _idxPrc) + _multipPrc.substring(_idxPrc+1, _idxPrc+5); } if(_idxQty == -1) { _multipQty = (_multipQty + "0000"); } else { _multipQty = (_multipQty + "0000"); _multipQty = _multipQty.substring(0, _idxQty) + _multipQty.substring(_idxQty+1, _idxQty+5); } switch(Round) { case "ROUND" : _multip = ( (Number(_multipPrc) * Number(_multipQty) + (5*Math.pow(10, 8-Scale))) / _divisor * sign).toString(); _multip = (_multip.indexOf(".") == -1)? _multip : _multip.substring(0, _multip.indexOf(".") + Scale); break; case "CEIL": _multip = ( (Number(_multipPrc) * Number(_multipQty) + (Math.pow(10, 9-Scale)-1)) / _divisor * sign).toString(); _multip = (_multip.indexOf(".") == -1)? _multip : _multip.substring(0, _multip.indexOf(".") + Scale); break; case "FLOOR": _multip = ( (Number(_multipPrc) * Number(_multipQty)) / _divisor * sign).toString(); _multip = (_multip.indexOf(".") == -1)? _multip : _multip.substring(0, _multip.indexOf(".") + Scale); break; default: _multip = ( (Number(_multipPrc) * Number(_multipQty)) / _divisor * sign).toString(); break; } return _multip; }, /** * 부동소수 수량의 나눗셈 (소수점 3자리까지 입력가능. 결과가 소수점 무한대로 나올수있으므로 Round 파라미터 입력필요 ) * Round 값을 넣지 않으면 Scale 값은 무시 * @param _number1 계산할 숫자1 * @param _number2 계산할 숫자2 * @param Round (ROUND: 반올림, CEIL: 올림, FLOOR: 내림, 입력안함: 전부표시) * @param Scale 소수점 몇째자리에서 처리 * @returns {String} */ toFixedDivide : function(_number1, _number2, Round, Scale) { var _multip1 = _number1.toString(); var _multip2 = _number2.toString(); var _idx1, _idx2; if(Round === null || typeof Round === 'undefined'){ Round = "NONE"; } if(Scale === null || typeof Scale === 'undefined'){ Scale = 4; } // 소수점 몇째자리까지 있는지 확인 _idx1 = _multip1.indexOf("."); _idx2 = _multip2.indexOf("."); //정수화된 값 var _multip1Num = ""; var _multip2Num = ""; //소수점 길이 var _multip1Len = 0; var _multip2Len = 0; if(_idx1 != -1) _multip1Len = _multip1.length - _idx1 -1; if(_idx2 != -1) _multip2Len = _multip2.length - _idx2 -1; // 각 수 정수로 바꾸기 if(_multip1Len == _multip2Len){ // 둘다 정수일때 if(_multip1Len == 0){ _multip1Num = _multip1; _multip2Num = _multip2; } else{ _multip1Num = _multip1.substring(0, _idx1) + _multip1.substring(_idx1+1, _multip1.length); _multip2Num = _multip2.substring(0, _idx2) + _multip2.substring(_idx2+1, _multip2.length); } } else if(_multip1Len > _multip2Len){ // 소수점뒤 길이가 긴건 소수점만 없애고 짧은건 짧은 수만큼 0 붙이기 var powLen = Math.pow(10,_multip1Len-_multip2Len).toString(); _multip1Num = _multip1.substring(0, _idx1) + _multip1.substring(_idx1+1, _multip1.length); if(_multip2Len == 0){ _multip2Num = _multip2 + powLen.substring(1,powLen.length); }else{ _multip2Num = _multip2.substring(0, _idx2) + _multip2.substring(_idx2+1, _multip2.length) + powLen.substring(1,powLen.length); } }else{ // 소수점뒤 길이가 긴건 소수점만 없애고 짧은건 짧은 수만큼 0 붙이기 var powLen = Math.pow(10,_multip2Len-_multip1Len).toString(); _multip2Num = _multip2.substring(0, _idx2) + _multip2.substring(_idx2+1, _multip2.length); if(_multip1Len == 0){ _multip1Num = _multip1 + powLen.substring(1,powLen.length); }else{ _multip1Num = _multip1.substring(0, _idx1) + _multip1.substring(_idx1+1, _multip1.length) + powLen.substring(1,powLen.length); } } // 결과값 var _result = Number(_multip1Num) / Number(_multip2Num); //반올림 함수 호출부분 return this.toFixedRound(_result,Round,Scale); }, /** * 반올림 올림 내림 함수 * @param _number1 계산할 숫자 * @param Round (ROUND: 반올림, CEIL: 올림, FLOOR: 내림, 입력안함: 전부표시) * @param Scale 소수점 몇째자리에서 처리 * @returns {String} */ toFixedRound : function(_number1, Round, Scale){ // String 변환 var _num = _number1.toString(); var sign = ""; if(Round === null || typeof Round === 'undefined'){ Round = "NONE"; } if(Scale === null || typeof Scale === 'undefined'){ Scale = 4; } if(_number1 < 0){ sign = "-"; _num = _num.substring(1,_num.length); } //소수점 위치 var indexdot = _num.indexOf("."); // 곱한 10의 n 승 var muxcnt = _num.length - indexdot -1; // 정수가 들어왔거나 소수점처리 안한다면 그냥 리턴 if(indexdot == -1 || Round == "NONE" || muxcnt < Scale) return _number1.toString(); // 소수점 제거된 입력값 var _numX = Number(_num.substring(0, indexdot) + _num.substring(indexdot+1, _num.length)); var _numS = ""; switch(Round) { case "ROUND" : _numS = ( (Number(_numX) + (5*Math.pow(10, muxcnt-Scale))) / Math.pow(10,muxcnt) ).toString(); _numS = (_numS.indexOf(".") == -1)? _numS : _numS.substring(0, _numS.indexOf(".") + Scale); break; case "CEIL": _numS = ( (Number(_numX) + (Math.pow(10, muxcnt+1-Scale)-1)) / Math.pow(10,muxcnt)).toString(); _numS = (_numS.indexOf(".") == -1)? _numS : _numS.substring(0, _numS.indexOf(".") + Scale); break; case "FLOOR": _numS = ( Number(_numX) / Math.pow(10,muxcnt)).toString(); _numS = (_numS.indexOf(".") == -1)? _numS : _numS.substring(0, _numS.indexOf(".") + Scale); break; default: //아무것도 아닐 경우 return _number1.toString(); break; } return Number(sign+_numS).toString(); }, /** * 부동소수 수량의 합. (소수점 4째자리까지 입력 가능) * @param _numQtyA 계산할 숫자1 * @param _numQtyB 계산할 숫자2 * @returns {String} */ toFixedAdd : function(_numQtyA, _numQtyB) { var _divisor = Math.pow(10, 4); var _addition; var _addQtyA = _numQtyA.toString(); var _addQtyB = _numQtyB.toString(); var _idxQtyA = _addQtyA.indexOf("."); var _idxQtyB = _addQtyB.indexOf("."); if(_idxQtyA == -1) _addQtyA = (_addQtyA + "0000"); else { _addQtyA = (_addQtyA + "0000"); _addQtyA = _addQtyA.substring(0, _idxQtyA) + _addQtyA.substring(_idxQtyA+1, _idxQtyA+5); } if(_idxQtyB == -1) _addQtyB = (_addQtyB + "0000"); else { _addQtyB = (_addQtyB + "0000"); _addQtyB = _addQtyB.substring(0, _idxQtyB) + _addQtyB.substring(_idxQtyB+1, _idxQtyB+5); } _addition = ( (Number(_addQtyA) + Number(_addQtyB) ) / _divisor).toString(); return _addition; }, /** * 부동소수 수량의 차. (소수점 4째자리까지 입력 가능) * @param _numQtyA 계산할 숫자1 * @param _numQtyB 계산할 숫자2 * @returns {String} */ toFixedSub : function(_numQtyA, _numQtyB) { var _divisor = Math.pow(10, 4); var _addition; var _addQtyA = _numQtyA.toString(); var _addQtyB = _numQtyB.toString(); var _idxQtyA = _addQtyA.indexOf("."); var _idxQtyB = _addQtyB.indexOf("."); if(_idxQtyA == -1) { _addQtyA = (_addQtyA + "0000"); } else { _addQtyA = (_addQtyA + "0000"); _addQtyA = _addQtyA.substring(0, _idxQtyA) + _addQtyA.substring(_idxQtyA+1, _idxQtyA+5); } if(_idxQtyB == -1) { _addQtyB = (_addQtyB + "0000"); } else { _addQtyB = (_addQtyB + "0000"); _addQtyB = _addQtyB.substring(0, _idxQtyB) + _addQtyB.substring(_idxQtyB+1, _idxQtyB+5); } _addition = ( (Number(_addQtyA) - Number(_addQtyB) ) / _divisor).toString(); return _addition; }, csrf: function() { var doc = document, meta = doc.querySelector('meta[name=_csrf]'), _csrf; if(meta) { _csrf = { csrf : meta.content, csrfHeader : doc.querySelector('meta[name=_csrf_header]').content, csrfParameter : doc.querySelector('meta[name=_csrf_parameter]').content } } return _csrf; }, /** * 큰 숫자 정렬을 위한 함수 * @param val1 * @param val2 * @returns val1가 크면 1, 같으면 0, 작으면 -1 */ sortBigNumber: function (val1, val2) { if (val1 === undefined || val1 === null) { return (val2 === undefined || val2 === null) ? 0 : -1; } if (val2 === undefined || val2 === null) { return 1; } var bigVal1 = new BigNumber(val1); var bigVal2 = new BigNumber(val2); return bigVal1.comparedTo(bigVal2); }, /** * 큰 숫자 합계를 위한 함수 * @param dataField * @param datas * @returns val1가 크면 1, 같으면 0, 작으면 -1 */ plusBigNumber: function (dataField, datas) { var result = new BigNumber('0'); for(var i=0; i 9 Conversion) * @param Array * @param String * @returns Array */ setEditStatusValue : function(array, editstatus) { if(UT.isArray(array) && UT.isNotEmpty(array)) { if(array.length > 0) { var length = array.length; for(var i = 0; i < length; i++) { array[i].editstatus = editstatus; } } } return array; }, /** [Volcano Support] SCAlert API */ alertShow: function(message, title, autoTranslate, flags, parent, fn, iconCls) { var i18nDisabled = !autoTranslate; !UT.isFunction(fn) && (fn = function(){}); if(flags == 3){ // Yes / No return SCAlert.confirm(title, message, function(btn){ var e = {}; e.detail = (btn === "yes") ? 1 : 2; fn.call(this, e); }, iconCls, i18nDisabled); }else{ // Default return SCAlert.show(title, message, fn, iconCls, i18nDisabled); } }, /** [Volcano Support] Alert API */ _alertShow: function(message, title, flags, parent, fn, iconCls) { return UT.alertShow(message, title, false, flags, parent, fn, iconCls); }, /** * @method idxOf * @param {String} * @param {String} * @return {Boolean} */ idxOf: function(param, searchStr){ if (param == null) { return false; } else { return (param.indexOf(searchStr) == -1) ? false : true; } }, /** * @method isNullTrim * @param {String} * @return {Boolean} */ isNullTrim: function(str) { if ( UT.isEmpty(str) == true ) return true; str = UT.toString(str); return UT.isEmpty( str.replace(/([ ]{1})/g,"") ); }, /** * assign object * * @method assign * @param {object} 기본 object * @param {object} copy할 값들이 있는 object * @return {object} new object */ assign: function(target, source) { if (!UT.isObject(target) || !UT.isObject(source)) { return target; } var copy = UT.copy(target); for (var key in source) { if (source.hasOwnProperty(key)) { copy[key] = UT.copy(source[key]); } } return copy; }, /** * 이메일 형식 확인 * ESCommUtil.CheckMail * * @method CheckMail * @param {string} 기본 object * @return {boolean} new object */ CheckMail: function(str) { /** 체크사항 - @가 2개이상일 경우 - .이 붙어서 나오는 경우 - @.나 .@이 존재하는 경우 - 맨처음이.인 경우 - @이전에 하나이상의 문자가 있어야 함 - @가 하나있어야 함 - Domain명에 .이 하나 이상 있어야 함 - Domain명의 마지막 문자는 영문자 2~4개이어야 함 **/ var check1 = /(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)/; var check2 = /^[a-zA-Z0-9\-\.\_]+\@[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,4})$/; return ( !check1.test(str) && check2.test(str) ); }, /** * oz 리포트 * modules.bp.procurement.comm.ESCommUtil.callOz * * @method callOz * @param {string} sys_id * @param {string} comp_cd * @param {string} oper_org_sn * @param {string} po_no * @param {string} po_mod_cnt * @param {string} locale * @param {string} shipper_type1 */ callOz : function(element,sys_id,comp_cd,oper_org_sn, po_no, po_mod_cnt, locale, shipper_type1) { if ( UT.isNullTrim(sys_id) || UT.isNullTrim(comp_cd) || UT.isNullTrim(oper_org_sn) || UT.isNullTrim(po_no) || UT.isNullTrim(po_mod_cnt)){ return; } var me = this; var shipperObj = {}; shipperObj.sys_id = sys_id; shipperObj.comp_cd = comp_cd; shipperObj.oper_org_sn = oper_org_sn; shipperObj.po_no= po_no; shipperObj.po_mod_cnt = po_mod_cnt; shipperObj.locale = locale; shipperObj.shipper_type1 = shipper_type1; shipperObj.usr_id = SCSessionManager.getCurrentUser().usr_id; element.$.ozSP.querySelector("[name='shipperObj']").value = shipperObj; UT.request(element.$.ozSP); }, resultOZ : function(me, e) { var ozSO = e.detail.ozSO; var shipperObj = e.detail.shipperObj; var shipper_type = ozSO.shipper; var purc_grp_id= ozSO.purc_grp_id; var purc_grp_pn = ozSO.purc_grp_pn; var vd_nm = ozSO.vd_nm; var sap_po_no = ozSO.sap_po_no; var real_po_mod_cnt = ozSO.real_po_mod_cnt; if(purc_grp_id == purc_grp_pn && shipper_type == 'O'){ var popupParam = {}; popupParam.sys_id = shipperObj.sys_id; popupParam.comp_cd = shipperObj.comp_cd; popupParam.oper_org_sn = shipperObj.oper_org_sn; popupParam.po_no = shipperObj.po_no; popupParam.po_mod_cnt = shipperObj.po_mod_cnt; popupParam.locale = shipperObj.locale; popupParam.shipper_type = shipperObj.shipper_type1; popupParam.vd_nm = vd_nm; popupParam.sap_po_no = sap_po_no; popupParam.real_po_mod_cnt = real_po_mod_cnt; var popup = UT.popup("es-pooz-popup", me, 700, 400, null,{titleText : "PO 출력 내용 입력"}); popup.show(); popup.getWindowContent().load(popupParam); } else{ var parameter = ""; var sys_id = shipperObj.sys_id; var comp_cd = shipperObj.comp_cd; var oper_org_sn = shipperObj.oper_org_sn; var po_no = shipperObj.po_no; var locale = shipperObj.locale; if(ESCommConst.BGBU_CHINA.indexOf(oper_org_sn) > -1){ if(shipper_type == 'D'){ parameter = "reportname=PO_CN.ozr&odinames=POHDDT&pcount=9¶ms=sys_id="+sys_id+ "%comp_cd=" + comp_cd + "%oper_org_sn=" + oper_org_sn + "%po_no=" + po_no +"%po_mod_cnt=" + real_po_mod_cnt +"%locale="+locale+"%localeKEC=zh_CN%sap_po_no="+sap_po_no+"%vd_nm="+vd_nm; } else{ parameter = "reportname=PO_EN.ozr&odinames=POHDDT&pcount=9¶ms=sys_id="+sys_id+ "%comp_cd=" + comp_cd + "%oper_org_sn=" + oper_org_sn + "%po_no=" + po_no +"%po_mod_cnt=" + real_po_mod_cnt +"%locale="+locale+"%localeKEC=en_US%sap_po_no="+sap_po_no+"%vd_nm="+vd_nm; } } else{ if(shipper_type == 'D'){ parameter = "reportname=PO.ozr&odinames=POHDDT&pcount=9¶ms=sys_id="+sys_id+ "%comp_cd=" + comp_cd + "%oper_org_sn=" + oper_org_sn + "%po_no=" + po_no +"%po_mod_cnt=" + real_po_mod_cnt +"%locale="+locale+"%localeKEC=ko_KR%sap_po_no="+sap_po_no+"%vd_nm="+vd_nm; } else{ parameter = "reportname=PO_EN.ozr&odinames=POHDDT&pcount=9¶ms=sys_id="+sys_id+ "%comp_cd=" + comp_cd + "%oper_org_sn=" + oper_org_sn + "%po_no=" + po_no +"%po_mod_cnt=" + real_po_mod_cnt +"%locale="+locale+"%localeKEC=en_US%sap_po_no="+sap_po_no+"%vd_nm="+vd_nm; } } parameter = CrytoUtil.encrypt(parameter); var url = ozSO.url + "?en_param=" + encodeURIComponent(parameter) + "&ozListSize=" + encodeURIComponent(CrytoUtil.encrypt("1"))+"&vd_nm="+vd_nm; UT.ozPopupWindow(url,"_blank", "width=1000,height=800,scrollbars=yes" ); } }, reMaskRe: function(element) { var maskReList = element.querySelectorAll("sc-text-field[mask-re]"); //1. upper-case = "true"면 a-z, A-Z 둘 다 있어야 한다. for(var i in maskReList) { var e = maskReList[i]; if(e.maskRe == undefined) continue; if(e.upperCase == "true" || e.upperCase == true) { var m = e.maskRe; var hasLower = m.indexOf("a-z") >= 0; var hasUpper = m.indexOf("A-Z") >= 0; if(hasLower && !hasUpper){ //소문자만 있으면 대문자 추가 maskReList[i].maskRe = m.slice(0,-2)+"A-Z"+m.slice(-2); } else if(!hasLower && hasUpper){ //대문자만 있으면 소문자 추가 maskReList[i].maskRe = m.slice(0,-2)+"a-z"+m.slice(-2); } //둘 다 있거나 없으면 스킵 } } //2. 영어 or 영어숫자 정규식인 경우 stripCharsRe가 있어야 한다. //소문자 대문자 숫자 . - , for(var i in maskReList) { if(maskReList[i].maskRe == undefined) continue; var m = maskReList[i].maskRe.slice(2,-2); if(m.replace(/(a-z|A-Z|0-9|\.|\\|-|,)/g, "").length == 0) { maskReList[i].stripCharsRe = "/[ㄱ-힣]/"; } } }, //사업자등록번호 유효성체크 checkBusino: function(str1) { var sum = 0; var getlist = new Array(10); var chkvalue = new Array("1","3","7","1","3","7","1","3","5"); for(var i = 0; i<10; i++) { getlist[i] = str1.substring(i, i+1); } for(var i =0; i<9; i++) { sum += getlist[i]*chkvalue[i]; } sum = sum + ((getlist[8]*5)/10); var sidliy = Math.floor(sum % 10); var sidchk = 0; if(sidliy != 0) { sidchk = 10 - sidliy; } else { sidchk = 0; } if(sidchk != getlist[9]) { return false; } // SCAlert.show('sidchk'); return true; }, //법인등록번호 유효성체크 checkCorpno: function() { var sum = 0; var getlist = new Array(13); var chkvalue = new Array("1","2","1","2","1","2","1","2","1","2","1","2"); for(var i = 0; i<13; i++) { getlist[i] = str1.substring(i, i+1); } for(var i=0; i<12; i++) { sum += getlist[i]*chkvalue[i]; } var sidliy = sum % 10; var sidchk = 0; if(sidliy != 0) { sidchk = 10 - sidliy; } else { sidchk = 0; } if(sidchk != getlist[12]) { return false; } // SCAlert.show('sidchk'); return true; } }; /** * 다국어 변환 * * @class I18N */ var I18N = { /** * 다국어 처리 instance */ instance: null, /** * 다국어 변환 * * @private * @method translate * @param {string} * @return {string} */ translate: function() { var me = this; if (me.instance === null) { me.instance = new SCI18n(); } return me.instance.translate.apply(this, arguments); } }; var CrytoUtil = { aesDefaultSalt : 'db898233adc9cb441456afe030b2dcb2', encrypt : function(word, salt){ var saltKey = this.aesDefaultSalt; if(UT.isString(salt)){ saltKey = salt; } return CryptoJS.AES.encrypt(word, CryptoJS.enc.Hex.parse(saltKey), { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 }).toString() }, decrypt : function(word, salt){ var saltKey = this.aesDefaultSalt; if(UT.isString(salt)){ saltKey = salt; } return CryptoJS.AES.decrypt(word, CryptoJS.enc.Hex.parse(saltKey),{ mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 }).toString(CryptoJS.enc.Utf8) }, hash : function(value){ return CryptoJS.MD5(value).toString(CryptoJS.enc.Base64); } }; var StringUtil = { /** * Removes all whitespace characters from the beginning and end * of the specified string. * * @param str The String whose whitespace should be trimmed. * * @return Updated String where whitespace was removed from the * beginning and end. */ trim: function(str) { if (str == null) return ''; var startIndex = 0; while (StringUtil.isWhitespace(str.charAt(startIndex))) { ++startIndex; } var endIndex = str.length - 1; while (StringUtil.isWhitespace(str.charAt(endIndex))) { --endIndex; } if (endIndex >= startIndex) return str.slice(startIndex, endIndex + 1); else return ""; }, /** * Removes all whitespace characters from the beginning and end * of each element in an Array, where the Array is stored as a String. * * @param value The String whose whitespace should be trimmed. * * @param separator The String that delimits each Array element in the string. * * @return Updated String where whitespace was removed from the * beginning and end of each element. */ trimArrayElements: function(value, delimiter) { if (value != "" && value != null) { var items = value.split(delimiter); var len = items.length; for (var i = 0; i < len; i++) { items[i] = StringUtil.trim(items[i]); } if (len > 0) { value = items.join(delimiter); } } return value; }, /** * Returns true if the specified string is * a single space, tab, carriage return, newline, or formfeed character. * * @param str The String that is is being queried. * * @return true if the specified string is * a single space, tab, carriage return, newline, or formfeed character. */ isWhitespace: function(character) { switch (character) { case " ": case "\t": case "\r": case "\n": case "\f": return true; default: return false; } }, /** UT.formatString과 동일 */ substitute: function(str, rest) { return UT.formatString(str, rest); }, /********************************* * emro.lib.util.StringUtil ********************************/ isnull: function(str, target) { if (str == null) return target; return str; }, isValidString: function(str) { if (str == null) return false; if (str == "") return false; return true; }, twoLength: function(str) { if (str.length == 1) return "0" + str; else return str; }, substrArray: function(str, type) { var arr = new Array(); while (str.indexOf(type, 0) > 0) { arr.push(str.substr(0, str.indexOf(type, 0))); str = str.substr(str.indexOf(type, 0) + 1, str.length); } return arr; }, uccURL: function(path, name) { var url = path; if (url.substr(url.length - 1, 1) != "/") url += "/"; url += name; return url; }, formatDate: function(value) { var temp; temp = value.substring(0, 4) + "년"; temp += value.substring(4, 6) + "월"; temp += value.substring(6, 8) + "일"; temp += value.substring(8, 10) + "시"; temp += value.substring(10, 12) + "분"; return temp; }, ipCheck: function(__ip) { var str = ""; var classCount = 0; if (__ip.substr(__ip.length - 1, 1) == ".") { __ip = __ip.substring(0, __ip.length - 1); str = __ip; } else { str = __ip; } while (__ip.indexOf(".", 0) > 0) { __ip = __ip.substr(__ip.indexOf(".", 0) + 1, __ip.length - __ip.indexOf(".", 0)); classCount++; } if (classCount == 0) { return "error"; } for (var i = classCount; i < 3; i++) { str += ".0"; } return str; }, dateFormat: function(str) { var result = str; if (result != "" || result != null) { result = str.substring(0, 4) + "-" + str.substring(4, 6) + "-" + str.substring(6, 8); if (str.length > 8) { result += " " + str.substring(8, 10) + ":" + str.substring(10, 12) + ":" + str.substring(12, 14); } } return result; }, dateFormatByChar: function(str, char) { var result = str; if (result != "" || result != null) { result = str.substring(0, 4) + char + str.substring(4, 6); if (str.length > 6) { result += char + str.substring(6, 8); } if (str.length > 8) { result += " " + str.substring(8, 10) + ":" + str.substring(10, 12) + ":" + str.substring(12, 14); } } return result; }, serchpa: function(str) { if (str == null) return ""; var serc = str.search(str); return serc.toString(); }, lpadNew: function(str, iPadLength, strPadChar) { var strResult = str.toString(); for (var i = strResult.length; i < iPadLength; i++) { strResult = strPadChar + strResult; } return strResult; }, lpad: function(str, target_length, ch) { var ch00 = ""; for (var i = 0; i < Number(target_length); i++) { ch00 = ch00 +""+ ch.toString(); } str = ch00 +""+ str; return str; }, rpad: function(str, target_length, ch) { var ch00 = ""; for (var i = 0; i < target_length; i++) { ch00 = ch00 + ch; } str = str + ch00; return str; }, ltrim: function(str) { return str.replace(/(^[ ]*)/g, ""); }, rtrim: function(str) { return str.replace(/([ ]*$)/g, ""); }, replaceignoreCase: function(str, exp, rep) { while (str.indexOf(exp) > -1) { str = str.replace(exp, rep); } return str; }, checkJuminNo: function(objResNo) { var sum = 0; var resNo_len = objResNo.length; if (objResNo == null) return 1; if (resNo_len == 14) { objResNo = objResNo.replace("-", ""); } if (resNo_len != 13) { return 1; } for (var i = 0; i < 12; i++) { sum += parseInt(objResNo.substr(i, 1)) * (i % 8 + 2); } var achk = objResNo.substr(12, 1); var bchk = (11 - (sum % 11)) % 10; if (parseInt(achk) == bchk) { return 0; } return 1; }, checkEmail: function(obj) { var obj_length = obj.length; var regexp = /^[a-z][\w.-]+@\w[\w.-]+\.[\w.-]*[a-z][a-z]$/i; if (obj_length > 0) { if (!regexp.test(obj)) { return 0; } } return 1; }, isNumber: function(str) { return UT.isNumber(str); }, stripComma: function(str) { if (str == null) return ""; var str_num = str.replace(",", ""); return str_num; }, getInstance: function () { return StringUtil; }, checknull: function(str) { if (str == "undefined" || str == null || StringUtil.trim(str) == "null" || StringUtil.trim(str) == "") return true; else return false; }, getLastDay: function(day) { var lastDay = new Date(day); lastDay.setMonth(lastDay.getMonth() + 1, 0); return ("" + lastDay.getDate()); }, isNullTrim: function(str) { if (StringUtil.checknull(str) == true) return true; return StringUtil.checknull(StringUtil.trim(str)); }, /********************************* * emro.lib.util.StringUtil ********************************/ /** * 지원하지 않음 */ commaString: function () {}, getByteLength_o: function () {}, replacereplace: function () {}, getByteLength: function () {}, pad: function () {}, }; var ObjectUtil = { copy: function (value) { UT.copy(value); }, /** * Returns true if the object reference specified * is a simple data type. The simple data types include the following: *
    *
  • String
  • *
  • Number
  • *
  • uint
  • *
  • int
  • *
  • Boolean
  • *
  • Date
  • *
  • Array
  • *
* * @param value Object inspected. * * @return true if the object specified * is one of the types above; false otherwise. */ isSimple: function(value) { var type = typeof(value); switch (type) { case "number": case "string": case "boolean": { return true; }; case "object": { return (value instanceof Date) || (value instanceof Array); }; } return false; }, /** * Compares two numeric values. * * @param a First number. * * @param b Second number. * * @return 0 is both numbers are NaN. * 1 if only a is a NaN. * -1 if only b is a NaN. * -1 if a is less than b. * 1 if a is greater than b. */ numericCompare: function(a, b) { if (isNaN(a) && isNaN(b)) return 0; if (isNaN(a)) return 1; if (isNaN(b)) return -1; if (a < b) return -1; if (a > b) return 1; return 0; }, /** * Compares two String values. * * @param a First String value. * * @param b Second String value. * * @param caseInsensitive Specifies to perform a case insensitive compare, * true, or not, false. * * @return 0 is both Strings are null. * 1 if only a is null. * -1 if only b is null. * -1 if a precedes b. * 1 if b precedes a. */ stringCompare: function(a, b, caseInsensitive) { caseInsensitive = false || caseInsensitive; if (a == null && b == null) return 0; if (a == null) return 1; if (b == null) return -1; if (caseInsensitive) { a = a.toLocaleLowerCase(); b = b.toLocaleLowerCase(); } var result = a.localeCompare(b); if (result < -1) result = -1; else if (result > 1) result = 1;; return result; }, /** * Compares the two Date objects and returns an integer value * indicating if the first Date object is before, equal to, * or after the second item. * * @param a Date object. * * @param b Date object. * * @return 0 if a and b * are null or equal; * 1 if a is null * or before b; * -1 if b is null * or before a. */ dateCompare: function(a, b) { if (a == null && b == null) return 0; if (a == null) return 1; if (b == null) return -1; var na = a.getTime(); var nb = b.getTime(); if (na < nb) return -1; if (na > nb) return 1; return 0; }, /** * clone object * * @method clone * @param {object} object 복사할 대상 object * @param {String} object안에서 복사할 특정 인자 * @return {object} new object * @example * someFunction: function() { * var param = new Object; * param.tgt = 1; * param.tgt2 = 2; * me.set("cloneParam", UT.clone(param, 'tgt'));//tgt만 복사됨 * } */ clone: function(){ var args = Array.prototype.slice.call(arguments).splice(0); var tgtArg = args[0]; var argArr = args.slice(1, args.length); var clone; if (!argArr || argArr.length <= 0) { clone = UT.copy(tgtArg); } else { clone = tgtArg.constructor(); for (var i in argArr) { clone[argArr[i]] = tgtArg[argArr[i]]; } } return clone; }, /** * cloneEx object * * @method cloneEx * @param {object} object 복사할 대상 object * @param {String} object안에서 복사 제외할 특정 인자 * @return {object} new object * @example * someFunction: function() { * var param = new Object; * param.tgt = 1; * param.tgt2 = 2; * me.set("cloneParam", UT.cloneEx(param, 'tgt'));//tgt만 제외하고 복사됨 * } */ cloneEx: function(){ var args = Array.prototype.slice.call(arguments).splice(0); var tgtArg = args[0]; var argArr = args.slice(1, args.length); var cloneEx; if (!argArr || argArr.length <= 0) { cloneEx = UT.copy(tgtArg); } else { cloneEx = tgtArg.constructor(); var isCloneProp; for (var key in tgtArg) { isCloneProp = true; for(var i in argArr){ if(key == argArr[i]){ isCloneProp = false; break; } } if(isCloneProp){ cloneEx[key] = tgtArg[key]; } } } return cloneEx; }, /** 미제공 Dummy Function **/ compare: function() {}, toString: function() {}, getClassInfo: function() {}, hasMetadata: function() {}, isDynamicObject: function() {} };