- 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
419 lines
11 KiB
Plaintext
419 lines
11 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_jqGrid.jsp"%>
|
|
<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
|
<title><%=Constants.SYSTEM_NAME%></title>
|
|
<script>
|
|
var deptList;
|
|
var userList;
|
|
$(document).ready(function(){
|
|
|
|
fn_getWBSTemplateTaskList();
|
|
|
|
$("._table1").scroll(function () {
|
|
$("._table2").scrollLeft($("._table1").scrollLeft());
|
|
});
|
|
$("._table2").scroll(function () {
|
|
$("._table1").scrollTop($("._table2").scrollTop());
|
|
$("._table1").scrollLeft($("._table2").scrollLeft());
|
|
});
|
|
|
|
deptList = fn_getDeptList();
|
|
userList = fn_getUserList();
|
|
|
|
$(".deptSelectBox").each(function(i){
|
|
var objId = $(this).attr("data-OBJID");
|
|
var thisDeptCode = $(this).attr("data-DEPT_CODE");
|
|
$(this).children('option').remove();
|
|
$(this).append(fn_setDeptList(deptList, thisDeptCode));
|
|
});
|
|
|
|
$(".userSelectBox").each(function(i){
|
|
var objId = $(this).attr("data-OBJID");
|
|
var thisDeptCode = $(this).attr("data-DEPT_CODE");
|
|
var userId = $(this).attr("data-MANAGER_USER_ID");
|
|
|
|
if("" != thisDeptCode){
|
|
$(this).children('option').remove();
|
|
$(this).append(fn_setUserList(userList,thisDeptCode,userId));
|
|
}
|
|
});
|
|
|
|
$(".deptSelectBox").change(function(i){
|
|
var objId = $(this).attr("data-OBJID");
|
|
var thisDeptCode = $(this).val();
|
|
|
|
$("#MANAGER_USER_ID_"+objId).children('option').remove();
|
|
$("#MANAGER_USER_ID_"+objId).append(fn_setUserList(userList,thisDeptCode,""));
|
|
});
|
|
|
|
$("#btnEdit").click(function(){
|
|
fn_edit();
|
|
});
|
|
|
|
$("#btnClose").click(function(){
|
|
opener.fn_search();
|
|
self.close();
|
|
});
|
|
|
|
$("#btnAdd").click(function(){
|
|
fn_openWBSTaskPopUp("");
|
|
});
|
|
|
|
$("#btnDelete").click(function(){
|
|
fn_deleteWBSTemplateTask();
|
|
});
|
|
});
|
|
|
|
function fn_deleteWBSTemplateTask(){
|
|
var checkArr = new Array();
|
|
var objidCodeArr = new Array();
|
|
|
|
$("input[name=CHK_OBJID]:checked").each(function(){
|
|
var objId = fnc_checkNull($(this).val().replace(" ",""));
|
|
checkArr.push(objId);
|
|
objidCodeArr.push($(this).parent().parent().find('input[name=OBJID_CODE]').val());
|
|
});
|
|
|
|
if(0 < checkArr.length){
|
|
if(confirm("삭제하시겠습니까?")){
|
|
$.ajax({
|
|
type : "POST",
|
|
url : "/project/deleteWBSTemplateTask.do",
|
|
data: {"checkArr":checkArr.join()
|
|
,"objidCodeArr":objidCodeArr.join()},
|
|
dataType:"json",
|
|
success:function(data){
|
|
Swal.fire(data.msg);
|
|
if(data.result =="true"){
|
|
fn_search();
|
|
}
|
|
}
|
|
,error: function(jqxhr, status, error){
|
|
}
|
|
});
|
|
}
|
|
}else{
|
|
Swal.fire("선택된 대상이 없습니다.");
|
|
return false;
|
|
}
|
|
}
|
|
|
|
function fn_openWBSTaskPopUp(objId){
|
|
var hiddenForm = document.hiddenForm;
|
|
|
|
var url = "/project/wbsTemplateTaskFormPopUp.do";
|
|
|
|
var target = "openWBSPopUp";
|
|
|
|
window.open(url,target,"width=700, height=145, menubars=no, scrollbars=no, resizable=yes");
|
|
|
|
hiddenForm.action = url;
|
|
hiddenForm.OBJID.value = objId;
|
|
hiddenForm.PARENT_OBJID.value = "${param.OBJID}";
|
|
hiddenForm.target = target;
|
|
hiddenForm.submit();
|
|
}
|
|
|
|
/**
|
|
* WBS Task 추가
|
|
*/
|
|
function fn_deleteWBSTask(objId){
|
|
|
|
}
|
|
|
|
function fn_search(){
|
|
fn_getWBSTemplateTaskList();
|
|
|
|
//fn_setSelectData();
|
|
|
|
}
|
|
|
|
function fn_setSelectData(){
|
|
|
|
var oemObjId = $("#OEM_OBJID").val();
|
|
|
|
$("input[name='WBS_TASK_OBJID']").each(function(i){
|
|
|
|
var targetVal = $(this).val();
|
|
|
|
var userSelectId = "MANAGER_USER_ID_"+targetVal;
|
|
var userSelectedVal = $("#TEMP_MANAGER_USER_ID_"+targetVal).val();
|
|
|
|
fnc_getDeptList2(deptSelectId, deptSelectedVal);
|
|
fnc_getUserList(userSelectId, deptSelectedVal, null, userSelectedVal);
|
|
fnc_getMilestoneList(oemObjId, milestoneSelectId, milestoneSelectedVal);
|
|
});
|
|
}
|
|
|
|
/*
|
|
* WBS Task 마스터에 연결된 Task 목록을 가져온다.
|
|
*/
|
|
function fn_getWBSTemplateTaskList(){
|
|
$("#wbsTaskListArea").empty();
|
|
|
|
$.ajax({
|
|
url:"/project/getWBSTemplateTaskList.do",
|
|
type:"POST",
|
|
data:{"OBJID":"${param.OBJID}"},
|
|
dataType:"json",
|
|
async:false,
|
|
success:function(data){
|
|
var wbsTaskList = data;
|
|
|
|
var appendText = "";
|
|
|
|
if(0 < wbsTaskList.length){
|
|
for(var i=0;i<wbsTaskList.length;i++){
|
|
var wbsTaskData = wbsTaskList[i];
|
|
|
|
var WBS_OBJID = wbsTaskData.OBJID;
|
|
var OBJID_CODE = fnc_checkNull(wbsTaskData.OBJID_CODE);
|
|
var TASK_NAME = fnc_checkNull(wbsTaskData.TASK_NAME);
|
|
var TASK_SEQ = fnc_checkNull(wbsTaskData.TASK_SEQ);
|
|
var MANAGER_USER_ID = fnc_checkNull(wbsTaskData.USER_ID);
|
|
var MANAGER_USER_ID_TITLE = fnc_checkNull(wbsTaskData.USER_ID_TITLE);
|
|
var UNIT_NO = fnc_checkNull(wbsTaskData.UNIT_NO);
|
|
|
|
appendText += " <tr>";
|
|
appendText += " <input type='hidden' name='OBJID' value='"+WBS_OBJID+"'> ";
|
|
appendText += " <input type='hidden' name='WBS_TASK_OBJID' value='"+WBS_OBJID+"'>";
|
|
appendText += " <input type='hidden' name='OBJID_CODE' value='"+OBJID_CODE+"'> ";
|
|
appendText += " <input type='hidden' name='TEMP_MANAGER_USER_ID_"+WBS_OBJID+"' id='TEMP_MANAGER_USER_ID_"+WBS_OBJID+"' value='"+MANAGER_USER_ID+"'>";
|
|
appendText += " <td>";
|
|
appendText += " <input type='checkbox' name='CHK_OBJID' value='"+WBS_OBJID+"'>";
|
|
appendText += " </td>";
|
|
//appendText += " <td>"+TASK_SEQ+"</td><!-- 순 --> ";
|
|
appendText += " <td><a href='#' onclick=\"fn_openWBSTaskPopUp('"+WBS_OBJID+"');\">"+TASK_NAME+"</a></td><!-- Task Name --> ";
|
|
appendText += " </td>";
|
|
appendText += " <td>";
|
|
appendText += " "+UNIT_NO;
|
|
appendText += " </td>";
|
|
appendText += " </tr>";
|
|
}
|
|
}else{
|
|
appendText = "<td align='center' colspan='9'>조회된 데이터가 없습니다.</td>";
|
|
}
|
|
|
|
$("#wbsTaskListArea").append(appendText);
|
|
},
|
|
error: function(jqxhr, status, error){
|
|
}
|
|
});
|
|
|
|
|
|
}
|
|
|
|
function fn_edit(){
|
|
if(confirm("수정하시겠습니까?")){
|
|
var form1 = document.form1;
|
|
form1.action = "/project/wbs/wbsTaskFormPopUp.do?OBJID=${param.OBJID}&objId=${param.OBJID}";
|
|
form1.submit();
|
|
}
|
|
}
|
|
|
|
function fn_getDeptList(){
|
|
var resultList;
|
|
|
|
$.ajax({
|
|
url:"/common/getDeptList.do",
|
|
type:"POST",
|
|
data:{"isJson":true},
|
|
dataType:"json",
|
|
async:false,
|
|
success:function(data){
|
|
resultList = data;
|
|
},
|
|
error: function(jqxhr, status, error){
|
|
}
|
|
});
|
|
return resultList;
|
|
}
|
|
|
|
function fn_setDeptList(deptList,selectedVal){
|
|
var resultTxt = "";
|
|
resultTxt += "<option value=''>선택</option>";
|
|
|
|
if(0 < deptList.length){
|
|
for (var i = 0; i < deptList.length; i++) {
|
|
var code = deptList[i].CODE;
|
|
var name = deptList[i].NAME;
|
|
|
|
if(selectedVal == code){
|
|
resultTxt += "<option value='"+code+"' selected>"+name+"</option>";
|
|
}else{
|
|
resultTxt += "<option value='"+code+"'>"+name+"</option>";
|
|
}
|
|
}
|
|
}
|
|
return resultTxt;
|
|
}
|
|
|
|
function fn_getUserList(deltCode,selectedVal){
|
|
var resultList;
|
|
$.ajax({
|
|
url:"/common/searchUserList.do",
|
|
type:"POST",
|
|
data:{"isJson":true},
|
|
dataType:"json",
|
|
async:false,
|
|
success:function(data){
|
|
resultList = data;
|
|
},
|
|
error: function(jqxhr, status, error){
|
|
}
|
|
});
|
|
return resultList;
|
|
}
|
|
|
|
function fn_setUserList(userList,deltCode,selectedVal){
|
|
var resultTxt = "";
|
|
resultTxt += "<option value=''>선택</option>";
|
|
|
|
if("" != deltCode && 0 < userList.length){
|
|
for (var i = 0; i < userList.length; i++) {
|
|
var code = userList[i].CODE;
|
|
var name = userList[i].NAME;
|
|
var userDeptCode = userList[i].DEPT_CODE;
|
|
|
|
if(deltCode == userDeptCode){
|
|
if(selectedVal == code){
|
|
resultTxt += "<option value='"+code+"' selected>"+name+"</option>";
|
|
}else{
|
|
resultTxt += "<option value='"+code+"'>"+name+"</option>";
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return resultTxt;
|
|
}
|
|
|
|
function fn_save(){
|
|
if(confirm("저장하시겠습니까?")){
|
|
$.ajax({
|
|
url:"/project/saveWBSTemplateMasterInfo.do",
|
|
type:"POST",
|
|
data:$("#form1").serialize(),
|
|
dataType:"json",
|
|
async:false,
|
|
success:function(data){
|
|
alert(data.msg);
|
|
if(data.result){
|
|
opener.fn_search();
|
|
self.close(0);
|
|
}else{
|
|
return false;
|
|
}
|
|
},
|
|
error: function(jqxhr, status, error){
|
|
}
|
|
});
|
|
}
|
|
}
|
|
|
|
</script>
|
|
</head>
|
|
<body class="">
|
|
<form name="hiddenForm" id="hiddenForm" method="post">
|
|
<input type="hidden" name="OBJID" id="OBJID">
|
|
<input type="hidden" name="PARENT_OBJID" id="PARENT_OBJID" value="${param.OBJID}">
|
|
</form>
|
|
<form name="form1" id="form1" method="post">
|
|
<input type="hidden" name="OBJID" id="OBJID" value="${resultMap.OBJID}">
|
|
<section>
|
|
<div class="plm_menu_name">
|
|
<h2>
|
|
<span>제품구분_UNIT관리</span>
|
|
</h2>
|
|
</div>
|
|
|
|
<div id="businessPopupFormWrap">
|
|
<table class="pmsPopupForm" style="width:100%;margin: 10px 0 0 0; float:left;">
|
|
<colgroup>
|
|
<col width="10%"/>
|
|
<col width="*"/>
|
|
<col width="10%"/>
|
|
<col width="*"/>
|
|
<col width="12%"/>
|
|
<col width="*"/>
|
|
</colgroup>
|
|
<tr>
|
|
<td class="input_title">
|
|
<label for="" class="">제품구분</label>
|
|
</td>
|
|
<td>
|
|
<input id="product_name" name="product_name" type="text" value="${resultMap.PRODUCT_OBJID_NAME}" disabled>
|
|
</td>
|
|
<td class="input_title">
|
|
<label for="title" class="">기계형식</label>
|
|
</td>
|
|
<td>
|
|
<input id="title" name="title" type="text" value="${resultMap.TITLE}" disabled>
|
|
</td>
|
|
<td class="input_title">
|
|
<label for="customer_product" class="">고객사_장비목적</label>
|
|
</td>
|
|
<td>
|
|
<input id="customer_product" name="customer_product" type="text" value="${resultMap.CUSTOMER_PRODUCT}">
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
<%--
|
|
<div>
|
|
<div class="plm_btn_wrap">
|
|
<input type="button" value="추가" class="plm_btns" id="btnAdd">
|
|
<!-- 230802 삭제 기능 막음(표준 유닛을 사용하는데 있어서 문제 우려로) -->
|
|
<c:if test="${ 'plm_admin' eq connectUserId}">
|
|
<input type="button" value="삭제" class="plm_btns" id="btnDelete">
|
|
</c:if>
|
|
</div>
|
|
</div>
|
|
<div class="in_table_scroll_wrap _table1" style="height:26px;width:98.8%;margin-top:10px;">
|
|
<table class="plm_table">
|
|
<colgroup>
|
|
<col width="5%" />
|
|
<!--
|
|
<col width="5%" /> 순
|
|
-->
|
|
<col width="80%" /> <!-- Task명 -->
|
|
<col width="*" /> <!-- 산출물 이름 -->
|
|
</colgroup>
|
|
<thead>
|
|
<tr class="plm_thead">
|
|
<td><input type="checkbox" name=""></td>
|
|
<!-- <td>순</td> -->
|
|
<td>UNIT Name</td>
|
|
<td>UNIT No</td>
|
|
</tr>
|
|
</thead>
|
|
</table>
|
|
</div>
|
|
<div class="in_table_scroll_wrap _table2" style="height:550px; width:100%;">
|
|
<table class="plm_table">
|
|
<colgroup>
|
|
<col width="5%" />
|
|
<!--
|
|
<col width="5%" /> 순
|
|
-->
|
|
<col width="80%" /> <!-- Task명 -->
|
|
<col width="*" /> <!-- 산출물 이름 -->
|
|
</colgroup>
|
|
<tbody id="wbsTaskListArea"></tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
--%>
|
|
<div class="btn_wrap" style="clear:both; padding-top:10px">
|
|
<div class="plm_btn_wrap_center">
|
|
<input type="button" value="저장" class="plm_btns" onclick="fn_save();">
|
|
<input type="button" value="닫기" id="btnClose" class="plm_btns">
|
|
</div>
|
|
</div>
|
|
</section>
|
|
</form>
|
|
</body>
|
|
</html> |