diff --git a/WebContent/WEB-INF/view/partMng/structureAscendingList.jsp b/WebContent/WEB-INF/view/partMng/structureAscendingList.jsp index 78ecd16..9005caa 100644 --- a/WebContent/WEB-INF/view/partMng/structureAscendingList.jsp +++ b/WebContent/WEB-INF/view/partMng/structureAscendingList.jsp @@ -26,6 +26,48 @@ $(document).ready(function(){ debug: false // 디버깅 모드 비활성화 }); + // Select2 선택 시 텍스트 저장 + $('#search_partNo').on('select2:select', function (e) { + var data = e.params.data; + $('#search_partNo_text').val(data.text); + }); + + $('#search_partName').on('select2:select', function (e) { + var data = e.params.data; + $('#search_partName_text').val(data.text); + }); + + // 이전 검색 조건 복원 + setTimeout(function(){ + var prevPartNoText = '${param.search_partNo_text}'; + var prevPartNameText = '${param.search_partName_text}'; + var prevPartNo = '${param.search_partNo}'; + var prevPartName = '${param.search_partName}'; + var prevPartObjId = '${param.search_partObjId}'; + + console.log("=== 검색 조건 복원 ==="); + console.log("prevPartNoText:", prevPartNoText); + console.log("prevPartNameText:", prevPartNameText); + console.log("prevPartNo:", prevPartNo); + console.log("prevPartName:", prevPartName); + console.log("prevPartObjId:", prevPartObjId); + + // 품번과 품명은 같은 OBJID를 사용하므로, 둘 중 하나만 복원 + if(prevPartNoText && prevPartNo){ + // 품번이 선택되어 있었던 경우 + console.log("품번 복원:", prevPartNoText, prevPartNo); + var newOption = new Option(prevPartNoText, prevPartNo, true, true); + $('#search_partNo').append(newOption).trigger('change'); + $('#search_partObjId').val(prevPartNo); + } else if(prevPartNameText && prevPartName){ + // 품명이 선택되어 있었던 경우 + console.log("품명 복원:", prevPartNameText, prevPartName); + var newOption = new Option(prevPartNameText, prevPartName, true, true); + $('#search_partName').append(newOption).trigger('change'); + $('#search_partObjId').val(prevPartName); + } + }, 500); + $("#mainGrid").jqGrid({ height : 630, colNames : headerNames, @@ -82,12 +124,30 @@ $(document).ready(function(){ //정전개 조회 $("#btnSearchAscending").click(function(){ + // 품번 또는 품명 필수 체크 + var partNo = $.trim($("#search_partNo").val()); + var partName = $.trim($("#search_partName").val()); + + if(!partNo && !partName){ + Swal.fire('품번 또는 품명을 선택해 주세요'); + return; + } + $("#searchType").val("ascending"); fn_search(); }); //역전개 조회 $("#btnSearchDescending").click(function(){ + // 품번 또는 품명 필수 체크 + var partNo = $.trim($("#search_partNo").val()); + var partName = $.trim($("#search_partName").val()); + + if(!partNo && !partName){ + Swal.fire('품번 또는 품명을 선택해 주세요'); + return; + } + $("#searchType").val("descending"); fn_search(); }); @@ -100,18 +160,43 @@ $(document).ready(function(){ fn_excelExport($("#mainGrid"),"BOM_REPORT_정전개"); }); - var search_level = '${param.search_level}'; - $(".dataTr").each(function(i){ - var lev = $(this).attr("data-LEVEL"); - //if(lev == 1){ //1level만 활성화 - if(!fnc_isEmpty(search_level)){ //검색조건 LEVEL까지만 활성화 - if(Number(lev) <= Number(search_level)){ //검색조건 LEVEL까지만 활성화 - $(this).show(); + // 초기 로딩 시 레벨에 따라 표시 (검색 결과 기준) + setTimeout(function(){ + var searchLevel = '${param.search_level}'; // 검색 조건의 레벨 + + // 최소 레벨 찾기 + var minLevel = 999; + $(".dataTr").each(function(){ + var lev = parseInt($(this).attr("data-LEVEL")); + if(lev < minLevel){ + minLevel = lev; } - }else{ - $(this).show(); //전체 펼치기 + }); + + // 표시할 최대 레벨 결정 + var maxDisplayLevel = minLevel; // 기본값: 최소 레벨만 + if(searchLevel && searchLevel != ''){ + maxDisplayLevel = parseInt(searchLevel); } - }); + + console.log("최소 레벨:", minLevel, "표시할 최대 레벨:", maxDisplayLevel); + + // 지정된 레벨까지 표시 + $(".dataTr").each(function(){ + var lev = parseInt($(this).attr("data-LEVEL")); + if(lev <= maxDisplayLevel){ + $(this).show(); + + // 표시된 항목 중 하위가 있고 아직 펼쳐지지 않은 항목은 Minus 아이콘으로 변경 + if(lev < maxDisplayLevel){ + var $img = $(this).find(".btnToggle"); + if($img.length > 0 && $img.attr("src").indexOf("Plus") > -1){ + $img.attr("src", "/images/btnMinus.png"); + } + } + } + }); + }, 100); // DOM 로딩 대기 /* //클릭시 하위정보를 토글한다. $(".dataTr").click(function(){ @@ -707,6 +792,8 @@ function fn_excelExport(pGridObj,pFileName){ + +
@@ -766,16 +853,29 @@ function fn_excelExport(pGridObj,pFileName){ - + - + + + + + + + + - - - - - - - - + + + - + + diff --git a/src/com/pms/mapper/partMng.xml b/src/com/pms/mapper/partMng.xml index 01b0b45..8b962e5 100644 --- a/src/com/pms/mapper/partMng.xml +++ b/src/com/pms/mapper/partMng.xml @@ -6038,7 +6038,7 @@ SELECT T1.LEV, T1.BOM_REPORT_OBJID, T1.ROOT_PART_NO, T1.PATH, T1.LEAF, T2.* BT.ITEM_QTY, BT.QTY AS QTY_TEMP, BT.SEQ, - BT.LEAF, + -- BT.LEAF, -- 재귀 CTE의 LEAF는 항상 0이므로 제거 (아래에서 재계산) -- PART 정보 PM.OBJID AS PART_OBJID, PM.PART_NO, @@ -6424,12 +6424,21 @@ SELECT T1.LEV, T1.BOM_REPORT_OBJID, T1.ROOT_PART_NO, T1.PATH, T1.LEAF, T2.* ) SELECT BT.BOM_REPORT_OBJID, - BT.LEV, - BT.LEV AS LEVEL, + -- 역전개는 레벨을 거꾸로 표시 (최상위가 1레벨) + (ML.MAX_LEVEL - BT.LEV + 1) AS LEV, + (ML.MAX_LEVEL - BT.LEV + 1) AS LEVEL, BT.QTY, BT.ITEM_QTY, BT.QTY AS P_QTY, BT.SEQ, + -- LEAF 계산 (역전개: 하위 항목이 있는지 체크 - 정전개와 동일) + ( + SELECT CASE WHEN COUNT(*) > 0 THEN 0 ELSE 1 END + FROM BOM_PART_QTY BPQ2 + WHERE BPQ2.PARENT_OBJID = BT.CHILD_OBJID + AND BPQ2.BOM_REPORT_OBJID = BT.BOM_REPORT_OBJID + AND COALESCE(BPQ2.STATUS, '') NOT IN ('deleting', 'deleted') + ) AS LEAF, -- PART 정보 PM.OBJID AS PART_OBJID, PM.PART_NO, @@ -6472,7 +6481,7 @@ SELECT T1.LEV, T1.BOM_REPORT_OBJID, T1.ROOT_PART_NO, T1.PATH, T1.LEAF, T2.* ORDER BY PBR.REGDATE DESC, - BT.LEV, + (ML.MAX_LEVEL - BT.LEV + 1), -- 역전개: 레벨 역순 BT.PATH