Files
wace_plm/WebContent/WEB-INF/view/structureReviewReport/structureReviewReportFormPopup.jsp
chpark da06c4684c Initial commit: WACE PLM with database initialization features
- Add Docker Compose configurations for dev, prod, and standalone environments
- Add database initialization scripts (init-db.sh, init-db-docker.sh)
- Add enhanced start-docker-linux.sh with DB init support
- Add comprehensive database initialization guide
- Support for automatic dbexport.pgsql import on first run
- Include safety checks for production environment
2025-08-29 15:46:08 +09:00

671 lines
21 KiB
Plaintext

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="com.pms.common.utils.*"%>
<%@ page import="java.util.*" %>
<%@include file= "/init.jsp" %>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title><%=Constants.SYSTEM_NAME%></title>
<script>
$(document).ready(function(){
//첨부 파일 기능
fnc_setFileDropZone("suggestDropZone", "${info.OBJID}", "${suggestPptCode}", "${suggestPptName}", "suggestAreaDraw",true,null,null,"PPT|PPTX");
fnc_setFileDropZone("designDropZone", "${info.OBJID}", "${designPptCode}", "${designPptName}", "designAreaDraw",true,null,null,"PPT|PPTX");
suggestAreaDraw();
designAreaDraw();
$(document).on("click", ".btnDeleteFile", function(){
var objId = $(this).attr("data-OBJID");
var areaId = $(this).attr("data-TYPE");
if(areaId == "suggest"){
fileDelete(objId, "suggestAreaDraw", true);
}else{
fileDelete(objId, "designAreaDraw", true);
}
});
$(".upload_btns").click(function(){
var type = $(this).attr("data-TYPE");
var files = "";
if(type == "suggest"){
files = $("#file1")[0].files;
}else{
files = $("#file2")[0].files;
}
if(files.length > 0){
if(type == "suggest"){
fnc_fileMultiUpload(files, null, "${info.OBJID}", "${suggestPptCode}", "${suggestPptName}", null, "suggestAreaDraw", "PPT|PPTX");
$("#file1").val("");
}else{
fnc_fileMultiUpload(files, null, "${info.OBJID}", "${designPptCode}", "${designPptName}", null, "designAreaDraw", "PPT|PPTX");
$("#file2").val("");
}
//file객체 초기화
}else{
Swal.fire("선택된 File이 없습니다.");
}
});
//고객사 setting
fn_setOEMList();
//제품군 setting
fn_setProductGroupList();
//고객사별 차종 목록 조회
$("#oemObjId").change(function(){
var oemObjId = $(this).val();
fn_setCarTypeList(oemObjId);
});
//제품군별 제품 목록 조회
$("#prodGroupObjId").change(function(){
var productGroupObjId = $(this).val();
fn_setProductList(productGroupObjId);
});
//파트조회
$(".searchPart").click(function(){
fn_openSearchPart();
});
$("#btnSave").click(function(){
fn_save();
});
$("#btnClose").click(function(){
self.close(0);
});
//취소
$("#btnCancel").click(function(){
var objId = $(this).attr("data-OBJID");
var params = "?objId="+objId;
document.form1.action ="/structureReviewReport/structureReviewReportDetailPopup.do"+params;
document.form1.submit();
});
//단계 change
$("#step1").change(function(){
fnc_setStep2($(this).val(), "${info.STEP2}");
});
//단계1 change trigger
$("#step1").trigger("change");
//조치현황 영역 클릭
$("input[name=actionResult]").click(function(){
var val = $(this).val();
if(val == "reject"){
$("#rejectReason").show();
}else{
$("#rejectReason").val("");
$("#rejectReason").hide();
}
});
if($("input[name=actionResult]:checked").val() == "reject"){
$("#rejectReason").show();
}
/* fnc_datepick(); */
});
</script>
<script>
//첨부파일 목록을 가져온다.
function suggestAreaDraw(){
fn_pptFileCallback("suggest","${suggestPptCode}");
}
function designAreaDraw(){
fn_pptFileCallback("design","${designPptCode}");
}
function refeshPptAttachFileArea(){
pptFileAreaDraw();
}
//첨부파일 목록을 가져온다.
function fn_pptFileCallback(areaId, fileType){
$.ajax({
url:"/common/getFileList.do",
type:"POST",
data:{"targetObjId":"${info.OBJID}", "docType":fileType},
dataType:"json",
success:function(data){
if(0 <data.length){
$("#"+areaId+"FileArea").empty();
$.each(data, function(i){
var appendText ="";
/* appendText +="<colgroup>";
appendText +=" <col width='*%''>";
appendText +=" <col width='25%'>";
appendText +=" <col width='20%'>";
appendText +=" <col width='7%''>";
appendText +="</colgroup>"; */
appendText+= "<tr>";
appendText+= " <td title='"+data[i].REAL_FILE_NAME+"' class='align_l'><a href='javascript:fnc_downloadFile(\""+data[i].OBJID+"\")'>&nbsp;&nbsp;"+data[i].REAL_FILE_NAME+"</a></td>";
appendText+= " <td title='"+data[i].DEPT_NAME+"' '"+data[i].USER_NAME+"'>"+data[i].DEPT_NAME+" "+ data[i].USER_NAME+"</td>"
appendText+= " <td title='"+data[i].REGDATE+"'>"+data[i].REGDATE+"</td>";
appendText+= " <td><input type='button' class='date_delete btnDeleteFile' value='x' data-TYPE='"+areaId+"' data-OBJID='"+data[i].OBJID+"'></td>"
appendText+= "</tr>";
$("#"+areaId+"FileArea").append(appendText);
$("#"+areaId+"FileZone").hide();
});
}else{
$("#"+areaId+"FileArea").empty();
$("#"+areaId+"FileZone").show();
var appendText = "";
appendText +="<tr>";
appendText += "<td colspan='4'>첨부 파일이 없습니다.</td>";
appendText +="</tr>";
$("#"+areaId+"FileArea").append(appendText);
}
},
error: function(jqxhr,status,error){
}
});
}
//첨부 파일 삭제
function fileDelete(fileObjId, callbackFnc, confirmFlag){
if(confirmFlag){
fnc_deleteFile(fileObjId,callbackFnc);
}else{
$.ajax({
url:"/common/deleteFileInfo.do",
type:"POST",
data:{"objId":fileObjId},
dataType:"json",
async :true,
success:function(data){
eval(callbackFnc+"();");
},
error: function(jqxhr,status, error){
}
});
}
}
//save
function fn_save(){
if(fn_validate()){
if(confirm("저장하시겠습니까?")){
$.ajax({
url:"/structure/saveReport.do",
type:"POST",
data:$("#form1").serialize(),
dataType:"json",
success:function(data){
Swal.fire(data.msg);
opener.fn_search();
//self.close(0);
document.form1.action = "/structureReviewReport/structureReviewReportDetailPopup.do";
document.form1.submit();
},
error: function(jqxhr, status, error){
}
});
}
}
}
//oem 목록 조회
function fn_setOEMList(){
$.ajax({
url:"/common/getOEMList.do",
type:"POST",
data:{"isJson":true},
dataType:"json",
success:function(data){
var appendCode = "";
$.each(data, function(i){
appendCode += "<option value='"+data[i].OBJID+"'>"+data[i].OEM_NAME+"("+data[i].OEM_CODE+")</option>";
});
$("#oemObjId").append(appendCode);
var dbVal = fnc_checkNull("${info.OEM_OBJID}");
if(dbVal != ""){
$("#oemObjId > option[value="+dbVal+"]").attr("selected", "true");
$("#oemObjId").trigger("change");
}
},
error: function(jqxhr, status, error){
}
});
}
//car 목록 조회
function fn_setCarTypeList(oemObjId){
if(fnc_checkNull(oemObjId) != ""){
$.ajax({
url:"/common/getCarTypeList.do",
type:"POST",
data:{"isJson":true, "search_oemObjId":oemObjId},
dataType:"json",
success:function(data){
var appendCode = "<option value=''>선택</option>";
$.each(data, function(i){
appendCode += "<option value='"+data[i].OBJID+"'>"+data[i].CAR_CODE+"("+data[i].CAR_NAME+")</option>";
});
$("#carObjId").children().remove();
$("#carObjId").append(appendCode);
$("#carObjId > option[value=${info.CAR_OBJID}]").attr("selected", "true");
},
error: function(jqxhr, status, error){
}
});
}else{
$("#carObjId").children().remove();
$("#carObjId").append("<option value=''>선택</option>");
}
}
//product group 목록 조회
function fn_setProductGroupList(){
$.ajax({
url:"/common/getProductGroupList.do",
type:"POST",
data:{"isJson":true},
dataType:"json",
success:function(data){
var appendCode = "";
$.each(data, function(i){
appendCode += "<option value='"+data[i].OBJID+"'>"+data[i].PRODUCT_GROUP_NAME+"</option>";
});
$("#prodGroupObjId").append(appendCode);
var dbVal = fnc_checkNull("${info.PROD_GROUP_OBJID}");
if(dbVal != ""){
$("#prodGroupObjId > option[value="+dbVal+"]").attr("selected", "true");
$("#prodGroupObjId").trigger("change");
}
},
error: function(jqxhr, status, error){
}
});
}
//product 목록 조회
function fn_setProductList(productGroupObjId){
if(fnc_checkNull(productGroupObjId) != ""){
$.ajax({
url:"/common/getProductList.do",
type:"POST",
data:{"isJson":true, "search_productGroupObjId":productGroupObjId},
dataType:"json",
success:function(data){
var appendCode = "<option value=''>선택</option>";
$.each(data, function(i){
appendCode += "<option value='"+data[i].OBJID+"'>"+data[i].PRODUCT_NAME+"</option>";
});
$("#prodObjId").children().remove();
$("#prodObjId").append(appendCode);
$("#prodObjId > option[value=${info.PROD_OBJID}]").attr("selected", "true");
},
error: function(jqxhr, status, error){
}
});
}else{
$("#prodObjId").children().remove();
$("#prodObjId").append("<option value=''>선택</option>");
}
}
//파트 조회 팝업
function fn_openSearchPart(){
var targetObjId = $("#objId").val();
var url = "/common/openSearchPartPopup.do?callback=setPartInfo&targetObjId="+targetObjId;
window.open(url, "searchPart", "width=600, height=400");
}
//파트 조회 post process
function setPartInfo(partObjId, partNo, partName){
$("#partNo").val(partNo);
$("#partName").val(partName);
}
//정합성체크
function fn_validate(){
if($("#region").val() == null || $("#region").val() == ""){
Swal.fire("지역을 선택해 주시기 바랍니다.");
$("#region").focus();
return false;
}
if($("#oemObjId").val() == null || $("#oemObjId").val() == ""){
Swal.fire("고객사를 선택해 주시기 바랍니다.");
$("#oemObjId").focus();
return false;
}
if($("#carObjId").val() == null || $("#carObjId").val() == ""){
Swal.fire("차종을 선택해 주시기 바랍니다.");
$("#carObjId").focus();
return false;
}
if($("#prodGroupObjId").val() == null || $("#prodGroupObjId").val() == ""){
Swal.fire("제품군을 선택해 주시기 바랍니다.");
$("#prodGroupObjId").focus();
return false;
}
if($("#prodObjId").val() == null || $("#prodObjId").val() == ""){
Swal.fire("제품을 선택해 주시기 바랍니다.");
$("#prodObjId").focus();
return false;
}
if($("#partNo").val() == null || $("#partNo").val() == ""){
Swal.fire("품번을 입력해 주시기 바랍니다.");
$("#partNo").focus();
return false;
}
if($("#step1").val() == null || $("#step1").val() == ""){
Swal.fire("상위단계를 선택해 주시기 바랍니다.");
$("#step1").focus();
return false;
}
if($("#step2").val() == null || $("#step2").val() == ""){
Swal.fire("하위단계를 선택해 주시기 바랍니다.");
$("#step2").focus();
return false;
}
if($("#type1").val() == null || $("#type1").val() == ""){
Swal.fire("상위유형을 선택해 주시기 바랍니다.");
$("#type1").focus();
return false;
}
if($("#type2").val() == null || $("#type2").val() == ""){
Swal.fire("하위유형을 선택해 주시기 바랍니다.");
$("#type2").focus();
return false;
}
if($("#subject").val() == null || $("#subject").val() == ""){
Swal.fire("제목을 입력해 주시기 바랍니다.");
$("#subject").focus();
return false;
}
return true;
}
</script>
</head>
<body>
<form name="form1" id="form1" action="" method="post">
<input type="hidden" name="objId" id="objId" value="${info.OBJID}" />
<div class="plm_menu_name">
<h2>
<span>구조검토 제안서</span>
</h2>
</div>
<div id="businessPopupFormWrap">
<div class="form_popup_title">&nbsp;&nbsp;&nbsp;구조검토제안서 등록</div>
<table class="pmsPopupForm">
<colgroup>
<col width="14%">
<col width="*">
<col width="14%">
<col width="*">
</colgroup>
<tr>
<td class="input_title" colspan="">
<label for="">지역</label>
</td>
<td>
<select name="region" id="region" style="width:90%;">
<option value="">선택</option>
<option value="D" ${info.REGION eq 'D'?'selected':''}>국내</option>
<option value="F" ${info.REGION eq 'F'?'selected':''}>해외</option>
</select>
</td>
<td class="input_title">
<label for="">고객사</label>
</td>
<td>
<select name="oemObjId" id="oemObjId" style="width:90%;">
<option value="">선택</option>
</select>
</td>
</tr>
<tr>
<td class="input_title">
<label for="">차종</label>
</td>
<td>
<select name="carObjId" id="carObjId" style="width:90%;">
<option value="">선택</option>
</select>
</td>
<td class="input_title">
<label for="">제안일</label>
</td>
<td>
<input type="text" value="${info.REGDATE}" readonly>
</td>
</tr>
<tr>
<td class="input_title">
<label for="">제품군</label>
</td>
<td>
<select name="prodGroupObjId" id="prodGroupObjId" style="width:90%;">
<option value="">선택</option>
</select>
</td>
<td class="input_title">
<label for="">제품</label>
</td>
<td>
<select name="prodObjId" id="prodObjId" style="width:90%;">
<option value="">선택</option>
</select>
</td>
</tr>
<tr>
<td class="input_title">
<label for="">품번</label>
</td>
<td>
<input type="text" name="partNo" id="partNo" style="width:80%;" value="${info.PART_NO}" class="searchPart" readonly><span class="search_btn searchPart"></span>
</td>
<td class="input_title">
<label for="">품명</label>
</td>
<td>
<input type="text" name="partName" id="partName" style="width:80%;" value="${info.PART_NAME}" class="searchPart" readonly><span class="search_btn searchPart"></span>
</td>
</tr>
<tr>
<td class="input_title">
<label for="">단계</label>
</td>
<td>
<select name="step1" id="step1" style="width:48.7%;">
<option value="">선택</option>
<option value="design" ${info.STEP1 eq 'design'?'selected':''}>설계</option>
<option value="develop" ${info.STEP1 eq 'develop'?'selected':''}>개발</option>
<option value="production" ${info.STEP1 eq 'production'?'selected':''}>양산</option>
</select>
<select name="step2" id="step2" style="width:40%;">
<option value="">선택</option>
</select>
</td>
<td class="input_title">
<label for="">유형</label>
</td>
<td>
<select name="type1" id="type1" style="width:48.7%;">
<option value="유형">유형</option>
</select>
<select name="type2" id="type2" style="width:40%;">
<option value="">선택</option>
<option value="성형성" ${info.TYPE2 eq '성형성'?'selected':''}>성형성</option>
<option value="조립성" ${info.TYPE2 eq '조립성'?'selected':''}>조립성</option>
<option value="생산성" ${info.TYPE2 eq '생산성'?'selected':''}>생산성</option>
<option value="작업성" ${info.TYPE2 eq '작업성'?'selected':''}>작업성</option>
<option value="Data오류" ${info.TYPE2 eq 'Data오류'?'selected':''}>Data오류</option>
<option value="원가절감" ${info.TYPE2 eq '원가절감'?'selected':''}>원가절감</option>
</select>
</td>
</tr>
<tr>
<td class="input_title">
<label for="">제목</label>
</td>
<td class="tr_data_border_bottom"><input type="text" name="subject" id="subject" value="${info.SUBJECT}" maxlength="100"></td>
<td class="input_title" colspan="">
<label for="">과거차대상유무</label>
</td>
<td>
<select name="continualMngType" id="continualMngType">
<option value="">선택</option>
<option value="Y" ${info.CONTINUAL_MNG_TYPE eq 'Y'?'selected':''}>대상</option>
<option value="N" ${info.CONTINUAL_MNG_TYPE eq 'N'?'selected':''}>비대상</option>
</select>
</td>
</tr>
<tr>
<td class="input_title">
<label for="">문제점</label>
</td>
<td class="tr_data_border_bottom" title="">
<textarea name="problemContents" id="problemContents" placeholder="내용을 입력하세요." style="width:90%; height:100px; border: 1px solid #ccc; border-radius:2px;" title="${info.PROBLEM_CONTENTS}">${info.PROBLEM_CONTENTS}</textarea>
</td>
<td class="input_title">
<label for="">제안내용</label>
</td>
<td class="tr_data_border_bottom">
<textarea name="suggestContents" id="suggestContents" placeholder="내용을 입력하세요." style="width:90%; height:100px; border: 1px solid #ccc; border-radius:2px;" title="${info.SUGGEST_CONTENTS}">${info.SUGGEST_CONTENTS}</textarea>
</td>
</tr>
<tr>
<td class="input_title">
<label for="">조치결과</label>
</td>
<td>
<select name="actionResult" id="actionResult">
<option value="">선택</option>
<option name="actionResult" value="reflect" ${info.ACTION_RESULT eq 'reflect'?'selected':''}>반영</option>
<option name="actionResult" value="review" ${info.ACTION_RESULT eq 'review'?'selected':''}>검토</option>
<option name="actionResult" value="reject" ${info.ACTION_RESULT eq 'reject'?'selected':''}>불가</option>
</select>
</td>
</tr>
<tr>
<td rowspan="2" class="input_title">
<label for="">구조제안서<br>&nbsp;&nbsp;(제안자등록)</label>
</td>
<td colspan="3" id="suggestFileZone">
<div id="suggestDropZone" class="dropzone">Drag & Drop Files Here</div>
<input type="file" name="file1" id="file1" multiple>
<input type="button" id="btnUpload" value="Upload" data-TYPE="suggest" class="upload_btns">
</td>
</tr>
<tr>
<td colspan="3">
<div>
<table class="project_form_in_table" style="width:100%;">
<colgroup>
<col width="*">
<col width="25%">
<col width="20%">
<col width="7%">
</colgroup>
<thead>
<tr>
<td>첨부파일명</td>
<td>등록자</td>
<td>등록일</td>
<td></td>
</tr>
</thead>
</table>
</div>
<div class="" style="width:100%;height:25px;">
<table class="plm_table">
<colgroup>
<col width="*">
<col width="25%">
<col width="20%">
<col width="7%">
</colgroup>
<tbody id="suggestFileArea"></tbody>
</table>
</div>
</td>
</tr>
<tr>
<td rowspan="2" class="input_title">
<label for="">설계의견<br>&nbsp;&nbsp;(설계담당자등록)</label>
</td>
<td colspan="3" id="designFileZone">
<div id="designDropZone" class="dropzone">Drag & Drop Files Here</div>
<input type="file" name="file2" id="file2" multiple>
<input type="button" id="btnUpload" value="Upload" data-TYPE="design" class="upload_btns">
</td>
</tr>
<tr>
<td colspan="3">
<div>
<table class="project_form_in_table" style="width:100%;">
<colgroup>
<col width="*">
<col width="25%">
<col width="20%">
<col width="7%">
</colgroup>
<thead>
<tr>
<td>첨부파일명</td>
<td>등록자</td>
<td>등록일</td>
<td></td>
</tr>
</thead>
</table>
</div>
<div class="" style="width:100%;height:25px; border-bottom:1px solid #ccc;">
<table class="plm_table">
<colgroup>
<col width="*">
<col width="25%">
<col width="20%">
<col width="7%">
</colgroup>
<tbody id="designFileArea"></tbody>
</table>
</div>
</td>
</tr>
</table>
<div class="btn_wrap">
<div class="plm_btn_wrap_center">
<input type="button" value="저장" id="btnSave" class="plm_btns">
<c:choose>
<c:when test="${param.actionType eq 'regist'}">
</c:when>
<c:otherwise>
<input type="button" id="btnCancel" value="취소" class="plm_btns" data-OBJID="${info.OBJID}">
</c:otherwise>
</c:choose>
<input type="button" value="닫기" id="btnClose" class="plm_btns">
</div>
</div>
</div>
</form>
</body>
</html>