소재 실제 샘플 데이터 가져오도록 수정

This commit is contained in:
2025-11-26 17:18:31 +09:00
parent fab07469c2
commit 1b88d48c92
4 changed files with 238 additions and 23 deletions

View File

@@ -45,6 +45,9 @@ var _tabulGrid;
// 프로젝트 수주수량 (최상위 프레임에서 가져오기)
var projectQuantity = 1; // 기본값
// 소재 목록 전역 변수
var materialList = [];
$(function(){
// 최상위 프레임(mBomPopupHeaderFs.jsp)에서 프로젝트 수주수량 가져오기
try {
@@ -58,10 +61,37 @@ $(function(){
console.log("프로젝트 수주수량 가져오기 실패:", e);
}
// 소재 목록 로드
fn_loadMaterialList();
// Tabulator 초기화
fn_initGrid();
});
// 소재 목록 로드
function fn_loadMaterialList() {
$.ajax({
url: '/admin/getMaterialList.do',
method: 'POST',
async: false,
success: function(response) {
if(response && response.list) {
// 중복 제거하여 소재 코드만 추출
var uniqueMaterials = {};
response.list.forEach(function(item) {
uniqueMaterials[item.MATERIAL_CODE] = true;
});
materialList = Object.keys(uniqueMaterials);
console.log("소재 목록 로드 완료:", materialList);
}
},
error: function() {
console.error("소재 목록 로드 실패");
materialList = [];
}
});
}
// Tabulator 그리드 초기화
function fn_initGrid() {
var maxLevel = ${empty MAXLEV ? 1 : MAXLEV};
@@ -312,26 +342,7 @@ function fn_initGrid() {
field: 'RAW_MATERIAL',
editor: 'list',
editorParams: {
values: ['SM45C', 'STS304', 'STS316', 'AL6061', 'AL7075'] // TODO: 실제 소재 목록으로 교체
},
editable: function(cell) {
return cell.getRow().getData().SUPPLY_TYPE === '사급';
},
formatter: function(cell) {
var data = cell.getRow().getData();
if(data.SUPPLY_TYPE === '자급') return '-';
return cell.getValue() || '';
}
},
{
headerHozAlign: 'center',
hozAlign: 'left',
width: 100,
title: '사이즈',
field: 'SIZE',
editor: 'list',
editorParams: {
values: ['Φ10', 'Φ20', 'Φ30', '10x10', '20x20'] // TODO: 실제 사이즈 목록으로 교체
values: materialList // 로드된 소재 목록 사용
},
editable: function(cell) {
return cell.getRow().getData().SUPPLY_TYPE === '사급';
@@ -342,12 +353,77 @@ function fn_initGrid() {
return cell.getValue() || '';
},
cellEdited: function(cell) {
// 소재, 사이즈 선택 시 소재품번 자동 생성
// 소재 선택 시 사이즈 초기화
var row = cell.getRow();
row.update({
SIZE: '',
RAW_MATERIAL_NO: ''
});
}
},
{
headerHozAlign: 'center',
hozAlign: 'left',
width: 100,
title: '사이즈',
field: 'SIZE',
editor: 'list',
editorParams: function(cell) {
// 선택된 소재에 따라 동적으로 사이즈 목록 로드
var data = cell.getRow().getData();
var materialCode = data.RAW_MATERIAL;
if(!materialCode) {
return {values: []};
}
// 서버에서 해당 소재의 사이즈 목록 가져오기
var sizes = [];
$.ajax({
url: '/admin/getMaterialSizes.do',
method: 'POST',
data: {materialCode: materialCode},
async: false,
success: function(response) {
if(response && response.list) {
sizes = response.list.map(function(item) {
return item.SIZE_SPEC;
});
}
}
});
return {values: sizes};
},
editable: function(cell) {
var data = cell.getRow().getData();
return data.SUPPLY_TYPE === '사급' && data.RAW_MATERIAL;
},
formatter: function(cell) {
var data = cell.getRow().getData();
if(data.SUPPLY_TYPE === '자급') return '-';
return cell.getValue() || '';
},
cellEdited: function(cell) {
// 사이즈 선택 시 소재품번 자동 조회
var row = cell.getRow();
var data = row.getData();
if(data.RAW_MATERIAL && data.SIZE) {
var materialNo = data.RAW_MATERIAL + '-' + data.SIZE;
row.update({RAW_MATERIAL_NO: materialNo});
// 서버에서 소재품번 조회
$.ajax({
url: '/admin/getMaterialPartNo.do',
method: 'POST',
data: {
materialCode: data.RAW_MATERIAL,
sizeSpec: data.SIZE
},
success: function(response) {
if(response && response.MATERIAL_PART_NO) {
row.update({RAW_MATERIAL_NO: response.MATERIAL_PART_NO});
}
}
});
}
}
},