feat: 품번/품명 Select2 AJAX 검색 기능 추가
- common.js에 initPartSelect2Ajax 함수 추가 (기존 select2 영향 없음) - estimateList_new.jsp: 품번/품명 AJAX 검색 적용 - orderMgmtList.jsp: 품번/품명 AJAX 검색 적용 - 디버깅 로그 추가로 문제 해결 용이
This commit is contained in:
@@ -3255,4 +3255,182 @@ function fnc_tabulCallbackFnc(objid, docType, columnField, fileCnt){
|
||||
});
|
||||
}
|
||||
|
||||
//tabulator용 Function 종료
|
||||
//tabulator용 Function 종료
|
||||
|
||||
/**
|
||||
* 품번/품명 Select2 AJAX 검색 함수 (견적 목록 전용)
|
||||
* @param {string} partNoSelectId - 품번 셀렉트 박스 ID (예: "#search_partNo")
|
||||
* @param {string} partNameSelectId - 품명 셀렉트 박스 ID (예: "#search_partName")
|
||||
* @param {string} partObjIdInputId - 품목 OBJID hidden 필드 ID (예: "#search_partObjId")
|
||||
* @param {object} options - 추가 옵션 (placeholder, minimumInputLength 등)
|
||||
*/
|
||||
function initPartSelect2Ajax(partNoSelectId, partNameSelectId, partObjIdInputId, options) {
|
||||
options = options || {};
|
||||
var partNoPlaceholder = options.partNoPlaceholder || "품번 입력하여 검색...";
|
||||
var partNamePlaceholder = options.partNamePlaceholder || "품명 입력하여 검색...";
|
||||
var minimumInputLength = options.minimumInputLength || 1;
|
||||
var searchUrl = options.searchUrl || '/contractMgmt/searchPartList.do';
|
||||
var debug = options.debug || false;
|
||||
|
||||
// 품번 Select2 AJAX 설정
|
||||
$(partNoSelectId).select2({
|
||||
placeholder: partNoPlaceholder,
|
||||
allowClear: true,
|
||||
width: '100%',
|
||||
minimumInputLength: minimumInputLength,
|
||||
language: {
|
||||
inputTooShort: function() {
|
||||
return "최소 " + minimumInputLength + "글자 이상 입력하세요";
|
||||
},
|
||||
searching: function() {
|
||||
return "검색 중...";
|
||||
},
|
||||
noResults: function() {
|
||||
return "검색 결과가 없습니다";
|
||||
}
|
||||
},
|
||||
ajax: {
|
||||
url: searchUrl,
|
||||
dataType: 'json',
|
||||
type: 'POST',
|
||||
contentType: 'application/x-www-form-urlencoded; charset=UTF-8',
|
||||
delay: 250,
|
||||
data: function(params) {
|
||||
return {
|
||||
searchTerm: params.term
|
||||
};
|
||||
},
|
||||
processResults: function(data) {
|
||||
var results = $.map(data, function(item) {
|
||||
var objId = item.OBJID || item.objid || item.objId;
|
||||
var partNo = item.PART_NO || item.part_no || item.partNo;
|
||||
var partName = item.PART_NAME || item.part_name || item.partName;
|
||||
|
||||
return {
|
||||
id: partNo,
|
||||
text: partNo,
|
||||
objId: objId,
|
||||
partName: partName,
|
||||
partNo: partNo
|
||||
};
|
||||
});
|
||||
|
||||
return {
|
||||
results: results
|
||||
};
|
||||
},
|
||||
cache: true
|
||||
}
|
||||
});
|
||||
|
||||
// 품명 Select2 AJAX 설정
|
||||
$(partNameSelectId).select2({
|
||||
placeholder: partNamePlaceholder,
|
||||
allowClear: true,
|
||||
width: '100%',
|
||||
minimumInputLength: minimumInputLength,
|
||||
language: {
|
||||
inputTooShort: function() {
|
||||
return "최소 " + minimumInputLength + "글자 이상 입력하세요";
|
||||
},
|
||||
searching: function() {
|
||||
return "검색 중...";
|
||||
},
|
||||
noResults: function() {
|
||||
return "검색 결과가 없습니다";
|
||||
}
|
||||
},
|
||||
ajax: {
|
||||
url: searchUrl,
|
||||
dataType: 'json',
|
||||
type: 'POST',
|
||||
contentType: 'application/x-www-form-urlencoded; charset=UTF-8',
|
||||
delay: 250,
|
||||
data: function(params) {
|
||||
return {
|
||||
searchTerm: params.term
|
||||
};
|
||||
},
|
||||
processResults: function(data) {
|
||||
var results = $.map(data, function(item) {
|
||||
var objId = item.OBJID || item.objid || item.objId;
|
||||
var partNo = item.PART_NO || item.part_no || item.partNo;
|
||||
var partName = item.PART_NAME || item.part_name || item.partName;
|
||||
|
||||
return {
|
||||
id: partName,
|
||||
text: partName,
|
||||
objId: objId,
|
||||
partName: partName,
|
||||
partNo: partNo
|
||||
};
|
||||
});
|
||||
|
||||
return {
|
||||
results: results
|
||||
};
|
||||
},
|
||||
cache: true
|
||||
}
|
||||
});
|
||||
|
||||
// 품번 변경 이벤트 핸들러
|
||||
var partNoChangeHandler = function() {
|
||||
var selectedData = $(this).select2('data')[0];
|
||||
if(debug) console.log("품번 변경됨:", selectedData);
|
||||
|
||||
if(selectedData && selectedData.objId) {
|
||||
if(debug) console.log("품목 OBJID 설정:", selectedData.objId);
|
||||
$(partObjIdInputId).val(selectedData.objId);
|
||||
|
||||
// 품명 셀렉트박스도 동기화
|
||||
var $partNameSelect = $(partNameSelectId);
|
||||
$partNameSelect.off('change');
|
||||
if($partNameSelect.find("option[value='" + selectedData.partName + "']").length === 0) {
|
||||
var newOption = new Option(selectedData.partName, selectedData.partName, true, true);
|
||||
$partNameSelect.append(newOption);
|
||||
} else {
|
||||
$partNameSelect.val(selectedData.partName);
|
||||
}
|
||||
$partNameSelect.trigger('change.select2');
|
||||
|
||||
setTimeout(function() {
|
||||
$partNameSelect.on('change', partNameChangeHandler);
|
||||
}, 100);
|
||||
} else {
|
||||
$(partObjIdInputId).val("");
|
||||
}
|
||||
};
|
||||
|
||||
// 품명 변경 이벤트 핸들러
|
||||
var partNameChangeHandler = function() {
|
||||
var selectedData = $(this).select2('data')[0];
|
||||
if(debug) console.log("품명 변경됨:", selectedData);
|
||||
|
||||
if(selectedData && selectedData.objId) {
|
||||
if(debug) console.log("품목 OBJID 설정:", selectedData.objId);
|
||||
$(partObjIdInputId).val(selectedData.objId);
|
||||
|
||||
// 품번 셀렉트박스도 동기화
|
||||
var $partNoSelect = $(partNoSelectId);
|
||||
$partNoSelect.off('change');
|
||||
if($partNoSelect.find("option[value='" + selectedData.partNo + "']").length === 0) {
|
||||
var newOption = new Option(selectedData.partNo, selectedData.partNo, true, true);
|
||||
$partNoSelect.append(newOption);
|
||||
} else {
|
||||
$partNoSelect.val(selectedData.partNo);
|
||||
}
|
||||
$partNoSelect.trigger('change.select2');
|
||||
|
||||
setTimeout(function() {
|
||||
$partNoSelect.on('change', partNoChangeHandler);
|
||||
}, 100);
|
||||
} else {
|
||||
$(partObjIdInputId).val("");
|
||||
}
|
||||
};
|
||||
|
||||
// 이벤트 연결
|
||||
$(partNoSelectId).on('change', partNoChangeHandler);
|
||||
$(partNameSelectId).on('change', partNameChangeHandler);
|
||||
}
|
||||
Reference in New Issue
Block a user