diff --git a/WebContent/WEB-INF/view/quality/processInspectionFormPopUp.jsp b/WebContent/WEB-INF/view/quality/processInspectionFormPopUp.jsp index 129c0d1..302a40e 100644 --- a/WebContent/WEB-INF/view/quality/processInspectionFormPopUp.jsp +++ b/WebContent/WEB-INF/view/quality/processInspectionFormPopUp.jsp @@ -144,26 +144,15 @@ $(document).ready(function(){ fn_search(); }); -// 프로젝트별 파트 목록 캐시 -var _PART_LIST_CACHE = {}; - -// 프로젝트번호로 MBOM 파트 목록 조회 +// 프로젝트번호로 MBOM 파트 목록 조회 (미선택 시 전체 조회) function fn_getPartListByProject(projectNo) { - if (!projectNo) return [{"CODE": "", "NAME": "선택"}]; + var param = {"sqlId": "common.getMbomPartListByProjectNo"}; + if (projectNo) param.PROJECT_NO = projectNo; - // 캐시에 있으면 캐시에서 반환 - if (_PART_LIST_CACHE[projectNo]) { - return _PART_LIST_CACHE[projectNo]; - } - - // 서버에서 조회 var partList = [{"CODE": "", "NAME": "선택"}].concat( - fnc_getJsonAllDataListBySqlId({"sqlId": "common.getMbomPartListByProjectNo", "PROJECT_NO": projectNo}) + fnc_getJsonAllDataListBySqlId(param) ); - // 캐시에 저장 - _PART_LIST_CACHE[projectNo] = partList; - return partList; } @@ -207,30 +196,32 @@ function fn_select2Editor(cell, onRendered, success, cancel, editorParams) { $(select).select2("open"); }); - var isCleared = false; + var isCompleted = false; $(select).on("select2:select", function(e) { + if(isCompleted) return; + isCompleted = true; var selectedVal = $(select).val() || ""; - if(typeof editorParams.onSelect === "function") { - editorParams.onSelect(cell, selectedVal); - } + try { $(select).select2("destroy"); } catch(e) {} success(selectedVal); }); $(select).on("select2:clear", function(e) { - isCleared = true; - if(typeof editorParams.onSelect === "function") { - editorParams.onSelect(cell, ""); - } + if(isCompleted) return; + isCompleted = true; + var $sel = $(select); setTimeout(function() { - $(select).select2("close"); + try { $sel.select2("destroy"); } catch(e) {} success(""); - }, 0); + }, 50); }); $(select).on("select2:close", function() { - if(isCleared) return; - success($(select).val() || ""); + if(isCompleted) return; + isCompleted = true; + var val = $(select).val() || ""; + try { $(select).select2("destroy"); } catch(e) {} + success(val); }); return container; @@ -270,21 +261,7 @@ function fn_search(){ editor: fn_select2Editor, editorParams: { valueId: "CODE", labelId: "NAME", values: _PROJECT_LIST, - placeholder: "프로젝트 검색...", - onSelect: function(cell, selectedValue) { - var productName = ""; - for(var i = 0; i < _PROJECT_LIST.length; i++) { - if(_PROJECT_LIST[i].CODE == selectedValue) { - productName = _PROJECT_LIST[i].PRODUCT_NAME || ""; - break; - } - } - if(selectedValue) fn_getPartListByProject(selectedValue); - cell.getRow().update({ - "PART_OBJID": "", "PART_NO": "", "PART_NAME": "", - "PRODUCT_NAME": productName - }); - } + placeholder: "프로젝트 검색..." }, formatter: function(cell) { return fnc_customSelectFormatter(cell, {valueId:"CODE", labelId:"NAME", values:_PROJECT_LIST}); @@ -412,11 +389,28 @@ function fn_search(){ var row = cell.getRow(); var field = cell.getField(); + // 프로젝트 변경 시 제품구분 설정 + 파트 초기화 + if (field === 'PROJECT_OBJID') { + var projectObjid = cell.getValue() || ""; + var productName = ""; + for(var i = 0; i < _PROJECT_LIST.length; i++) { + if(_PROJECT_LIST[i].CODE == projectObjid) { + productName = _PROJECT_LIST[i].PRODUCT_NAME || ""; + break; + } + } + fn_getPartListByProject(projectObjid); + row.update({ + "PART_OBJID": "", "PART_NO": "", "PART_NAME": "", + "PRODUCT_NAME": productName + }); + } + // 파트 선택 시 품번/품명 자동 설정 if (field === 'PART_OBJID') { var partObjid = cell.getValue(); var projectObjid = row.getData().PROJECT_OBJID; - if (partObjid && projectObjid) { + if (partObjid) { var partList = fn_getPartListByProject(projectObjid); for (var i = 0; i < partList.length; i++) { if (partList[i].CODE == partObjid) { diff --git a/src/com/pms/mapper/common.xml b/src/com/pms/mapper/common.xml index d75a13e..ec93bdb 100644 --- a/src/com/pms/mapper/common.xml +++ b/src/com/pms/mapper/common.xml @@ -3407,17 +3407,32 @@ ORDER BY COALESCE(T.REVISION, '1.0') \ No newline at end of file