E-bom 조회 레벨 검색 추가

This commit is contained in:
2025-11-13 12:24:33 +09:00
parent 031ce7615d
commit 333d05d19f
2 changed files with 135 additions and 31 deletions

View File

@@ -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){
<input type="hidden" name="search" id="search" value="Y">
<input type="hidden" name="actionType" id="actionType" value="" />
<input type="hidden" name="searchType" id="searchType" value="ascending" />
<input type="hidden" name="search_partNo_text" id="search_partNo_text" value="${param.search_partNo_text}" />
<input type="hidden" name="search_partName_text" id="search_partName_text" value="${param.search_partName_text}" />
<div class="min_part_enroll">
<div class="content-box">
<div class=""> <!-- content-box-s -->
@@ -766,16 +853,29 @@ function fn_excelExport(pGridObj,pFileName){
<select name="search_partNo" id="search_partNo" class="select2-part" style="width: 100%;">
<option value="">품번 선택</option>
</select>
<input type="hidden" name="search_partObjId" id="search_partObjId" value=""/>
<input type="hidden" name="search_partObjId" id="search_partObjId" value="${param.search_partObjId}"/>
</td>
<td class="align_r">
<label for="" class="">품명</label>
</td>
<td colspan="3">
<td>
<select name="search_partName" id="search_partName" class="select2-part" style="width: 100%;">
<option value="">품명 선택</option>
</select>
</td>
<td class="align_r">
<label for="" class="">표시 레벨</label>
</td>
<td>
<select name="search_level" id="search_level" class="select2" style="width: 100%;">
<option value="">선택</option>
<option value="1" ${param.search_level eq '1'?'selected':''}>1레벨</option>
<option value="2" ${param.search_level eq '2'?'selected':''}>2레벨</option>
<option value="3" ${param.search_level eq '3'?'selected':''}>3레벨</option>
<option value="4" ${param.search_level eq '4'?'selected':''}>4레벨</option>
<option value="5" ${param.search_level eq '5'?'selected':''}>5레벨</option>
</select>
</td>
<!-- <td class="align_r">
<label for="" class="">품번</label>
@@ -931,22 +1031,17 @@ function fn_excelExport(pGridObj,pFileName){
<tr class="dataTr" data-LEVEL="${item.LEVEL}" data-REAL_LEVEL="${item.LEV}" data-BOM_REPORT_OBJID="${item.BOM_REPORT_OBJID}" data-TOP_OBJID="${item.ROOT_OBJID}"
data-SUB_TOP_OBJID="${item.SUB_ROOT_OBJID}" data-OBJID="${item.PART_OBJID}${status.index}" style="display:none;">
<td>
<c:if test="${item.LEAF eq '0'}">
<c:choose>
<c:when test="${empty param.search_level}">
<img src="/images/btnMinus.png" width="13px" height="13px" class="btnToggle" style="${item.LEVEL eq '1' and item.LEAF eq '0'?'cursor:pointer;':''}" data-BOM_REPORT_OBJID="${item.BOM_REPORT_OBJID}"
data-OBJID="${item.PART_OBJID}${status.index}" data-REAL_LEVEL="${item.LEV}" data-TOP_OBJID="${item.ROOT_OBJID}" data-SUB_TOP_OBJID="${item.SUB_ROOT_OBJID}">
<c:choose>
<c:when test="${item.LEAF eq '0'}">
<!-- 하위 항목이 있음: Plus 아이콘 표시 -->
<img src="/images/btnPlus.png" width="13px" height="13px" class="btnToggle" style="cursor:pointer;" data-BOM_REPORT_OBJID="${item.BOM_REPORT_OBJID}"
data-OBJID="${item.PART_OBJID}${status.index}" data-REAL_LEVEL="${item.LEV}" data-TOP_OBJID="${item.ROOT_OBJID}" data-SUB_TOP_OBJID="${item.SUB_ROOT_OBJID}">
</c:when>
<c:when test="${param.search_level > item.LEV}">
<img src="/images/btnMinus.png" width="13px" height="13px" class="btnToggle" style="${item.LEVEL eq '1' and item.LEAF eq '0'?'cursor:pointer;':''}" data-BOM_REPORT_OBJID="${item.BOM_REPORT_OBJID}"
data-OBJID="${item.PART_OBJID}${status.index}" data-REAL_LEVEL="${item.LEV}" data-TOP_OBJID="${item.ROOT_OBJID}" data-SUB_TOP_OBJID="${item.SUB_ROOT_OBJID}">
</c:when>
<c:when test="${param.search_level <= item.LEV}">
<img src="/images/btnPlus.png" width="13px" height="13px" class="btnToggle" style="${item.LEVEL eq '1' and item.LEAF eq '0'?'cursor:pointer;':''}" data-BOM_REPORT_OBJID="${item.BOM_REPORT_OBJID}"
data-OBJID="${item.PART_OBJID}${status.index}" data-REAL_LEVEL="${item.LEV}" data-TOP_OBJID="${item.ROOT_OBJID}" data-SUB_TOP_OBJID="${item.SUB_ROOT_OBJID}">
</c:when>
</c:choose>
</c:if>
<c:otherwise>
<!-- 하위 항목이 없음: - 표시 -->
<span style="display:inline-block; width:13px; text-align:center; color:#999;">-</span>
</c:otherwise>
</c:choose>
</td>
<c:forEach var="i" begin="1" end="${item.MAX_LEVEL}">
<c:if test="${item.LEVEL eq i}">