/**
* 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() {}
};