JS 기본 구조 및 기본 함수
자재관리 > 구매관리 > 구매요청 을 기준으로 설명
/**
* Date: 최초작성일
* Author: 작성자
* Description: 메뉴명
*
**/
var GP_SM_PR_003 = {
//전역 변수
initMessage: undefined,
// 초기화 함수
init : function(){
let that = this;
that.event();
},
event: function() {
let that = this;
},
ajaxFunc : function (url, WEBDATA, msg) {
let that = this;
ngsWidget.ajax(0, 'C', url, WEBDATA, function (index, result, data) {
ngsWidget.splashHide();
if (result != 'SUCCESS') {
setTimeout(() => {
ngsWidget.messageBox({type: 'danger', html: ngsLang.getLang(data.errMsg)});
}, 50);
return;
}
setTimeout(() => {
ngsWidget.messageBox({type: 'success', html: ngsLang.getLang(msg)});
$('#findBtn1').click();
}, 50);
}, undefined, {index: 0, op: 'process', seq: 1, spec: 'JOB', product: 'MES'}, false, that);
},
popUpSaveCallBack: function (index, data, rowIndex, popupName) {
},
//#region 조회조건 기간 SETTING
getMonth : (diff) => {
const today = new Date();
const month = new Date(today.getFullYear(), today.getMonth() + diff, 1);
const fromDate = new Date(month.getFullYear(), month.getMonth(), 1);
const toDate = new Date(month.getFullYear(), month.getMonth() + 1, 0);
return { fromDate, toDate };
},
getDay : (diff) => {
const today = new Date();
const fromDate = new Date(today.setDate(today.getDate() + diff));
const toDate = fromDate;
return { fromDate, toDate };
},
convertToyyyyMMdd : (date) => {
if (date) {
const year = date.getFullYear();
const month = String(date.getMonth() + 1).padStart(2, '0');
const day = String(date.getDate()).padStart(2, '0');
return `${year}-${month}-${day}`;
}
return null;
},
//#endregion
};
// 문서 로드 완료 후 초기화
$(document).ready(() => {
ngsWidget.init(1, "GRID", "GP_SM_PR_003", GP_SM_PR_003);
GP_SM_PR_003.init();
});
Init Callback 함수
retrieveCallInit: function(index, param, callBackParam, indexInfo)
retrieveCallBack: function(index, result, data, param, callBackParam, indexInfo)
saveCallInit: function(index, param, callBackParam, indexInfo)
saveCallBack: function(index, result, data, param, callBackParam, indexInfo)
delCallInit: function(index, param, callBackParam, indexInfo)
delCallBack: function(index, result, data, param, callBackParam, indexInfo)
addRowCallInit: function(index, param, callBackParam, indexInfo)
addRowCallBack: function(index, param, callBackParam, indexInfo)
addBottomRowCallInit: function(index, param, callBackParam, indexInfo)
addBottomRowCallBack: function(index, param, callBackParam, indexInfo)
excelDownCallInit: function(index, param, callBackParam, indexInfo)
excelViewDownCallInit: function(index, param, callBackParam, indexInfo)
excelGridCallBack: function(index)
openPopUpCallInit: function(index, e)
openPopUpCallBack: function(idx, e)
closePopUpCallInit: function(idx, e)
closePopUpCallBack: function(idx, e)
cellEditBeginCallBack : function(index, e)
cellClickCallInit : function(index, e)
cellClickCallBack : function(index, e)
cellEditEndBeforeCallBack : function(index, e)
pageLoadedCallBack : function(index, widget)
jqxComboBoxSelectCallBack : function(dataField, which, value)
cellEditAutoValidateCallBack: function(index, e)
gridPropertyChangeCallBack: function(index, property)
retrieveCallInit: function(index, param, callBackParam, indexInfo) {
//조회 시, Data Validation(필수 항목 및 기타 Validation) 이 부합되면 조회 연산 가장 맨앞에 호출되는 함수 조회 연산 또는 저장/수정/삭제 후에는 재조회가 되며 retrieveCallInit이 실행된다.
//index: 위젯 index (어떤 위젯에서 조회가 발생되었는지, 순번은 0부터 시작: 0은 1번 grid를 의미함)
//param: 조회할 데이터 값 (1차원 JSON 값으로 전달되며, 필터영역에서 검색 시 입력한 값이 담겨있음)이 전달되며, 함수내에서 데이터 변조 가능(파라미터를 추가하거나 제거 하는 등의 변조가 가능하다)
//callBackParam: 현재의 연산(조회) 후, 다음 연산이 정의 되어 있다면(Transaction 연산 - 위젯 세팅시, 컬럼타입으로 'ACTION' 을 통해 정의 가능) 다음 연산의 파라미터 값
indexInfo: { // 현재 작업의 기본 정보
index: 0 // 첫번째 그리드 조회
, op: 'findBtn1' // 연산의 트리거, DOM 상에서의 id 값
, seq: 1 // Transaction 연산의 순번, 현재 연산(조회)이 트랜잭션상의 첫번째 연산이면 1
, spec: 'ACTION' // 연산의 구분 ['FILTER', 'GRID', 'ACTION', 'JOB'] 등이 올 수 있다
, product: 'AMING' // 현재 연산(조회)의 Target 제품 ['AMING', 'MES', 'QMS', 'APS', 'WMS', 'SCM', ...]
}
retrieveCallBack: function(index, result, data, param, callBackParam, indexInfo){
//조회 후 호출되는 함수이다. 조회가 성공하여 얻은 데이터로 원하는 동작을 수행할 수 있다. (ex. 위젯에서 보여지는 데이터의 표기 변경 등, 변조 가능)
//index: 상기의 retrieveCallInit 과 동일(참조)
//result: 조회 성공 여부. 성공 시 SUCCESS, [SUCCESS, ERROR, FAIL]
//data: 조회로 받아온 JSON Array 데이터 값(만약, 조회된 데이터를 변조하고 싶다면, 데이터를 변경할 수 있다)
//param: 상기의 retrieveCallInit 과 동일(참조)
//callBackParam: 상기의 retrieveCallInit 과 동일(참조)
//indexInfo: 상기의 retrieveCallInit 과 동일(참조)
}
saveCallInit: function(index, param, callBackParam, indexInfo){
//저장/수정/삭제 시 연산 가장 맨앞에 호출되는 함수 저장의 경우, saveBtn, 저장/수정/삭제는 셀편집(수정) 또는 delLazyBtn 을 통해 삭제 후, saveAllBtn, upsertAllBtn을 사용했을 시 불리운다.
//index: 위젯 index (어떤 위젯에서 저장/수정/삭제가 발생되었는지, 순번은 0부터 시작: 0은 1번 grid를 의미함)
//param: 저장/수정/삭제할 데이터 값 (2차원 JSON 값 - JSON Array 형태, 원소가 1개이어도 [{}] 의 형태)이 전달되며, 함수내에서 데이터 변조 가능(개별 원소는 JSON key 'NEW' 값에 의해 저장/수정/삭제 - Y/U/D 를 확인할 수 있다)
//callBackParam: 현재의 연산(저장/수정/삭제) 후, 다음 연산이 정의 되어 있다면(Transaction 연산 - 위젯 세팅시, 컬럼타입으로 'ACTION' 을 통해 정의 가능) 다음 연산의 파라미터 값
indexInfo: { // 현재 작업의 기본 정보
index: 0 // 첫번째 그리드 저장/수정/삭제
, op: 'saveAllBtn1' // 연산의 트리거, DOM 상에서의 id 값
, seq: 1 // Transaction 연산의 순번, 현재의 연산(저장/수정/삭제)이 트랜잭션상의 첫번째 연산이면 1
, spec: 'ACTION' // 연산의 구분 ['FILTER', 'GRID', 'ACTION', 'JOB'] 등이 올 수 있다
, product: 'AMING' // 현재의 연산(저장/수정/삭제)의 Target 제품 ['AMING', 'MES', 'QMS', 'APS', 'WMS', 'SCM', ...]
}
saveCallBack: function(index, result, data, param, callBackParam, indexInfo){
//저장/수정/삭제 후 호출되는 함수이다. 저장의 성공/실패의 결과로 원하는 동작을 수행할 수 있다. saveBtn, saveAllBtn, upsertAllBtn 모두가 이 callBack 함수를 거친다.
//index: 상기의 saveCallInit 과 동일(참조)
//result: 저장/수정/삭제 성공 여부. 성공 시 SUCCESS, [SUCCESS, ERROR, FAIL]
//data: 저장/수정/삭제 결과의 JSON 데이터 값
//param: 상기의 saveCallInit 과 동일(참조)
//callBackParam: 상기의 saveCallInit 과 동일(참조)
//indexInfo: 상기의 saveCallInit 과 동일(참조)
}
delCallInit: function(index, param, callBackParam, indexInfo){
//HTML DOM 상에서, 기능버튼 delBtn(즉시 삭제) 연산시 맨앞에 호출되는 함수
//index: 위젯 index (어떤 위젯에서 삭제가 발생되었는지, 순번은 0부터 시작: 0은 1번 grid를 의미함)
//param: 삭제할 데이터 값 (2차원 JSON 값 - JSON Array 형태, 원소가 1개이어도 [{}] 의 형태)이 전달되며, 함수내에서 삭제할 데이터 변조 가능
//callBackParam: 현재의 연산(삭제) 후, 다음 연산이 정의 되어 있다면(Transaction 연산 - 위젯 세팅시, 컬럼타입으로 'ACTION' 을 통해 정의 가능) 다음 연산의 파라미터 값
indexInfo:{ // 현재 작업의 기본 정보
index: 0 // 첫번째 그리드 조회
, op: 'delBtn1' // 연산의 트리거, DOM 상에서의 id 값
, seq: 1 // Transaction 연산의 순번, 조회가 트랜잭션상의 첫번째 연산이면 1
, spec: 'ACTION' // 연산의 구분 ['FILTER', 'GRID', 'ACTION', 'JOB'] 등이 올 수 있다
, product: 'AMING' // 현재 조회 연산의 Target 제품 ['AMING', 'MES', 'QMS', 'APS', 'WMS', 'SCM', ...]
}
delCallBack: function(index, result, data, param, callBackParam, indexInfo){
//delBtn(즉시 삭제) 시 불리운다.
//index: 상기의 delCallInit 과 동일(참조)
//result: 삭제 성공 여부. 성공 시 SUCCESS, [SUCCESS, ERROR, FAIL]
//data: 삭제 결과의 JSON 데이터 값
//param: 상기의 delCallInit 과 동일(참조)
//callBackParam: 상기의 delCallInit 과 동일(참조)
//indexInfo: 상기의 delCallInit 과 동일(참조)
}
addRowCallInit: function(index, param, callBackParam, indexInfo){
//상단 행 추가 시 초기에 호출되는 함수이다. (ex. param에 값을 추가하여 원하는 데이터 바인딩 등)
//index: 위젯 index (어떤 위젯에서 삭제가 발생되었는지, 순번은 0부터 시작: 0은 1번 grid를 의미함)
//param: 새로 추가된 JSON 데이터가 전달된다(새로 행으로 추가된 데이터이므로 기본적으로 {'NEW': 'Y} 데이터가 전부이다. 새로 추가되는 행에 알고 있는 기본 정보를 추가할 수도 있다)
//callBackParam: 현재의 연산(행추가) 후, 다음 연산의 파라미터 값이지만 정의되어져 있는 것이 없으므로 거의 undefined 의 값이 넘어간다
indexInfo:{ // 현재 작업의 기본 정보
index: 0 // 첫번째 그리드 조회
, op: 'addBtn1' // 연산의 트리거, DOM 상에서의 id 값
, seq: 1 // Transaction 연산의 순번, 조회가 트랜잭션상의 첫번째 연산이면 1
, spec: 'JOB' // 연산의 구분 ['FILTER', 'GRID', 'ACTION', 'JOB'] 등이 올 수 있다
}
addRowCallBack: function(index, param, callBackParam, indexInfo){
//상단 행 추가 시 마지막에 호출되는 함수이다.
//index: 상기의 addRowCallInit 과 동일(참조)
//param: 상기의 addRowCallInit 과 동일(참조)
//callBackParam: 상기의 addRowCallInit 과 동일(참조)
//indexInfo: 상기의 addRowCallInit 과 동일(참조)
}
addBottomRowCallInit: function(index, param, callBackParam, indexInfo){
//하단 행 추가 시 초기에 호출되는 함수이다.(ex. param에 값을 추가하여 원하는 데이터 바인딩 등)
//index: 위젯 index (어떤 위젯에서 삭제가 발생되었는지, 순번은 0부터 시작: 0은 1번 grid를 의미함)
//param: 새로 추가된 JSON 데이터가 전달된다(새로 행으로 추가된 데이터이므로 기본적으로 {'NEW': 'Y} 데이터가 전부이다. 새로 추가되는 행에 알고 있는 기본 정보를 추가할 수도 있다)
//callBackParam: 현재의 연산(행추가) 후, 다음 연산의 파라미터 값이지만 정의되어져 있는 것이 없으므로 거의 undefined 의 값이 넘어간다
indexInfo:{ // 현재 작업의 기본 정보
index: 0 // 첫번째 그리드 조회
, op: 'addBottomBtn1'// 연산의 트리거, DOM 상에서의 id 값
, seq: 1 // Transaction 연산의 순번, 조회가 트랜잭션상의 첫번째 연산이면 1
, spec: 'JOB' // 연산의 구분 ['FILTER', 'GRID', 'ACTION', 'JOB'] 등이 올 수 있다
}
addBottomRowCallBack: function(index, param, callBackParam, indexInfo){
//하단 행 추가 시 마지막에 호출되는 함수이다.
//index: 상기의 addBottomRowCallInit 과 동일(참조)
//param: 상기의 addBottomRowInit 과 동일(참조)
//callBackParam: 상기의 addBottomRowInit 과 동일(참조)
//indexInfo: 상기의 addBottomRowInit 과 동일(참조)
}
excelDownCallInit: function(index, param, callBackParam, indexInfo){
//엑셀 다운 시 초기에 호출되는 함수이다. 엑셀을 내릴 때 형식, 컬럼 등을 변경하고 싶을 경우 사용할 수 있다.개별 페이지의 로컬 변수로 excelDownParam 이 undefined 가 아니면, 엑셀 다운로드 시, 위젯 세팅을 참고하는 것이 아닌 columnProperty 로서, excelDownParam 을 더 우선(재정의) 하여 따르게 된다. 엑셀 다운로드의 정책을 위젯 세팅이 아닌 변경하고 싶을 시, 사용할 수 있다(내리는 컬럼 수정(Show/Hide), 컬럼명, 배경색 etc..)
//index: 위젯 index (어떤 위젯에서 엑셀 다운로드가 발생되었는지, 순번은 0부터 시작: 0은 1번 grid를 의미함)
//param: to-be 데이터이며 현재는 undefined 값이 넘어 간다
//callBackParam: to-be 데이터이며 현재는 undefined 값이 넘어 간다
//indexInfo: 현재 작업의 기본 정보를 넘기나, to-be 데이터이며 현재는 undefined 값이 넘어 간다
}
excelViewDownCallInit: function(index, param, callBackParam, indexInfo){
//엑셀 뷰 다운(실 데이터보다 보여지는 데이터로 엑셀을 내리는) 시 초기에 호출되는 함수이다. 엑셀을 내릴 때 형식, 컬럼 등을 변경하고 싶을 경우 사용할 수 있다. 개별 페이지의 로컬 변수로 excelDownParam 이 undefined 가 아니면, 엑셀 다운로드 시, 위젯 세팅을 참고하는 것이 아닌 columnProperty 로서, excelDownParam 을 더 우선(재정의) 하여 따르게 된다. 엑셀 다운로드의 정책을 위젯 세팅이 아닌 변경하고 싶을 시, 사용할 수 있다(내리는 컬럼 수정(Show/Hide), 컬럼명, 배경색 etc..)
//index: 위젯 index (어떤 위젯에서 엑셀 다운로드가 발생되었는지, 순번은 0부터 시작: 0은 1번 grid를 의미함)
//param: to-be 데이터이며 현재는 undefined 값이 넘어 간다
//callBackParam: to-be 데이터이며 현재는 undefined 값이 넘어 간다
//indexInfo: 현재 작업의 기본 정보를 넘기나, to-be 데이터이며 현재는 undefined 값이 넘어 간다
}
excelGridCallBack: function(index){
//엑셀 업로드 시 콜백 함수이다. 방금 업로드한 데이터를 변경하고 싶은 경우 사용할 수 있다.
//index: 위젯 index (어떤 위젯에서 엑셀 업로드가 발생되었는지, 순번은 0부터 시작: 0은 1번 grid를 의미함)
}
openPopUpCallInit: function(index, e){
//팝업을 열 때 초기에 호출되는 함수이다.(ex. 필수입력사항 validation 체크, 선택된 행 클릭 시 열리는 팝업인 경우 선택된 상태인지 체크 등)
//index: 팝업 창 index (어떤 팝업이 열리고 있는지, 11번 팝업을 여는 중이면, index: 10)
//e: 팝업 이벤트 객체, target, offsetX, offsetY, type, altKey, … etc
}
openPopUpCallBack: function(idx, e)){
//팝업을 열고 난 후 호출되는 함수이다.(ex. 팝업의 value값 바인딩 등)
//index: 팝업 창 index (어떤 팝업을 열었는지, 11번 팝업을 열었다면, index: 10)
//e: 팝업 이벤트 객체, target, offsetX, offsetY, type, altKey, … etc
}
closePopUpCallInit: function(idx, e){
//팝업을 닫을 때 호출되는 함수이다.
//index: 팝업 창 index (어떤 팝업을 닫고 있는지, 11번 팝업을 닫는다면, index: 10)
//e: 팝업 이벤트 객체, target, offsetX, offsetY, type, altKey, … etc
}
closePopUpCallBack: function(idx, e){
//팝업을 닫고 난 후 호출되는 함수이다.(ex. 팝업이 열렸던 그리드의 행에 포커스 등)
//index: 팝업 창 index (어떤 팝업을 닫았는지, 11번 팝업을 닫았다면, index: 10)
//e: 팝업 이벤트 객체, target, offsetX, offsetY, type, altKey, … etc
}
cellEditBeginCallBack : function(index, e){
//셀 편집이 시작될 때 호출되는 함수이다.
//index: 셀편집 위젯 index (어떤 그리드에 대해 편집을 하려는지, 순번은 0부터 시작: 0은 1번 grid를 의미함)
//e: 셀편집 이벤트 객체, type, pid, item, dataField, rowIndex, columnIndex … etc
}
cellClickCallInit : function(index, e) {
//셀 클릭 시 호출되는 함수이다. 선택한 셀의 정보를 알 수 있고, 셀 클릭 시 원하는 동작을 수행할 수 있다.
//index: 셀클릭 위젯 index (어떤 그리드에 대해 클릭을 했는지, 순번은 0부터 시작: 0은 1번 grid를 의미함)
//e: 셀클릭 이벤트 객체, type, pid, item, dataField, rowIndex, columnIndex … etc
}
cellClickCallBack : function(index, e){
//셀 클릭 후에 호출되는 함수이다.
//index: 셀클릭 위젯 index (어떤 그리드에 대해 클릭을 했는지, 순번은 0부터 시작: 0은 1번 grid를 의미함)
//e: 셀클릭 이벤트 객체, type, pid, item, dataField, rowIndex, columnIndex … etc
}
cellEditEndBeforeCallBack : function(index, e){
//셀 편집 후 포커스가 나갈 때 호출되는 함수이다.
//index: 셀편집 위젯 index (어떤 그리드에 대해 편집을 했는지, 순번은 0부터 시작: 0은 1번 grid를 의미함)
//e: 셀편집 이벤트 객체, type, pid, item, dataField, rowIndex, columnIndex, value, oldValue … etc
}
pageLoadedCallBack : function(index, widget){
//페이지가 로딩되고 난 후 호출되는 함수이다.
//index: loaded 위젯 index (어떤 그리드에 대해 loading이 완료 되었는지, 순번은 0부터 시작: 0은 1번 grid를 의미함)
//widget: ngsWidget 객체를 전달해 준다
}
jqxComboBoxSelectCallBack : function(dataField, which, value){
//드롭다운 값을 선택할 때 호출되는 함수이다.
//dataField: 드롭다운의 데이터필드값
//which: 선택한 value의 index
//value: 선택한 value의 code
}
cellEditAutoValidateCallBack: function(index, e){
//Grid 편집모드일 경우 validate 할 함수를 반환한다.
return function(prevVal, inputVal, curVal) {
// 이전값 : prevVal, 입력된값 : inputVal, 현재 전체값 : curVal
if(e.dataField == "데이터필드") {
var pattern = /^[a-zA-Zs]+$/;
if (!pattern.test(inputVal) == true) { // 영어아닐 경우
return false;
}
}
return true;
//index: 셀편집 위젯 index (어떤 그리드에 대해 편집을 하려는지, 순번은 0부터 시작: 0은 1번 grid를 의미함)
//e: 셀편집 이벤트 객체, type, pid, item, dataField, rowIndex, columnIndex … etc
}
gridPropertyChangeCallBack: function(index, property){
//페이지가 로드될 때 실행되어 그리드 속성을 변경할 수 있다. Property를 return해주어야 한다.(ex. property[key] = value; return property)
//index: 위젯 index (default로 0)
//property: 해당 페이지의 widget 설정값
}
pageLoadedCallBack
page가 로드된 뒤 동작이 필요할 경우 사용하는 함수
pageLoadedCallBack: function(index, widget) {
$('#findBtn1').trigger('click');
},
findBtn은 검색 버튼으로 Gird 별로 생성하고 findBtn1을 제외한 2,3... 다른 버튼은 숨김 처리 한다.
Last updated