638 lines
20 KiB
Plaintext
638 lines
20 KiB
Plaintext
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
|
|
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
|
|
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
|
|
<%@ page import="com.pms.common.utils.*"%>
|
|
<%@ page import="java.util.*" %>
|
|
<%@include file= "/init.jsp" %>
|
|
<script type="text/javascript" src="/js/tabulator/tabulator_custom.js"></script>
|
|
<%
|
|
PersonBean person = (PersonBean) session.getAttribute(Constants.PERSON_BEAN);
|
|
String connector = person.getUserId();
|
|
%>
|
|
<c:set var="now" value="<%=new java.util.Date()%>" />
|
|
<c:set var="today"><fmt:formatDate value="${now}" pattern="yyyy-MM-dd" /></c:set>
|
|
<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
|
<title><%=Constants.SYSTEM_NAME%></title>
|
|
</head>
|
|
|
|
<style>
|
|
.form-header {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 20px;
|
|
padding: 10px 15px;
|
|
background: #f8f9fa;
|
|
border-bottom: 1px solid #ddd;
|
|
}
|
|
.form-header label {
|
|
font-weight: bold;
|
|
margin-right: 5px;
|
|
}
|
|
.form-header .required {
|
|
color: red;
|
|
}
|
|
.form-header input, .form-header select {
|
|
padding: 5px 10px;
|
|
border: 1px solid #ccc;
|
|
border-radius: 3px;
|
|
}
|
|
/* 검사결과 스타일 */
|
|
.inspection-ng { color: #dc3545; font-weight: bold; }
|
|
.inspection-ok { color: #28a745; font-weight: bold; }
|
|
/* 공통에서 추가되는 초기화, Excel Download 버튼 숨기기 */
|
|
.resetBtn, .excelBtn { display: none !important; }
|
|
</style>
|
|
|
|
<script type="text/javascript">
|
|
var _editable = true;
|
|
var grid;
|
|
var rowIndex = 0;
|
|
var _filePopupOpen = false; // 파일 팝업 열림 여부
|
|
|
|
// 진행공정 목록
|
|
var _PROCESS_LIST = [];
|
|
// 프로젝트 목록
|
|
var _PROJECT_LIST = [];
|
|
// 작업환경상태 목록
|
|
var _WORK_ENV_STATUS_LIST = [
|
|
{"CODE": "", "NAME": "선택"},
|
|
{"CODE": "양호", "NAME": "양호"},
|
|
{"CODE": "불량", "NAME": "불량"}
|
|
];
|
|
// 측정기 목록 (양호/불량)
|
|
var _MEASURING_DEVICE_LIST = [
|
|
{"CODE": "", "NAME": "선택"},
|
|
{"CODE": "양호", "NAME": "양호"},
|
|
{"CODE": "불량", "NAME": "불량"}
|
|
];
|
|
// 담당팀 목록
|
|
var _DEPT_LIST = [];
|
|
// 담당자 목록
|
|
var _USER_LIST = [];
|
|
// 검사자 목록
|
|
var _INSPECTOR_LIST = [];
|
|
// 검사결과 목록
|
|
var _INSPECTION_RESULT_LIST = [
|
|
{"CODE": "", "NAME": "선택"},
|
|
{"CODE": "OK", "NAME": "OK"},
|
|
{"CODE": "NG", "NAME": "NG"}
|
|
];
|
|
|
|
$(document).ready(function(){
|
|
fnc_datepick();
|
|
$('.select2').select2();
|
|
|
|
// 진행공정 목록 조회 (더존 기준정보>내부공정)
|
|
_PROCESS_LIST = [{"CODE": "", "NAME": "선택"}].concat(
|
|
fnc_getJsonAllDataListBySqlId({"sqlId": "common.getCodeselect", "code": "0001870"})
|
|
);
|
|
|
|
// 프로젝트 목록 조회 (제품구분 포함)
|
|
_PROJECT_LIST = [{"CODE": "", "NAME": "선택", "PRODUCT_NAME": ""}].concat(
|
|
fnc_getJsonAllDataListBySqlId({"sqlId": "common.getProjectNameListWithProduct"})
|
|
);
|
|
|
|
// 담당팀 목록 조회
|
|
_DEPT_LIST = [{"CODE": "", "NAME": "선택"}].concat(
|
|
fnc_getJsonAllDataListBySqlId({"sqlId": "common.getDeptselect"})
|
|
);
|
|
|
|
// 담당자 목록 조회
|
|
_USER_LIST = [{"CODE": "", "NAME": "선택"}].concat(
|
|
fnc_getJsonAllDataListBySqlId({"sqlId": "common.getUserselect"})
|
|
);
|
|
|
|
// 검사자 목록 조회
|
|
_INSPECTOR_LIST = [{"CODE": "", "NAME": "선택"}].concat(
|
|
fnc_getJsonAllDataListBySqlId({"sqlId": "common.getUserselect"})
|
|
);
|
|
|
|
// 검사일 기본 설정 (저장된 값 없으면 오늘 날짜)
|
|
var savedInspectionDate = "${info.inspection_date}";
|
|
if(savedInspectionDate != '' && savedInspectionDate != 'null'){
|
|
$("#INSPECTION_DATE").val(savedInspectionDate);
|
|
} else if($("#INSPECTION_DATE").val() == ''){
|
|
$("#INSPECTION_DATE").val("${today}");
|
|
}
|
|
|
|
// 행추가 버튼
|
|
$("#btnAddRow").click(function(){
|
|
fn_addRow();
|
|
});
|
|
|
|
// 행삭제 버튼
|
|
$("#btnDelRow").click(function(){
|
|
fn_deleteRow();
|
|
});
|
|
|
|
// 저장 버튼
|
|
$("#btnSave").click(function(){
|
|
fn_save();
|
|
});
|
|
|
|
// 닫기 버튼
|
|
$("#btnClose").click(function(){
|
|
self.close();
|
|
});
|
|
|
|
// 그리드 초기화 및 조회
|
|
fn_search();
|
|
});
|
|
|
|
// 프로젝트별 파트 목록 캐시
|
|
var _PART_LIST_CACHE = {};
|
|
|
|
// 프로젝트번호로 MBOM 파트 목록 조회
|
|
function fn_getPartListByProject(projectNo) {
|
|
if (!projectNo) return [{"CODE": "", "NAME": "선택"}];
|
|
|
|
// 캐시에 있으면 캐시에서 반환
|
|
if (_PART_LIST_CACHE[projectNo]) {
|
|
return _PART_LIST_CACHE[projectNo];
|
|
}
|
|
|
|
// 서버에서 조회
|
|
var partList = [{"CODE": "", "NAME": "선택"}].concat(
|
|
fnc_getJsonAllDataListBySqlId({"sqlId": "common.getMbomPartListByProjectNo", "PROJECT_NO": projectNo})
|
|
);
|
|
|
|
// 캐시에 저장
|
|
_PART_LIST_CACHE[projectNo] = partList;
|
|
|
|
return partList;
|
|
}
|
|
|
|
// 그리드 초기화 및 조회
|
|
function fn_search(){
|
|
// 파일 팝업이 열려있는 동안에는 새로고침 방지
|
|
if(_filePopupOpen) return;
|
|
|
|
var columns = [
|
|
{formatter:"rowSelection", titleFormatter:"rowSelection", hozAlign:"center", headerSort:false, width:30},
|
|
{title:'검사일', field:'INSPECTION_DATE', headerHozAlign:'center', hozAlign:'center', width:110,
|
|
editor:"date"
|
|
},
|
|
{title:'검사자', field:'INSPECTOR_ID', headerHozAlign:'center', hozAlign:'center', width:100,
|
|
editor: fnc_customSelectEditor,
|
|
formatter: function(cell) {
|
|
return fnc_customSelectFormatter(cell, {valueId:"CODE", labelId:"NAME", values:_INSPECTOR_LIST});
|
|
},
|
|
editorParams: {valueId:"CODE", labelId:"NAME", values:_INSPECTOR_LIST}
|
|
},
|
|
{title:'진행공정', field:'PROCESS_CD', headerHozAlign:'center', hozAlign:'center', width:130,
|
|
editor: fnc_customSelectEditor,
|
|
formatter: function(cell) {
|
|
return fnc_customSelectFormatter(cell, {valueId:"CODE", labelId:"NAME", values:_PROCESS_LIST});
|
|
},
|
|
editorParams: {valueId:"CODE", labelId:"NAME", values:_PROCESS_LIST}
|
|
},
|
|
{title:'프로젝트번호', field:'PROJECT_OBJID', headerHozAlign:'center', hozAlign:'center', width:130,
|
|
editor: function(cell, onRendered, success, cancel, editorParams) {
|
|
var cellValue = cell.getValue();
|
|
var select = document.createElement("select");
|
|
select.style.width = "100%";
|
|
select.style.boxSizing = "border-box";
|
|
|
|
// 옵션 생성
|
|
_PROJECT_LIST.forEach(function(item) {
|
|
var option = document.createElement("option");
|
|
option.value = item.CODE;
|
|
option.text = item.NAME;
|
|
if(item.CODE == cellValue) option.selected = true;
|
|
select.appendChild(option);
|
|
});
|
|
|
|
// 선택 변경 시 즉시 적용 및 제품구분 업데이트
|
|
select.addEventListener("change", function() {
|
|
var selectedValue = select.value;
|
|
var productName = "";
|
|
|
|
// 제품구분 찾기
|
|
for(var i = 0; i < _PROJECT_LIST.length; i++) {
|
|
if(_PROJECT_LIST[i].CODE == selectedValue) {
|
|
productName = _PROJECT_LIST[i].PRODUCT_NAME || "";
|
|
break;
|
|
}
|
|
}
|
|
|
|
// 파트 목록 미리 로드
|
|
if(selectedValue) {
|
|
fn_getPartListByProject(selectedValue);
|
|
}
|
|
|
|
// 제품구분 및 파트 초기화
|
|
cell.getRow().update({
|
|
"PART_OBJID": "",
|
|
"PART_NO": "",
|
|
"PART_NAME": "",
|
|
"PRODUCT_NAME": productName
|
|
});
|
|
|
|
success(selectedValue);
|
|
});
|
|
|
|
select.addEventListener("blur", function() {
|
|
success(select.value);
|
|
});
|
|
|
|
onRendered(function() {
|
|
select.focus();
|
|
});
|
|
|
|
return select;
|
|
},
|
|
formatter: function(cell) {
|
|
return fnc_customSelectFormatter(cell, {valueId:"CODE", labelId:"NAME", values:_PROJECT_LIST});
|
|
}
|
|
},
|
|
{title:'제품구분', field:'PRODUCT_NAME', headerHozAlign:'center', hozAlign:'center', width:130,
|
|
editor: false
|
|
},
|
|
{title:'품번', field:'PART_OBJID', headerHozAlign:'center', hozAlign:'left', width:250,
|
|
editor: fnc_customSelectEditor,
|
|
formatter: function(cell) {
|
|
var projectObjid = cell.getData().PROJECT_OBJID;
|
|
var partList = fn_getPartListByProject(projectObjid);
|
|
return fnc_customSelectFormatter(cell, {valueId:"CODE", labelId:"NAME", values: partList});
|
|
},
|
|
editorParams: function(cell) {
|
|
var projectObjid = cell.getData().PROJECT_OBJID;
|
|
var partList = fn_getPartListByProject(projectObjid);
|
|
return {valueId:"CODE", labelId:"NAME", values: partList};
|
|
}
|
|
},
|
|
{title:'품명', field:'PART_NAME', headerHozAlign:'center', hozAlign:'left', width:180,
|
|
editor: false
|
|
},
|
|
{title:'검사수량', field:'INSPECTION_QTY', headerHozAlign:'center', hozAlign:'right', width:80,
|
|
editor:"input",
|
|
formatter:"money", formatterParams:{thousand:",", precision:false}
|
|
},
|
|
// {title:'불량수량', field:'DEFECT_QTY', headerHozAlign:'center', hozAlign:'right', width:80,
|
|
// editor:"input",
|
|
// formatter:"money", formatterParams:{thousand:",", precision:false}
|
|
// },
|
|
{title:'작업환경상태', field:'WORK_ENV_STATUS', headerHozAlign:'center', hozAlign:'center', width:100,
|
|
editor: fnc_customSelectEditor,
|
|
formatter: function(cell) {
|
|
return fnc_customSelectFormatter(cell, {valueId:"CODE", labelId:"NAME", values:_WORK_ENV_STATUS_LIST});
|
|
},
|
|
editorParams: {valueId:"CODE", labelId:"NAME", values:_WORK_ENV_STATUS_LIST}
|
|
},
|
|
{title:'측정기', field:'MEASURING_DEVICE', headerHozAlign:'center', hozAlign:'center', width:100,
|
|
editor: fnc_customSelectEditor,
|
|
formatter: function(cell) {
|
|
return fnc_customSelectFormatter(cell, {valueId:"CODE", labelId:"NAME", values:_MEASURING_DEVICE_LIST});
|
|
},
|
|
editorParams: {valueId:"CODE", labelId:"NAME", values:_MEASURING_DEVICE_LIST}
|
|
},
|
|
{title:'검사결과', field:'INSPECTION_RESULT', headerHozAlign:'center', hozAlign:'center', width:80,
|
|
editor: fnc_customSelectEditor,
|
|
formatter: function(cell) {
|
|
var val = cell.getValue();
|
|
if(val === 'NG') return '<span class="inspection-ng">NG</span>';
|
|
if(val === 'OK') return '<span class="inspection-ok">OK</span>';
|
|
return fnc_customSelectFormatter(cell, {valueId:"CODE", labelId:"NAME", values:_INSPECTION_RESULT_LIST});
|
|
},
|
|
editorParams: {valueId:"CODE", labelId:"NAME", values:_INSPECTION_RESULT_LIST}
|
|
},
|
|
{title:'담당팀', field:'DEPT_CD', headerHozAlign:'center', hozAlign:'center', width:100,
|
|
editor: fnc_customSelectEditor,
|
|
formatter: function(cell) {
|
|
return fnc_customSelectFormatter(cell, {valueId:"CODE", labelId:"NAME", values:_DEPT_LIST});
|
|
},
|
|
editorParams: {valueId:"CODE", labelId:"NAME", values:_DEPT_LIST}
|
|
},
|
|
{title:'담당자', field:'USER_ID', headerHozAlign:'center', hozAlign:'center', width:100,
|
|
editor: fnc_customSelectEditor,
|
|
formatter: function(cell) {
|
|
return fnc_customSelectFormatter(cell, {valueId:"CODE", labelId:"NAME", values:_USER_LIST});
|
|
},
|
|
editorParams: {valueId:"CODE", labelId:"NAME", values:_USER_LIST}
|
|
},
|
|
|
|
{title:'특이사항', field:'REMARK', headerHozAlign:'center', hozAlign:'left', width:150,
|
|
editor:"input"
|
|
},
|
|
{title:'조치현황', field:'ACTION_STATUS', headerHozAlign:'center', hozAlign:'left', width:150,
|
|
editor:"input"
|
|
},
|
|
|
|
{title:'이미지파일', field:'IMAGE_FILE_CNT', headerHozAlign:'center', hozAlign:'center', width:90,
|
|
formatter: fnc_subInfoValueFormatter,
|
|
cellClick: function(e, cell) {
|
|
var objId = fnc_checkNull(cell.getData().OBJID);
|
|
if(objId) {
|
|
fn_openImageFilePopUp(objId);
|
|
} else {
|
|
Swal.fire("먼저 저장 후 이미지를 등록할 수 있습니다.");
|
|
}
|
|
}
|
|
}
|
|
// {title:'첨부파일', field:'ATTACH_FILE_CNT', headerHozAlign:'center', hozAlign:'center', width:90,
|
|
// formatter: fnc_subInfoValueFormatter,
|
|
// cellClick: function(e, cell) {
|
|
// var objId = fnc_checkNull(cell.getData().OBJID);
|
|
// if(objId) {
|
|
// fn_openAttachFilePopUp(objId);
|
|
// } else {
|
|
// Swal.fire("먼저 저장 후 파일을 등록할 수 있습니다.");
|
|
// }
|
|
// }
|
|
// }
|
|
];
|
|
|
|
// 그리드가 없으면 생성
|
|
if(!grid){
|
|
grid = new Tabulator("#grid", {
|
|
layout: "fitColumns",
|
|
height: "calc(100vh - 150px)",
|
|
columns: columns,
|
|
data: [],
|
|
selectableRows: true,
|
|
placeholder: "데이터가 없습니다."
|
|
});
|
|
|
|
// 셀 편집 이벤트
|
|
grid.on("cellEdited", function(cell) {
|
|
var row = cell.getRow();
|
|
var field = cell.getField();
|
|
|
|
// 파트 선택 시 품번/품명 자동 설정
|
|
if (field === 'PART_OBJID') {
|
|
var partObjid = cell.getValue();
|
|
var projectObjid = row.getData().PROJECT_OBJID;
|
|
if (partObjid && projectObjid) {
|
|
var partList = fn_getPartListByProject(projectObjid);
|
|
for (var i = 0; i < partList.length; i++) {
|
|
if (partList[i].CODE == partObjid) {
|
|
row.update({
|
|
"PART_NO": partList[i].PART_NO || '',
|
|
"PART_NAME": partList[i].PART_NAME || ''
|
|
});
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// 불량수량 입력 시 검사결과 자동 설정
|
|
if (field === 'DEFECT_QTY') {
|
|
var defectQty = parseInt(cell.getValue()) || 0;
|
|
if (defectQty > 0) {
|
|
row.update({"INSPECTION_RESULT": "NG"});
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
// 데이터 조회 (마스터 OBJID가 있을 때만)
|
|
var masterObjId = $("#MASTER_OBJID").val();
|
|
if(masterObjId){
|
|
var param = {
|
|
MASTER_OBJID: masterObjId
|
|
};
|
|
grid = fnc_tabul_search(_tabul_layout_fitDataStretch, grid, "/quality/processInspectionDetailGridList.do", columns, false, false, true, param);
|
|
}
|
|
}
|
|
|
|
// 행 추가
|
|
function fn_addRow(){
|
|
rowIndex++;
|
|
var newRow = {
|
|
"OBJID": fnc_createObjId(), // OBJID 미리 생성 (파일 첨부 가능하도록)
|
|
"ROW_INDEX": rowIndex,
|
|
"PROCESS_CD": "",
|
|
"PROJECT_OBJID": "",
|
|
"PRODUCT_NAME": "",
|
|
"PART_OBJID": "",
|
|
"PART_NO": "",
|
|
"PART_NAME": "",
|
|
"INSPECTION_QTY": "",
|
|
"DEFECT_QTY": "",
|
|
"WORK_ENV_STATUS": "",
|
|
"MEASURING_DEVICE": "",
|
|
"DEPT_CD": "",
|
|
"USER_ID": "",
|
|
"INSPECTION_DATE": "${today}", // 검사일 기본값: 오늘
|
|
"INSPECTOR_ID": "<%=connector%>", // 검사자 기본값: 접속자
|
|
"REMARK": "",
|
|
"ACTION_STATUS": "",
|
|
"INSPECTION_RESULT": "",
|
|
"IMAGE_FILE_CNT": 0,
|
|
"ATTACH_FILE_CNT": 0,
|
|
"GRID_STATUS": "I" // 신규 행 표시
|
|
};
|
|
grid.addRow(newRow, false);
|
|
}
|
|
|
|
// 행 삭제
|
|
function fn_deleteRow(){
|
|
var selectedRows = grid.getSelectedRows();
|
|
if(selectedRows.length == 0){
|
|
Swal.fire("삭제할 행을 선택하세요.");
|
|
return;
|
|
}
|
|
|
|
Swal.fire({
|
|
title: '선택한 ' + selectedRows.length + '건을 삭제하시겠습니까?',
|
|
icon: 'warning',
|
|
showCancelButton: true,
|
|
confirmButtonText: '삭제',
|
|
cancelButtonText: '취소'
|
|
}).then((result) => {
|
|
if(result.isConfirmed){
|
|
selectedRows.forEach(function(row){
|
|
row.delete();
|
|
});
|
|
}
|
|
});
|
|
}
|
|
|
|
// 저장
|
|
function fn_save(){
|
|
var gridData = grid.getData();
|
|
if(gridData.length == 0){
|
|
Swal.fire("저장할 데이터가 없습니다.");
|
|
return;
|
|
}
|
|
|
|
// 필수값 검증
|
|
for(var i = 0; i < gridData.length; i++){
|
|
if(!gridData[i].PROCESS_CD){
|
|
Swal.fire((i+1) + "번째 행의 진행공정을 선택하세요.");
|
|
return;
|
|
}
|
|
if(!gridData[i].PART_NO){
|
|
Swal.fire((i+1) + "번째 행의 품번을 입력하세요.");
|
|
return;
|
|
}
|
|
}
|
|
|
|
Swal.fire({
|
|
title: '저장하시겠습니까?',
|
|
icon: 'question',
|
|
showCancelButton: true,
|
|
confirmButtonText: '저장',
|
|
cancelButtonText: '취소'
|
|
}).then((result) => {
|
|
if(result.isConfirmed){
|
|
$.ajax({
|
|
url: "/quality/saveProcessInspection.do",
|
|
type: "POST",
|
|
data: {
|
|
"MASTER_OBJID": $("#MASTER_OBJID").val(),
|
|
"dataList": JSON.stringify(gridData)
|
|
},
|
|
dataType: "json",
|
|
success: function(result){
|
|
if(result.RESULT == "SUCCESS"){
|
|
// 저장된 마스터 OBJID 저장
|
|
if(result.MASTER_OBJID){
|
|
$("#MASTER_OBJID").val(result.MASTER_OBJID);
|
|
}
|
|
Swal.fire({
|
|
title: '저장되었습니다.',
|
|
icon: 'success'
|
|
}).then(() => {
|
|
if(window.opener && window.opener.fn_search){
|
|
window.opener.fn_search();
|
|
}
|
|
});
|
|
} else {
|
|
Swal.fire({
|
|
title: '저장 실패',
|
|
text: result.MESSAGE || '저장 중 오류가 발생했습니다.',
|
|
icon: 'error'
|
|
});
|
|
}
|
|
},
|
|
error: function(xhr, status, error){
|
|
Swal.fire({
|
|
title: '저장 실패',
|
|
text: '서버 통신 오류가 발생했습니다.',
|
|
icon: 'error'
|
|
});
|
|
}
|
|
});
|
|
}
|
|
});
|
|
}
|
|
|
|
// 이미지 파일 팝업
|
|
function fn_openImageFilePopUp(objId) {
|
|
_filePopupOpen = true; // 파일 팝업 열림 플래그 설정
|
|
|
|
var popup_width = 650;
|
|
var popup_height = 550;
|
|
var url = "/common/ImageRegistPopup.do?targetObjId=" + objId + "&docType=PROCESS_INSPECTION_IMAGE&docTypeName=공정검사이미지";
|
|
var popup = window.open(url, "imageFilePopUp", "width=" + popup_width + ",height=" + popup_height + ",scrollbars=yes,resizable=yes");
|
|
|
|
// 팝업 닫힘 감지하여 해당 행의 파일 카운트만 업데이트
|
|
fn_watchPopupClose(popup, objId, 'IMAGE_FILE_CNT', 'PROCESS_INSPECTION_IMAGE');
|
|
}
|
|
|
|
// 첨부파일 팝업
|
|
function fn_openAttachFilePopUp(objId) {
|
|
_filePopupOpen = true; // 파일 팝업 열림 플래그 설정
|
|
|
|
var popup_width = 800;
|
|
var popup_height = 300;
|
|
var params = "?targetObjId=" + objId + "&docType=PROCESS_INSPECTION_FILE&docTypeName=공정검사첨부";
|
|
var url = "/common/FileRegistPopup.do" + params;
|
|
var popup = window.open(url, "attachFilePopUp", "width=" + popup_width + ",height=" + popup_height + ",scrollbars=yes,resizable=yes");
|
|
|
|
// 팝업 닫힘 감지하여 해당 행의 파일 카운트만 업데이트
|
|
fn_watchPopupClose(popup, objId, 'ATTACH_FILE_CNT', 'PROCESS_INSPECTION_FILE');
|
|
}
|
|
|
|
// 팝업 닫힘 감지 및 파일 카운트 업데이트
|
|
function fn_watchPopupClose(popup, objId, fieldName, docType) {
|
|
var checkPopup = setInterval(function() {
|
|
if(popup.closed) {
|
|
clearInterval(checkPopup);
|
|
_filePopupOpen = false; // 파일 팝업 닫힘 플래그 해제
|
|
// 파일 카운트 조회 후 해당 행만 업데이트
|
|
fn_updateGridFileCnt(objId, fieldName, docType);
|
|
}
|
|
}, 500);
|
|
}
|
|
|
|
// 그리드 파일 카운트 업데이트
|
|
function fn_updateGridFileCnt(objId, fieldName, docType) {
|
|
$.ajax({
|
|
url: "/common/getFileList.do",
|
|
type: "POST",
|
|
data: { targetObjId: objId, docType: docType },
|
|
dataType: "json",
|
|
success: function(data) {
|
|
var cnt = data ? data.length : 0;
|
|
var rows = grid.getRows();
|
|
rows.forEach(function(row) {
|
|
if(row.getData().OBJID === objId) {
|
|
var updateData = {};
|
|
updateData[fieldName] = cnt;
|
|
row.update(updateData);
|
|
}
|
|
});
|
|
}
|
|
});
|
|
}
|
|
|
|
// 공통 fnc_tabulCallbackFnc 오버라이드 (이 페이지에서는 grid 사용)
|
|
function fnc_tabulCallbackFnc(objId, docType, columnField, fileCnt) {
|
|
var rows = grid.getRows();
|
|
rows.forEach(function(row) {
|
|
if(row.getData().OBJID === objId) {
|
|
var updateData = {};
|
|
var targetField = (columnField && columnField !== '') ? columnField : 'FILE_CNT';
|
|
updateData[targetField] = fileCnt;
|
|
row.update(updateData);
|
|
}
|
|
});
|
|
}
|
|
|
|
// 팝업 닫힐 때 부모 새로고침
|
|
window.addEventListener('unload', function() {
|
|
if(window.opener && window.opener.fn_search) {
|
|
window.opener.fn_search();
|
|
}
|
|
});
|
|
</script>
|
|
|
|
<body style="overflow-x: hidden;">
|
|
<form name="form1" id="form1" action="" method="post" onsubmit="return false">
|
|
<input type="hidden" name="MASTER_OBJID" id="MASTER_OBJID" value="${param.OBJID}">
|
|
|
|
<div class="plm_menu_name_gdnsi">
|
|
<h2><span>공정검사 등록</span></h2>
|
|
<div class="btnArea">
|
|
<input type="button" value="행추가" class="plm_btns" id="btnAddRow">
|
|
<input type="button" value="행삭제" class="plm_btns" id="btnDelRow">
|
|
<input type="button" value="저장" class="plm_btns" id="btnSave">
|
|
<input type="button" value="닫기" class="plm_btns" id="btnClose">
|
|
</div>
|
|
</div>
|
|
|
|
<!-- <div class="form-header">
|
|
<div>
|
|
<label>검사일<span class="required">*</span></label>
|
|
<input type="text" name="INSPECTION_DATE" id="INSPECTION_DATE" class="date_icon" style="width:120px;" value="${info.inspection_date}">
|
|
</div>
|
|
<div>
|
|
<label>검사자<span class="required">*</span></label>
|
|
<select name="INSPECTOR_ID" id="INSPECTOR_ID" class="select2" style="width:150px;">
|
|
<option value="">선택</option>
|
|
${code_map.inspector_id}
|
|
</select>
|
|
</div>
|
|
</div> -->
|
|
|
|
<div id="grid" style="margin: 10px;"></div>
|
|
</form>
|
|
</body>
|
|
</html>
|