Merge pull request 'm-bom 추가, 삭제, 변경' (#75) from V2025111901 into main

Reviewed-on: #75
This commit was merged in pull request #75.
This commit is contained in:
2025-11-25 04:38:13 +00:00
6 changed files with 1003 additions and 463 deletions

View File

@@ -97,196 +97,23 @@ $(function(){
// }, 500);
</c:if>
//Part 연결
//Part 연결 (M-BOM용)
$("#moveLeft").click(function(){
// Tabulator에서 선택된 오른쪽 행 데이터 가져오기
var rightFrame = parent.frames['rightFrame'];
var rightSelectedRows = rightFrame.getSelectedRows ? rightFrame.getSelectedRows() : [];
if(rightSelectedRows.length === 0) {
showConfirm("선택된 파트가 없습니다.");
return false;
}
// 왼쪽 프레임에서 선택된 행 데이터 가져오기
var leftPartNoObj = $("input[name=checkedPartNo]:checked", parent.frames['leftFrame'].document);
var leftPartChildObjId = null;
var leftPartNo = null;
var leftPartNoQty = null;
var leftParentObjId = null;
var leftPartLastObjId = null;
var leftQtyParObjId = null;
var leftParentParts = "";
if(leftPartNoObj.length > 0) {
leftPartChildObjId = leftPartNoObj.val();
leftPartNo = leftPartNoObj.attr("data-PART_NO");
leftPartNoQty = leftPartNoObj.attr("data-PART_NO_QTY");
leftParentObjId = leftPartNoObj.attr("data-OBJID");
leftPartLastObjId = leftPartNoObj.attr("data-LAST_PART_OBJID");
leftQtyParObjId = leftPartNoObj.attr("data-PART_OBJID");
leftParentParts = leftPartNoObj.attr("data-PARENT_PARTS") || "";
}
// 같은 Part를 연결한건지 체크
var isSamePart = false;
for(var i = 0; i < rightSelectedRows.length; i++){
var rowData = rightSelectedRows[i].getData();
var rightPartNo = rowData.PART_NO;
if(rightPartNo == leftPartNo){
showConfirm({
title: '연결 불가',
html: '오류 Part No : <strong>['+rightPartNo+']</strong><br>같은 Part No끼리 연결할 수 없습니다.',
icon: 'error'
});
isSamePart = true;
break;
}
}
if(isSamePart) return false;
// 연결하려는 part가 상위에 있는 part인지 확인
var deniedPartArr = [];
if(fnc_checkNull(leftParentParts).indexOf(",") > 0){
deniedPartArr = leftParentParts.split(",");
}
var isDeniedPart = false;
for(var i = 0; i < rightSelectedRows.length; i++){
var rowData = rightSelectedRows[i].getData();
var rightPartNo = rowData.PART_NO;
var rightPartType = rowData.PART_TYPE;
if("unique" == rightPartType){
for(var j = 0 ; j < deniedPartArr.length ; j++){
if(rightPartNo == deniedPartArr[j]){
showConfirm({
title: '연결 불가',
html: '오류 Part No : <strong>['+rightPartNo+']</strong><br>이미 상위에 등록된 Part No 입니다.',
icon: 'error'
});
isDeniedPart = true;
break;
}
}
if(isDeniedPart) break;
}
}
if(isDeniedPart) return;
// 선택된 파트의 OBJID 배열 생성
var rightCheckedArr = [];
for(var i = 0; i < rightSelectedRows.length; i++){
var rowData = rightSelectedRows[i].getData();
rightCheckedArr.push(rowData.OBJID);
}
if(fnc_checkNull(leftPartNo) == ""){
var flag = fn_checkSameTopPartNo(rightCheckedArr);
if(flag == "true"){
showConfirm({
title: '중복 등록 불가',
text: '1레벨에 같은 Part No가 중복 등록될 수 없습니다.',
icon: 'error'
});
return;
}
}
// Part 연결 확인
showConfirm({
title: 'Part 연결',
text: '선택한 Part를 연결하시겠습니까?',
icon: 'question',
showCancelButton: true,
confirmButtonColor: '#3085d6',
cancelButtonColor: '#d33',
confirmButtonText: '연결',
cancelButtonText: '취소',
reverseButtons: false
}).then(result => {
if (result.isConfirmed) {
fn_relatePartInfo(leftPartChildObjId, rightCheckedArr, leftPartNoQty, leftPartLastObjId, leftPartChildObjId, leftQtyParObjId);
}
});
fn_mbomAddPart();
});
//end of Part 연결
//연결된 part 삭제
//연결된 part 삭제 (M-BOM용)
$("#moveRight").click(function(){
var leftPartNoObj = $("input[name=checkedPartNo]:checked", parent.frames['leftFrame'].document);
var leftPartChildObjId = leftPartNoObj.val();
var leftPartNo = $("input[name=checkedPartNo]:checked", parent.frames['leftFrame'].document).attr("data-PART_NO");
var leftParentPartNo = $("input[name=checkedPartNo]:checked", parent.frames['leftFrame'].document).attr("data-PARENT_PART_NO");
var leftParentObjId = $("input[name=checkedPartNo]:checked", parent.frames['leftFrame'].document).attr("data-PARENT_OBJID");
var leftPartLastObjId = $("input[name=checkedPartNo]:checked", parent.frames['leftFrame'].document).attr("data-LAST_PART_OBJID");
fn_deletePartRelateInfo(leftPartNoObj.val(), leftPartLastObjId, leftParentPartNo, leftParentObjId, leftPartChildObjId);
fn_mbomDeletePart();
});
//end of 연결된 part 삭제
//연결된 part 변경
//연결된 part 변경 (M-BOM용)
$("#moveChange").click(function(){
var leftPartNoList = $("input[name=checkedPartNo]:checked", parent.frames['leftFrame'].document);
if(leftPartNoList.length === 0){
showConfirm("선택된 파트가 없습니다.");
return false;
}
if(leftPartNoList.length > 1){
showConfirm("한번에 1개의 파트만 변경가능합니다.");
return false;
}
var leftPartNo = leftPartNoList.attr("data-PART_NO");
var leftPartObjid = leftPartNoList.attr("data-BOM_LAST_PART_OBJID");
var leftParentPartObjid = leftPartNoList.attr("data-PARENT_PART_NO");
var leftPartChildObjId = leftPartNoList.val();
var leftPartBomQtyObjId = leftPartNoList.attr("data-OBJID");
// Tabulator에서 선택된 오른쪽 행 데이터 가져오기
var rightFrame = parent.frames['rightFrame'];
var rightSelectedRows = rightFrame.getSelectedRows ? rightFrame.getSelectedRows() : [];
if(rightSelectedRows.length === 0){
showConfirm("선택된 파트가 없습니다.");
return false;
}
if(rightSelectedRows.length > 1){
showConfirm("한번에 1개의 파트만 변경가능합니다.");
return false;
}
var rightRowData = rightSelectedRows[0].getData();
var rightPartNo = rightRowData.PART_NO;
var rightPartRev = rightRowData.REVISION || "";
var rightObjId = rightRowData.OBJID;
// Part 변경 확인
showConfirm({
title: 'Part 변경',
html: '선택한 Part를 변경하시겠습니까?<br><br>' +
'<strong>기존:</strong> ' + leftPartNo + '<br>' +
'<strong>변경:</strong> ' + rightPartNo,
icon: 'warning',
showCancelButton: true,
confirmButtonColor: '#3085d6',
cancelButtonColor: '#d33',
confirmButtonText: '변경',
cancelButtonText: '취소',
reverseButtons: false
}).then(result => {
if (result.isConfirmed) {
fn_changeRelatePartInfo(leftPartBomQtyObjId, rightObjId, leftPartChildObjId, leftParentPartObjid, leftPartChildObjId, leftPartObjid, rightPartNo, rightPartRev);
}
});
fn_mbomChangePart();
});
// 이력보기 버튼 클릭
$("#btnHistory").click(function(){
fn_showHistory();
@@ -309,197 +136,6 @@ $(function(){
});
//1레벨에 같은 Part No가 등록되어있는지 확인.
function fn_checkSameTopPartNo(rightCheckedArr){
var result = false;
$.ajax({
url: "/productionplanning/checkSameTopPartNo.do",
method: 'post',
traditional: true, // 배열 파라미터 처리를 위한 옵션
data: {"OBJID":$("#objId").val(), "rightCheckedArr[]":rightCheckedArr}, // [] 추가
dataType: 'json',
async:false,
success: function(data) {
result = data.result;
}
, error: function(jqxhr, status, error){
/* alert(jqxhr.statusText + ", " + status + ", " + error);
alert(jqxhr.status);
alert(jqxhr.responseText); */
}
});
return result;
}
//end of 1레벨에 같은 Part No가 등록되어있는지 확인.
//구조 연결 해제
function fn_deletePartRelateInfo(leftObjId, leftPartLastObjId, leftParentPartNo, leftParentObjId, leftPartChildObjId){
if(leftObjId == null){
showConfirm("연결 해제할 Part를 선택해 주시기 바랍니다.");
return;
}
showConfirm({
title: 'Part 연결 해제',
text: '선택한 Part의 연결을 해제하시겠습니까?',
icon: 'warning',
showCancelButton: true,
confirmButtonColor: '#3085d6',
cancelButtonColor: '#d33',
confirmButtonText: '연결 해제',
cancelButtonText: '취소',
reverseButtons: false
}).then(result => {
if (!result.isConfirmed) return;
fn_executeDeletePartRelateInfo(leftObjId, leftPartLastObjId, leftParentPartNo, leftParentObjId, leftPartChildObjId);
});
}
// 실제 Part 연결 해제 실행 함수
function fn_executeDeletePartRelateInfo(leftObjId, leftPartLastObjId, leftParentPartNo, leftParentObjId, leftPartChildObjId){
$.ajax({
url: "/productionplanning/deleteStatusPartRelateInfo.do",
method: 'post',
data: {"OBJID":$("#objId").val(), "leftObjId":leftObjId, "partObjId":leftPartLastObjId, "BOM_REPORT_OBJID":$("#objId").val()
, "leftPartChildObjId":leftPartChildObjId, "leftParentPartNo":leftParentPartNo, "leftParentObjId":leftParentObjId},
dataType: 'json',
success: function(data) {
if(data.result){
$(parent.frames['leftFrame'].document.location.reload());
//$(parent.frames['rightFrame'].fn_searchPart());
// 부모 창(E-BOM 목록) 새로고침
if(window.opener && window.opener.fn_search) {
window.opener.fn_search();
}
}
}
, error: function(jqxhr, status, error){
/* alert(jqxhr.statusText + ", " + status + ", " + error);
alert(jqxhr.status);
alert(jqxhr.responseText); */
}
});
}
//end of 구조 연결 해제
//구조 연결
function fn_relatePartInfo(leftObjId, rightCheckedArr, leftPartNoQty, leftPartLastObjId, leftPartChildObjId, leftQtyParObjId){
if(typeof rightCheckedArr != "undefined" && rightCheckedArr.length == 0){
showConfirm("선택된 Part가 없습니다.");
return;
}
if(leftObjId == null){
showConfirm({
title: '1레벨 등록 확인',
html: '좌측에 선택된 Part정보가 없습니다.<br>이대로 연결하면 1레벨로 등록됩니다.<br><br>진행하시겠습니까?',
icon: 'warning',
showCancelButton: true,
confirmButtonColor: '#3085d6',
cancelButtonColor: '#d33',
confirmButtonText: '진행',
cancelButtonText: '취소',
reverseButtons: false
}).then(result => {
if (result.isConfirmed) {
fn_executeRelatePartInfo(leftObjId, rightCheckedArr, leftPartNoQty, leftPartLastObjId, leftPartChildObjId, leftQtyParObjId);
}
});
return;
}
fn_executeRelatePartInfo(leftObjId, rightCheckedArr, leftPartNoQty, leftPartLastObjId, leftPartChildObjId, leftQtyParObjId);
}
// 실제 Part 연결 실행 함수
function fn_executeRelatePartInfo(leftObjId, rightCheckedArr, leftPartNoQty, leftPartLastObjId, leftPartChildObjId, leftQtyParObjId){
$.ajax({
url: "/productionplanning/relatePartInfo.do",
method: 'post',
traditional: true, // 배열 파라미터 처리를 위한 옵션
data: {
"leftObjId": leftObjId,
"leftPartNoQty": leftPartNoQty,
"OBJID": $("#objId").val(),
"rightCheckedArr[]": rightCheckedArr, // Spring의 @RequestParam(value = "rightCheckedArr[]") 형식
"partObjId": leftPartLastObjId,
"BOM_REPORT_OBJID": $("#objId").val(),
"leftPartChildObjId": leftPartChildObjId,
"leftQtyParObjId": leftQtyParObjId
},
dataType: 'json',
async:false,
success: function(data) {
if(data.result){
// 왼쪽 프레임 새로고침
$(parent.frames['leftFrame'].document.location.reload());
// 오른쪽 프레임 선택 해제 (Tabulator)
var rightFrame = parent.frames['rightFrame'];
if(rightFrame.clearSelection) {
rightFrame.clearSelection();
}
// 부모 창(E-BOM 목록) 새로고침
if(window.opener && window.opener.fn_search) {
window.opener.fn_search();
}
}
}
, error: function(jqxhr, status, error){
/* alert(jqxhr.statusText + ", " + status + ", " + error);
alert(jqxhr.status);
alert(jqxhr.responseText); */
}
});
}
//end of 구조 연결
//구조 연결 변경
function fn_changeRelatePartInfo(objId,rightObjId,leftObjId,leftPartNoQty,leftPartChildObjId,leftPartObjid,rightPartNo,rightPartRev){
$.ajax({
url: "/productionplanning/changeRelatePartInfo.do",
method: 'post',
data: {"rightObjId":rightObjId, "OBJID":objId,"BOM_REPORT_OBJID":$("#objId").val(),
"leftObjId":leftObjId,"leftPartNoQty":leftPartNoQty,"leftPartChildObjId":leftPartChildObjId,
"leftPartObjid":leftPartObjid, "rightPartNo":rightPartNo, "rightPartRev":rightPartRev},
dataType: 'json',
async:false,
success: function(data) {
if(data.result){
// 왼쪽 프레임 새로고침
$(parent.frames['leftFrame'].document.location.reload());
// 오른쪽 프레임 검색 다시 수행
var rightFrame = parent.frames['rightFrame'];
if(rightFrame.fn_searchPart) {
rightFrame.fn_searchPart();
}
// 오른쪽 프레임 선택 해제 (Tabulator)
if(rightFrame.clearSelection) {
rightFrame.clearSelection();
}
// 부모 창(E-BOM 목록) 새로고침
if(window.opener && window.opener.fn_search) {
window.opener.fn_search();
}
}
}
, error: function(jqxhr, status, error){
/* alert(jqxhr.statusText + ", " + status + ", " + error);
alert(jqxhr.status);
alert(jqxhr.responseText); */
}
});
}
// 가공납기/연삭납기 일괄 적용
function fn_applyBulkDeadline() {
var processingDeadline = $("#bulk_processing_deadline").val();
@@ -1198,6 +834,260 @@ function compareItemFields(before, after) {
</tr>
</table>
</div>
</form>
</form>
<script>
// ==================== M-BOM 전용 파트 추가/삭제/변경 함수 ====================
// M-BOM 파트 추가 (그리드에만 반영)
function fn_mbomAddPart() {
var rightFrame = parent.frames[1].frames['rightFrame'];
var rightSelectedRows = rightFrame.getSelectedRows ? rightFrame.getSelectedRows() : [];
if(rightSelectedRows.length === 0) {
showConfirm("선택된 파트가 없습니다.");
return false;
}
var leftFrame = parent.frames[1].frames['leftFrame'];
var leftPartNoObj = $("input[name=checkedPartNo]:checked", leftFrame.document);
var parentObjid = "";
var parentLevel = 0;
if(leftPartNoObj.length > 0) {
parentObjid = leftPartNoObj.attr("data-CHILD_OBJID");
parentLevel = parseInt(leftPartNoObj.attr("data-LEVEL") || 0);
console.log("부모 선택됨:", {
parentObjid: parentObjid,
parentLevel: parentLevel,
partNo: leftPartNoObj.attr("data-PART_NO")
});
} else {
console.log("부모 선택 안됨 - 최상위 레벨에 추가");
}
// 추가할 파트 데이터 준비
var newParts = [];
for(var i = 0; i < rightSelectedRows.length; i++){
var rowData = rightSelectedRows[i].getData();
var newPart = {
OBJID: generateTempId(),
CHILD_OBJID: generateTempId(),
PARENT_OBJID: parentObjid,
LEVEL: parentLevel + 1,
PART_OBJID: rowData.OBJID,
PART_NO: rowData.PART_NO,
PART_NAME: rowData.PART_NAME,
QTY: 1,
ITEM_QTY: 1,
QTY_TEMP: 1,
UNIT: rowData.UNIT,
SPEC: rowData.SPEC,
REVISION: rowData.REVISION,
SUPPLY_TYPE: '사급',
STATUS: 'ACTIVE'
};
console.log("추가할 파트:", {
partNo: newPart.PART_NO,
parentObjid: newPart.PARENT_OBJID,
level: newPart.LEVEL
});
newParts.push(newPart);
}
// 왼쪽 프레임의 Tabulator에 추가
if(leftFrame && leftFrame._tabulGrid) {
if(parentObjid) {
// 부모가 선택된 경우: 데이터 배열에 직접 삽입
var allData = leftFrame._tabulGrid.getData();
var insertPosition = -1;
// 부모 행 찾기
for(var i = 0; i < allData.length; i++) {
if(allData[i].CHILD_OBJID == parentObjid) {
insertPosition = i + 1;
// 부모의 모든 하위 항목(자식, 손자, 증손자 등)을 건너뛰기
for(var j = i + 1; j < allData.length; j++) {
var rowLevel = allData[j].LEVEL || 1;
if(rowLevel > parentLevel) {
// 부모보다 하위 레벨이면 계속 건너뛰기
insertPosition = j + 1;
} else {
// 같은 레벨이거나 상위 레벨이 나오면 중단
break;
}
}
console.log("부모 레벨:", parentLevel, "/ 삽입 위치:", insertPosition);
break;
}
}
// 삽입 위치에 추가
if(insertPosition >= 0) {
console.log("부모 찾음! 삽입 위치:", insertPosition);
// 배열에 직접 삽입
for(var i = newParts.length - 1; i >= 0; i--) {
allData.splice(insertPosition, 0, newParts[i]);
}
// 전체 데이터 다시 설정
leftFrame._tabulGrid.setData(allData);
} else {
console.log("부모를 못 찾음 - 맨 밑에 추가");
// 부모를 못 찾으면 맨 밑에 추가
for(var i = 0; i < newParts.length; i++) {
leftFrame._tabulGrid.addData([newParts[i]], false);
}
}
} else {
// 부모가 선택되지 않은 경우: 최상위 레벨 맨 밑에 추가
for(var i = 0; i < newParts.length; i++) {
leftFrame._tabulGrid.addData([newParts[i]], false);
}
}
showConfirm({
title: '파트 추가',
text: newParts.length + '개 파트가 추가되었습니다.\n저장 버튼을 눌러 확정하세요.',
icon: 'success'
});
}
}
// M-BOM 파트 삭제 (그리드에서만 제거)
function fn_mbomDeletePart() {
var leftFrame = parent.frames[1].frames['leftFrame'];
var leftPartNoObj = $("input[name=checkedPartNo]:checked", leftFrame.document);
if(leftPartNoObj.length === 0) {
showConfirm("삭제할 파트를 선택해주세요.");
return;
}
var childObjid = leftPartNoObj.val();
showConfirm({
title: 'Part 삭제',
text: '선택한 Part를 삭제하시겠습니까?\n(저장 버튼을 눌러야 확정됩니다)',
icon: 'warning',
showCancelButton: true,
confirmButtonColor: '#3085d6',
cancelButtonColor: '#d33',
confirmButtonText: '삭제',
cancelButtonText: '취소',
reverseButtons: false
}).then(result => {
if (result.isConfirmed) {
// Tabulator에서 해당 행 찾아서 삭제
if(leftFrame && leftFrame._tabulGrid) {
var rows = leftFrame._tabulGrid.getRows();
for(var i = 0; i < rows.length; i++) {
var rowData = rows[i].getData();
if(rowData.CHILD_OBJID == childObjid) {
rows[i].delete();
showConfirm({
title: '파트 삭제',
text: '파트가 삭제되었습니다.\n저장 버튼을 눌러 확정하세요.',
icon: 'success'
});
break;
}
}
}
}
});
}
// M-BOM 파트 변경 (그리드에서만 변경)
function fn_mbomChangePart() {
var leftFrame = parent.frames[1].frames['leftFrame'];
var leftPartNoList = $("input[name=checkedPartNo]:checked", leftFrame.document);
if(leftPartNoList.length === 0){
showConfirm("변경할 파트를 선택해주세요.");
return false;
}
if(leftPartNoList.length > 1){
showConfirm("한번에 1개의 파트만 변경가능합니다.");
return false;
}
var rightFrame = parent.frames[1].frames['rightFrame'];
var rightSelectedRows = rightFrame.getSelectedRows ? rightFrame.getSelectedRows() : [];
if(rightSelectedRows.length === 0){
showConfirm("변경할 새 파트를 선택해주세요.");
return false;
}
if(rightSelectedRows.length > 1){
showConfirm("한번에 1개의 파트만 변경가능합니다.");
return false;
}
var leftPartNo = leftPartNoList.attr("data-PART_NO");
var leftChildObjid = leftPartNoList.val();
var rightRowData = rightSelectedRows[0].getData();
var rightPartNo = rightRowData.PART_NO;
var rightPartName = rightRowData.PART_NAME;
var rightObjId = rightRowData.OBJID;
var rightRevision = rightRowData.REVISION || "";
showConfirm({
title: 'Part 변경',
html: '선택한 Part를 변경하시겠습니까?<br><br>' +
'<strong>기존:</strong> ' + leftPartNo + '<br>' +
'<strong>변경:</strong> ' + rightPartNo,
icon: 'warning',
showCancelButton: true,
confirmButtonColor: '#3085d6',
cancelButtonColor: '#d33',
confirmButtonText: '변경',
cancelButtonText: '취소',
reverseButtons: false
}).then(result => {
if (result.isConfirmed) {
// Tabulator에서 해당 행 찾아서 업데이트
if(leftFrame && leftFrame._tabulGrid) {
var rows = leftFrame._tabulGrid.getRows();
for(var i = 0; i < rows.length; i++) {
var rowData = rows[i].getData();
if(rowData.CHILD_OBJID == leftChildObjid) {
rows[i].update({
PART_OBJID: rightObjId,
PART_NO: rightPartNo,
PART_NAME: rightPartName,
REVISION: rightRevision
});
showConfirm({
title: '파트 변경',
text: '파트가 변경되었습니다.\n저장 버튼을 눌러 확정하세요.',
icon: 'success'
});
break;
}
}
}
}
});
}
// 임시 ID 생성 (음수 사용)
function generateTempId() {
return -Math.floor(Math.random() * 1000000000);
}
</script>
</body>
</html>
</html>

View File

@@ -38,8 +38,27 @@ $(function(){
$('.select2').select2();
//Part 연결 (<< 버튼)
//Part 연결 (<< 버튼) - M-BOM용
$("#moveLeft").click(function(){
parent.parent.frames[0].fn_mbomAddPart();
});
//Part 삭제 (>> 버튼) - M-BOM용
$("#moveRight").click(function(){
parent.parent.frames[0].fn_mbomDeletePart();
});
//Part 변경 - M-BOM용
$("#moveChange").click(function(){
parent.parent.frames[0].fn_mbomChangePart();
});
});
/* ==================== E-BOM 원본 코드 (주석 처리) ====================
$(function(){
//Part 연결 (<< 버튼) - E-BOM 원본
$("#moveLeft_EBOM_ORIGINAL").click(function(){
// Tabulator에서 선택된 오른쪽 행 데이터 가져오기
var rightFrame = parent.frames['rightFrame'];
var rightSelectedRows = rightFrame.getSelectedRows ? rightFrame.getSelectedRows() : [];
@@ -346,6 +365,8 @@ function fn_changeRelatePartInfo(objId,rightObjId,leftObjId,leftPartNoQty,leftPa
}
});
}
// ==================== E-BOM 원본 코드 주석 끝 ====================
*/
</script>
</head>
<body class="backcolor" style="border:border:1px solid #ccc;">

View File

@@ -89,7 +89,9 @@ function fn_initGrid() {
'data-PARENT_OBJID="' + (rowData.PARENT_OBJID || '') + '" ' +
'data-PART_OBJID="' + (rowData.PART_OBJID || '') + '" ' +
'data-BOM_LAST_PART_OBJID="' + (rowData.BOM_LAST_PART_OBJID || rowData.LAST_PART_OBJID || '') + '" ' +
'data-CHILD_OBJID="' + (rowData.CHILD_OBJID || '') + '">';
'data-CHILD_OBJID="' + (rowData.CHILD_OBJID || '') + '" ' +
'data-LEVEL="' + (rowData.LEVEL || 1) + '" ' +
'data-PART_NO="' + (rowData.PART_NO || '') + '">';
}
});

View File

@@ -132,7 +132,7 @@ function initEbomTable() {
});
}
// E-BOM 검색
// 파트 검색 (PART_MNG 테이블에서 조회)
function fn_searchEbom() {
var partNo = $("#search_part_no").val().trim();
var partName = $("#search_part_name").val().trim();
@@ -140,19 +140,20 @@ function fn_searchEbom() {
var supplier = $("#search_supplier").val().trim();
$.ajax({
url: "/productionplanning/getEbomList.do",
url: "/partMng/getPartMngList_ajax.do",
method: 'post',
data: {
"search_part_no": partNo,
"search_part_name": partName,
"search_material": material,
"search_supplier": supplier
"search_maker": supplier,
"status": "release" // 승인된 파트만 조회
},
dataType: 'json',
success: function(data) {
if(data && data.list) {
success: function(response) {
if(response && response.data) {
// 품번과 품명이 비어있지 않은 데이터만 필터링
allData = data.list.filter(function(item) {
allData = response.data.filter(function(item) {
return item.PART_NO && item.PART_NO.trim() !== '' &&
item.PART_NAME && item.PART_NAME.trim() !== '';
});
@@ -163,7 +164,7 @@ function fn_searchEbom() {
fnc_goPage(1);
},
error: function(jqxhr, status, error){
console.error("E-BOM 조회 오류:", error);
console.error("파트 조회 오류:", error);
allData = [];
ebomTable.setData([]);
updatePagination();