diff --git a/WebContent/WEB-INF/view/approval/approvalDetail.jsp b/WebContent/WEB-INF/view/approval/approvalDetail.jsp index 3416036..91be67f 100644 --- a/WebContent/WEB-INF/view/approval/approvalDetail.jsp +++ b/WebContent/WEB-INF/view/approval/approvalDetail.jsp @@ -75,8 +75,8 @@ $(function(){ url = "/supplyChainMgmt/invoiceFormPopUp.do?checkArr="+targetObjId+"&actionType=view"; window.open(url, "", "width=1000,height=880"); }else if(targetType == "CONTRACT_ESTIMATE"){ - url = "/contractMgmt/estimateRegistFormPopup.do?objId="+targetObjId+"&actionType=view"; - window.open(url, "", "width=1000,height=560"); + url = "/contractMgmt/estimateTemplate1.do?templateObjId="+targetObjId+"&actionType=view"; + window.open(url, "", "width=1000,height=1200"); } }); diff --git a/WebContent/WEB-INF/view/contractMgmt/estimateRegistFormPopup.jsp b/WebContent/WEB-INF/view/contractMgmt/estimateRegistFormPopup.jsp index 75ec44d..71a483a 100644 --- a/WebContent/WEB-INF/view/contractMgmt/estimateRegistFormPopup.jsp +++ b/WebContent/WEB-INF/view/contractMgmt/estimateRegistFormPopup.jsp @@ -1406,82 +1406,82 @@ } }); - // 품번 변경 이벤트 - $partNoSelect.off('change').on('change', function() { - var selectedData = $(this).select2('data')[0]; - - if(selectedData && selectedData.id) { - // 무한루프 방지 - $partNameSelect.data('syncing', true); - - // 품명 셀렉트박스에 옵션이 없으면 추가 - if($partNameSelect.find("option[value='" + selectedData.id + "']").length === 0) { - var newOption = new Option(selectedData.partName, selectedData.id, true, true); - $(newOption).data('partNo', selectedData.partNo); - $partNameSelect.append(newOption); - } - - // 품명 셀렉트박스 값 설정 - $partNameSelect.val(selectedData.id).trigger('change.select2'); - - // hidden 필드에 값 설정 - var $row = $("#" + itemId); - $row.find(".item-part-objid").val(selectedData.id); - $row.find(".item-part-no").val(selectedData.partNo); - $row.find(".item-part-name").val(selectedData.partName); - - console.log("품번 선택 후 hidden 필드 설정:", { - itemId: itemId, - partObjId: $row.find(".item-part-objid").val(), - partNo: $row.find(".item-part-no").val(), - partName: $row.find(".item-part-name").val() - }); - - setTimeout(function() { - $partNameSelect.data('syncing', false); - }, 100); - } - }); + // 품번 선택 이벤트 (select2:select는 같은 값 재선택 시에도 발생) + $partNoSelect.off('select2:select').on('select2:select', function(e) { + var selectedData = e.params.data; - // 품명 변경 이벤트 - $partNameSelect.off('change').on('change', function() { + if(selectedData && selectedData.id) { // 무한루프 방지 - if($(this).data('syncing')) return; + $partNameSelect.data('syncing', true); - var selectedData = $(this).select2('data')[0]; - - if(selectedData && selectedData.id) { - // 무한루프 방지 - $partNoSelect.data('syncing', true); - - // 품번 셀렉트박스에 옵션이 없으면 추가 - if($partNoSelect.find("option[value='" + selectedData.id + "']").length === 0) { - var newOption = new Option(selectedData.partNo, selectedData.id, true, true); - $(newOption).data('partName', selectedData.partName); - $partNoSelect.append(newOption); - } - - // 품번 셀렉트박스 값 설정 - $partNoSelect.val(selectedData.id).trigger('change.select2'); - - // hidden 필드에 값 설정 - var $row = $("#" + itemId); - $row.find(".item-part-objid").val(selectedData.id); - $row.find(".item-part-no").val(selectedData.partNo); - $row.find(".item-part-name").val(selectedData.partName); - - console.log("품명 선택 후 hidden 필드 설정:", { - itemId: itemId, - partObjId: $row.find(".item-part-objid").val(), - partNo: $row.find(".item-part-no").val(), - partName: $row.find(".item-part-name").val() - }); - - setTimeout(function() { - $partNoSelect.data('syncing', false); - }, 100); + // 품명 셀렉트박스에 옵션이 없으면 추가 + if($partNameSelect.find("option[value='" + selectedData.id + "']").length === 0) { + var newOption = new Option(selectedData.partName, selectedData.id, true, true); + $(newOption).data('partNo', selectedData.partNo); + $partNameSelect.append(newOption); } - }); + + // 품명 셀렉트박스 값 설정 + $partNameSelect.val(selectedData.id).trigger('change.select2'); + + // hidden 필드에 값 설정 + var $row = $("#" + itemId); + $row.find(".item-part-objid").val(selectedData.id); + $row.find(".item-part-no").val(selectedData.partNo); + $row.find(".item-part-name").val(selectedData.partName); + + console.log("품번 선택 후 hidden 필드 설정:", { + itemId: itemId, + partObjId: $row.find(".item-part-objid").val(), + partNo: $row.find(".item-part-no").val(), + partName: $row.find(".item-part-name").val() + }); + + setTimeout(function() { + $partNameSelect.data('syncing', false); + }, 100); + } + }); + + // 품명 선택 이벤트 (select2:select는 같은 값 재선택 시에도 발생) + $partNameSelect.off('select2:select').on('select2:select', function(e) { + // 무한루프 방지 + if($(this).data('syncing')) return; + + var selectedData = e.params.data; + + if(selectedData && selectedData.id) { + // 무한루프 방지 + $partNoSelect.data('syncing', true); + + // 품번 셀렉트박스에 옵션이 없으면 추가 + if($partNoSelect.find("option[value='" + selectedData.id + "']").length === 0) { + var newOption = new Option(selectedData.partNo, selectedData.id, true, true); + $(newOption).data('partName', selectedData.partName); + $partNoSelect.append(newOption); + } + + // 품번 셀렉트박스 값 설정 + $partNoSelect.val(selectedData.id).trigger('change.select2'); + + // hidden 필드에 값 설정 + var $row = $("#" + itemId); + $row.find(".item-part-objid").val(selectedData.id); + $row.find(".item-part-no").val(selectedData.partNo); + $row.find(".item-part-name").val(selectedData.partName); + + console.log("품명 선택 후 hidden 필드 설정:", { + itemId: itemId, + partObjId: $row.find(".item-part-objid").val(), + partNo: $row.find(".item-part-no").val(), + partName: $row.find(".item-part-name").val() + }); + + setTimeout(function() { + $partNoSelect.data('syncing', false); + }, 100); + } + }); // 기존 선택값이 있으면 로드 (수정 모드) console.log("기존 데이터 로드 체크:", {objId: selectedObjId, partNo: savedPartNo, partName: savedPartName}); diff --git a/WebContent/WEB-INF/view/contractMgmt/estimateTemplate1.jsp b/WebContent/WEB-INF/view/contractMgmt/estimateTemplate1.jsp index 11b6fe4..2114cab 100644 --- a/WebContent/WEB-INF/view/contractMgmt/estimateTemplate1.jsp +++ b/WebContent/WEB-INF/view/contractMgmt/estimateTemplate1.jsp @@ -561,20 +561,23 @@ function fn_initItemDescSelect(itemId) { } }); - // 품명 선택 시 hidden 필드와 규격 자동 입력 - $("#" + itemId + " .item-desc-select").on('change', function() { - var selectedData = $(this).select2('data')[0]; + // 품명 선택 시 hidden 필드와 규격 자동 입력 (select2:select는 같은 값 재선택 시에도 발생) + $("#" + itemId + " .item-desc-select").on('select2:select', function(e) { + var selectedData = e.params.data; if(selectedData) { $("#" + itemId + " .item-desc").val(selectedData.text); $("#" + itemId + " .item-part-objid").val(selectedData.id); // part_objid 저장 if(selectedData.spec) { $("#" + itemId + " .item-spec").val(selectedData.spec); } - } else { - $("#" + itemId + " .item-desc").val(''); - $("#" + itemId + " .item-part-objid").val(''); // part_objid 초기화 } }); + + // 품명 선택 해제 시 (X 버튼 클릭) + $("#" + itemId + " .item-desc-select").on('select2:clear', function() { + $("#" + itemId + " .item-desc").val(''); + $("#" + itemId + " .item-part-objid").val(''); // part_objid 초기화 + }); } // 행 추가 함수 @@ -650,32 +653,36 @@ function fn_loadData() { $("#contact_person").val(data.estimate.CONTACT_PERSON || ""); $("#greeting_text").val(data.estimate.GREETING_TEXT || "견적을 요청해 주셔서 대단히 감사합니다.\n하기와 같이 견적서를 제출합니다."); - // 담당자/연락처는 저장된 값이 있을 때만 덮어씀 - var managerName = data.estimate.MANAGER_NAME || ""; - var managerContact = data.estimate.MANAGER_CONTACT || ""; - if(managerName && managerName !== "" && managerName !== "영업부") { - $("#manager_name").val(managerName); - } - if(managerContact && managerContact !== "") { - $("#manager_contact").val(managerContact); - } + // 담당자/연락처는 저장된 값이 있을 때만 덮어씀 + var managerName = data.estimate.MANAGER_NAME || ""; + var managerContact = data.estimate.MANAGER_CONTACT || ""; + if(managerName && managerName !== "" && managerName !== "영업부") { + $("#manager_name").val(managerName); + } + if(managerContact && managerContact !== "") { + $("#manager_contact").val(managerContact); + } - // 품목 데이터 로드 + /* 품목 데이터 로드 - 주석처리 (새로 작성 시 빈 템플릿 사용) if(data.items && data.items.length > 0) { // 기존 행 초기화 후 데이터 추가 var itemsHtml = ""; for(var i = 0; i < data.items.length; i++) { var item = data.items[i]; var itemId = 'loaded_item_' + i; - itemsHtml += '