614 lines
20 KiB
Plaintext
614 lines
20 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>
|
|
<style>
|
|
html, body { height: 100%; margin: 0; overflow: hidden; }
|
|
#wbsTaskList td { text-align: center; padding: 2px 4px; }
|
|
#wbsTaskList input[type="text"] { width: 95%; }
|
|
#wbsTaskList select { width: 80px; }
|
|
</style>
|
|
<script>
|
|
var rowSeq = 0;
|
|
|
|
var isEditMode = ("${templateObjId}" !== "");
|
|
|
|
$(document).ready(function(){
|
|
$("#product1").prop("disabled","disabled");
|
|
|
|
if(isEditMode){
|
|
loadExistingTasks();
|
|
$("#title").val("${masterInfo.TITLE}");
|
|
$("#product").val("${masterInfo.PRODUCT_OBJID}");
|
|
} else {
|
|
addTotalRow();
|
|
}
|
|
|
|
$("#templateDownload").click(function(){
|
|
location.href="/template/WBS_EXCEL_IMPORT_TEMPLATE.xlsx";
|
|
});
|
|
|
|
fnc_setFileDropZone(
|
|
"excelImportDropZone",
|
|
"${OBJID}",
|
|
"WBS_EXCEL_IMPORT",
|
|
"WBS Excel Import Template",
|
|
"setExcelFileArea",
|
|
true,
|
|
"fileUploadPreProc",
|
|
"/project/excelImportFileProc.do",
|
|
null
|
|
);
|
|
|
|
$("#excelImportList").hide();
|
|
});
|
|
|
|
function addTotalRow(){
|
|
var objId = generateObjId();
|
|
var tr = '<tr id="row_total" data-depth="0">';
|
|
tr += '<td></td>';
|
|
tr += '<input type="hidden" name="WBS_TASK_OBJID" value="' + objId + '">';
|
|
tr += '<input type="hidden" name="UNIT_NO_' + objId + '" id="UNIT_NO_' + objId + '" value="0">';
|
|
tr += '<input type="hidden" name="UPPER_TASK_OBJID_' + objId + '" id="UPPER_TASK_OBJID_' + objId + '" value="">';
|
|
tr += '<input type="hidden" name="TASK_LEVEL_' + objId + '" id="TASK_LEVEL_' + objId + '" value="0">';
|
|
tr += '<td></td><td></td><td></td>';
|
|
tr += '<td style="font-weight:bold;">TOTAL';
|
|
tr += '<input type="hidden" name="TASK_NAME_' + objId + '" value="TOTAL">';
|
|
tr += '</td>';
|
|
tr += '</tr>';
|
|
$("#wbsTaskList").append(tr);
|
|
}
|
|
|
|
function loadExistingTasks(){
|
|
$.ajax({
|
|
url:"/project/getWBSTemplateTaskList.do",
|
|
type:"POST",
|
|
data:{"OBJID":"${templateObjId}"},
|
|
dataType:"json",
|
|
async:false,
|
|
success:function(data){
|
|
if(!data || data.length == 0) return;
|
|
for(var i = 0; i < data.length; i++){
|
|
var d = data[i];
|
|
var objId = d.OBJID;
|
|
var taskLevel = fnc_checkNull(d.TASK_LEVEL);
|
|
var depth = parseInt(taskLevel) || 0;
|
|
|
|
if(depth === 0){
|
|
var tr = '<tr id="row_total" data-depth="0">';
|
|
tr += '<td></td>';
|
|
tr += '<input type="hidden" name="WBS_TASK_OBJID" value="' + objId + '">';
|
|
tr += '<input type="hidden" name="UNIT_NO_' + objId + '" id="UNIT_NO_' + objId + '" value="0">';
|
|
tr += '<input type="hidden" name="UPPER_TASK_OBJID_' + objId + '" id="UPPER_TASK_OBJID_' + objId + '" value="">';
|
|
tr += '<input type="hidden" name="TASK_LEVEL_' + objId + '" id="TASK_LEVEL_' + objId + '" value="0">';
|
|
tr += '<td></td><td></td><td></td>';
|
|
tr += '<td style="font-weight:bold;">TOTAL';
|
|
tr += '<input type="hidden" name="TASK_NAME_' + objId + '" value="TOTAL">';
|
|
tr += '</td>';
|
|
tr += '</tr>';
|
|
$("#wbsTaskList").append(tr);
|
|
} else {
|
|
var unitNo = fnc_checkNull(d.UNIT_NO);
|
|
var taskName = fnc_checkNull(d.TASK_NAME);
|
|
var tr = '<tr id="row_' + objId + '">';
|
|
tr += '<td><input type="checkbox" name="rowCheck" value="' + objId + '"></td>';
|
|
tr += '<input type="hidden" name="WBS_TASK_OBJID" value="' + objId + '">';
|
|
tr += '<input type="hidden" name="UNIT_NO_' + objId + '" id="UNIT_NO_' + objId + '" value="' + unitNo + '">';
|
|
tr += '<input type="hidden" name="UPPER_TASK_OBJID_' + objId + '" id="UPPER_TASK_OBJID_' + objId + '" value="">';
|
|
tr += '<input type="hidden" name="TASK_LEVEL_' + objId + '" id="TASK_LEVEL_' + objId + '" value="' + depth + '">';
|
|
tr += '<td><input type="text" class="lvl_input" data-objid="' + objId + '" data-level="1" style="width:80%;text-align:center;"' + (depth==1 ? ' value="'+unitNo+'"' : '') + '></td>';
|
|
tr += '<td><input type="text" class="lvl_input" data-objid="' + objId + '" data-level="2" style="width:80%;text-align:center;"' + (depth==2 ? ' value="'+unitNo+'"' : '') + '></td>';
|
|
tr += '<td><input type="text" class="lvl_input" data-objid="' + objId + '" data-level="3" style="width:80%;text-align:center;"' + (depth==3 ? ' value="'+unitNo+'"' : '') + '></td>';
|
|
tr += '<td><input type="text" name="TASK_NAME_' + objId + '" id="TASK_NAME_' + objId + '" value="' + taskName + '"></td>';
|
|
tr += '</tr>';
|
|
$("#wbsTaskList").append(tr);
|
|
bindLevelInput(objId);
|
|
}
|
|
}
|
|
},
|
|
error: function(jqxhr, status, error){
|
|
Swal.fire(jqxhr.statusText + ", " + status + ", " + error);
|
|
}
|
|
});
|
|
}
|
|
|
|
function setExcelFileArea(){
|
|
setUploadTemplateFile();
|
|
}
|
|
|
|
function setUploadTemplateFile(){
|
|
var docType = "WBS_EXCEL_IMPORT";
|
|
var deleteCallBackFN = "excelFileDelete";
|
|
$.ajax({
|
|
url:"/common/getFileList.do",
|
|
type:"POST",
|
|
data:{"targetObjId":"${OBJID}", "docType":docType},
|
|
dataType:"json",
|
|
async:false,
|
|
success:function(data){
|
|
$.each(data, function(i){
|
|
var s = "<tr>";
|
|
s += "<td><a href='javascript:fnc_downloadFile(\""+data[i].OBJID+"\")'>"+data[i].REAL_FILE_NAME+"</a></td>";
|
|
s += "<td>"+data[i].FILE_SIZE+"</td>";
|
|
s += "<td><div class='delete_btn' onclick='javascript:fnc_deleteFile(\""+data[i].OBJID+"\", \""+deleteCallBackFN+"\")'></div></td>";
|
|
s += "</tr>";
|
|
$("#excelImportArea").append(s);
|
|
});
|
|
parsingExcelFile();
|
|
},
|
|
error: function(jqxhr, status, error){
|
|
Swal.fire(jqxhr.statusText + ", " + status + ", " + error);
|
|
}
|
|
});
|
|
}
|
|
|
|
function excelFileDelete(){
|
|
$("#excelImportArea").empty();
|
|
$("#excelImportList").hide();
|
|
// TOTAL 행만 남기고 나머지 제거
|
|
$("#wbsTaskList tr:not(#row_total)").remove();
|
|
}
|
|
|
|
function parsingExcelFile(){
|
|
// TOTAL 행만 남기고 나머지 제거
|
|
$("#wbsTaskList tr:not(#row_total)").remove();
|
|
|
|
$.ajax({
|
|
url:"/project/parsingExcelFile.do",
|
|
type:"POST",
|
|
data:{"targetObjId":"${OBJID}", "docType":"WBS_EXCEL_IMPORT"},
|
|
dataType:"json",
|
|
async:false,
|
|
success:function(data){
|
|
if(data && 0 < data.length){
|
|
for(var i = 0; i < data.length; i++){
|
|
var WBS_OBJID = data[i].WBS_OBJID;
|
|
var TASK_NAME = data[i].TASK_NAME;
|
|
var UNIT_NO = data[i].UNIT_NO;
|
|
|
|
var lvl = String(UNIT_NO);
|
|
var depth = (lvl.match(/\./g) || []).length + 1;
|
|
|
|
var tr = '<tr id="row_' + WBS_OBJID + '">';
|
|
tr += '<td><input type="checkbox" name="rowCheck" value="' + WBS_OBJID + '"></td>';
|
|
tr += '<input type="hidden" name="WBS_TASK_OBJID" value="' + WBS_OBJID + '">';
|
|
tr += '<input type="hidden" name="UNIT_NO_' + WBS_OBJID + '" id="UNIT_NO_' + WBS_OBJID + '" value="' + UNIT_NO + '">';
|
|
tr += '<input type="hidden" name="UPPER_TASK_OBJID_' + WBS_OBJID + '" id="UPPER_TASK_OBJID_' + WBS_OBJID + '" value="">';
|
|
tr += '<input type="hidden" name="TASK_LEVEL_' + WBS_OBJID + '" id="TASK_LEVEL_' + WBS_OBJID + '" value="' + depth + '">';
|
|
tr += '<td>' + (depth==1 ? '<input type="text" class="lvl_input" data-objid="'+WBS_OBJID+'" data-level="1" style="width:80%;text-align:center;" value="'+UNIT_NO+'">' : '<input type="text" class="lvl_input" data-objid="'+WBS_OBJID+'" data-level="1" style="width:80%;text-align:center;">') + '</td>';
|
|
tr += '<td>' + (depth==2 ? '<input type="text" class="lvl_input" data-objid="'+WBS_OBJID+'" data-level="2" style="width:80%;text-align:center;" value="'+UNIT_NO+'">' : '<input type="text" class="lvl_input" data-objid="'+WBS_OBJID+'" data-level="2" style="width:80%;text-align:center;">') + '</td>';
|
|
tr += '<td>' + (depth==3 ? '<input type="text" class="lvl_input" data-objid="'+WBS_OBJID+'" data-level="3" style="width:80%;text-align:center;" value="'+UNIT_NO+'">' : '<input type="text" class="lvl_input" data-objid="'+WBS_OBJID+'" data-level="3" style="width:80%;text-align:center;">') + '</td>';
|
|
tr += '<td><input type="text" name="TASK_NAME_' + WBS_OBJID + '" id="TASK_NAME_' + WBS_OBJID + '" value="' + TASK_NAME + '"></td>';
|
|
tr += '</tr>';
|
|
$("#wbsTaskList").append(tr);
|
|
|
|
bindLevelInput(WBS_OBJID);
|
|
}
|
|
}
|
|
},
|
|
error: function(jqxhr, status, error){
|
|
Swal.fire(jqxhr.statusText + ", " + status + ", " + error);
|
|
}
|
|
});
|
|
}
|
|
|
|
function fileUploadPreProc(){
|
|
preFileDelete();
|
|
}
|
|
|
|
function preFileDelete(){
|
|
if(confirm("파일을 업로드하시겠습니까?\n기존에 업로드된 파일은 삭제됩니다.")){
|
|
$.ajax({
|
|
url:"/common/deleteFileInfo.do",
|
|
type:"POST",
|
|
data:{"targetObjId":"${OBJID}"},
|
|
dataType:"json",
|
|
async:true,
|
|
success:function(data){
|
|
excelFileDelete();
|
|
},
|
|
error: function(jqxhr, status, error){
|
|
Swal.fire(jqxhr.statusText + ", " + status + ", " + error);
|
|
}
|
|
});
|
|
}
|
|
}
|
|
|
|
function bindLevelInput(objId){
|
|
$("#row_" + objId + " .lvl_input").on("input", function(){
|
|
var curObjId = $(this).data("objid");
|
|
var level = $(this).data("level");
|
|
$("#row_" + curObjId + " .lvl_input").not(this).val("");
|
|
$("#UNIT_NO_" + curObjId).val($(this).val());
|
|
$("#TASK_LEVEL_" + curObjId).val($(this).val() ? level : "");
|
|
});
|
|
}
|
|
|
|
function generateObjId(){
|
|
return String(Math.abs(Math.floor(Math.random() * 2147483647))) + String(++rowSeq);
|
|
}
|
|
|
|
function findLastDescendant(parentTr){
|
|
var parentDepth = getRowDepth(parentTr[0]);
|
|
var lastDescendant = parentTr;
|
|
parentTr.nextAll("tr").each(function(){
|
|
if(getRowDepth(this) > parentDepth){
|
|
lastDescendant = $(this);
|
|
} else {
|
|
return false;
|
|
}
|
|
});
|
|
return lastDescendant;
|
|
}
|
|
|
|
function renumberAllRows(){
|
|
var rows = $("#wbsTaskList tr:not(#row_total)");
|
|
var counters = [0, 0, 0];
|
|
rows.each(function(){
|
|
var objId = $(this).find("input[name='WBS_TASK_OBJID']").val();
|
|
var depth = parseInt($("#TASK_LEVEL_" + objId).val()) || 0;
|
|
if(depth < 1 || depth > 3) return true;
|
|
|
|
if(depth === 1){
|
|
counters[0]++;
|
|
counters[1] = 0;
|
|
counters[2] = 0;
|
|
} else if(depth === 2){
|
|
counters[1]++;
|
|
counters[2] = 0;
|
|
} else {
|
|
counters[2]++;
|
|
}
|
|
|
|
var unitNo;
|
|
if(depth === 1) unitNo = String(counters[0]);
|
|
else if(depth === 2) unitNo = counters[0] + "." + counters[1];
|
|
else unitNo = counters[0] + "." + counters[1] + "." + counters[2];
|
|
|
|
$("#UNIT_NO_" + objId).val(unitNo);
|
|
$(this).find(".lvl_input").val("");
|
|
$(this).find(".lvl_input[data-level='" + depth + "']").val(unitNo);
|
|
});
|
|
}
|
|
|
|
function addRow(){
|
|
var objId = generateObjId();
|
|
var checked = $("input[name='rowCheck']:checked");
|
|
var autoLevel = "";
|
|
var insertAfterTr = null;
|
|
|
|
if(checked.length > 0){
|
|
var selectedTr = checked.last().closest("tr");
|
|
var selectedDepth = getRowDepth(selectedTr[0]);
|
|
autoLevel = selectedDepth;
|
|
insertAfterTr = findLastDescendant(selectedTr);
|
|
checked.prop("checked", false);
|
|
}
|
|
|
|
var tr = '<tr id="row_' + objId + '">';
|
|
tr += '<td><input type="checkbox" name="rowCheck" value="' + objId + '"></td>';
|
|
tr += '<input type="hidden" name="WBS_TASK_OBJID" value="' + objId + '">';
|
|
tr += '<input type="hidden" name="UNIT_NO_' + objId + '" id="UNIT_NO_' + objId + '" value="">';
|
|
tr += '<input type="hidden" name="UPPER_TASK_OBJID_' + objId + '" id="UPPER_TASK_OBJID_' + objId + '" value="">';
|
|
tr += '<input type="hidden" name="TASK_LEVEL_' + objId + '" id="TASK_LEVEL_' + objId + '" value="' + autoLevel + '">';
|
|
tr += '<td><input type="text" class="lvl_input" data-objid="' + objId + '" data-level="1" style="width:80%;text-align:center;"></td>';
|
|
tr += '<td><input type="text" class="lvl_input" data-objid="' + objId + '" data-level="2" style="width:80%;text-align:center;"></td>';
|
|
tr += '<td><input type="text" class="lvl_input" data-objid="' + objId + '" data-level="3" style="width:80%;text-align:center;"></td>';
|
|
tr += '<td><input type="text" name="TASK_NAME_' + objId + '" id="TASK_NAME_' + objId + '"></td>';
|
|
tr += '</tr>';
|
|
|
|
if(insertAfterTr){
|
|
insertAfterTr.after(tr);
|
|
} else {
|
|
$("#wbsTaskList").append(tr);
|
|
}
|
|
|
|
bindLevelInput(objId);
|
|
renumberAllRows();
|
|
}
|
|
|
|
function addChildRow(){
|
|
var checked = $("input[name='rowCheck']:checked");
|
|
if(checked.length == 0){
|
|
Swal.fire('부모 행을 선택해 주세요');
|
|
return;
|
|
}
|
|
var selectedTr = checked.last().closest("tr");
|
|
var selectedDepth = getRowDepth(selectedTr[0]);
|
|
|
|
if(selectedDepth >= 3){
|
|
Swal.fire('수준 3 이하로는 추가할 수 없습니다');
|
|
return;
|
|
}
|
|
|
|
var objId = generateObjId();
|
|
var autoLevel = selectedDepth + 1;
|
|
var insertAfterTr = findLastDescendant(selectedTr);
|
|
|
|
var tr = '<tr id="row_' + objId + '">';
|
|
tr += '<td><input type="checkbox" name="rowCheck" value="' + objId + '"></td>';
|
|
tr += '<input type="hidden" name="WBS_TASK_OBJID" value="' + objId + '">';
|
|
tr += '<input type="hidden" name="UNIT_NO_' + objId + '" id="UNIT_NO_' + objId + '" value="">';
|
|
tr += '<input type="hidden" name="UPPER_TASK_OBJID_' + objId + '" id="UPPER_TASK_OBJID_' + objId + '" value="">';
|
|
tr += '<input type="hidden" name="TASK_LEVEL_' + objId + '" id="TASK_LEVEL_' + objId + '" value="' + autoLevel + '">';
|
|
tr += '<td><input type="text" class="lvl_input" data-objid="' + objId + '" data-level="1" style="width:80%;text-align:center;"></td>';
|
|
tr += '<td><input type="text" class="lvl_input" data-objid="' + objId + '" data-level="2" style="width:80%;text-align:center;"></td>';
|
|
tr += '<td><input type="text" class="lvl_input" data-objid="' + objId + '" data-level="3" style="width:80%;text-align:center;"></td>';
|
|
tr += '<td><input type="text" name="TASK_NAME_' + objId + '" id="TASK_NAME_' + objId + '"></td>';
|
|
tr += '</tr>';
|
|
|
|
insertAfterTr.after(tr);
|
|
checked.prop("checked", false);
|
|
bindLevelInput(objId);
|
|
renumberAllRows();
|
|
}
|
|
|
|
function deleteRow(){
|
|
var checked = $("input[name='rowCheck']:checked");
|
|
if(checked.length == 0){
|
|
Swal.fire('삭제할 행을 선택해 주세요');
|
|
return;
|
|
}
|
|
var removeTargets = [];
|
|
var hasChildren = false;
|
|
checked.each(function(){
|
|
var objId = $(this).val();
|
|
var tr = $("#row_" + objId);
|
|
if(tr.attr("id") === "row_total") return true;
|
|
removeTargets.push(tr);
|
|
var parentDepth = getRowDepth(tr[0]);
|
|
tr.nextAll("tr").each(function(){
|
|
if(getRowDepth(this) > parentDepth){
|
|
removeTargets.push($(this));
|
|
hasChildren = true;
|
|
} else {
|
|
return false;
|
|
}
|
|
});
|
|
});
|
|
|
|
var msg = hasChildren ? '하위 항목도 함께 삭제됩니다. 삭제하시겠습니까?' : '삭제하시겠습니까?';
|
|
Swal.fire({
|
|
title: msg,
|
|
icon: 'warning',
|
|
showCancelButton: true,
|
|
confirmButtonText: '삭제',
|
|
cancelButtonText: '취소'
|
|
}).then(function(result){
|
|
if(result.isConfirmed){
|
|
$.each(removeTargets, function(i, tr){ tr.remove(); });
|
|
renumberAllRows();
|
|
}
|
|
});
|
|
}
|
|
|
|
function fn_checkWBSTemplateRevision(){
|
|
var resultFlag = true;
|
|
$.ajax({
|
|
type:"POST",
|
|
url : "/project/checkWBSTemplateProduct.do",
|
|
data : {"PRODUCT":fnc_checkNull($("#product").val()),"TITLE":fnc_checkNull($("#title").val())},
|
|
dataType:"json",
|
|
async:false,
|
|
error: function(jqxhr, status, error){
|
|
Swal.fire(jqxhr.statusText + ", " + status + ", " + error);
|
|
},
|
|
success:function(data){
|
|
if(0 < data.length){
|
|
resultFlag = false;
|
|
}
|
|
}
|
|
});
|
|
return resultFlag;
|
|
}
|
|
|
|
function getRowDepth(tr){
|
|
var objId = $(tr).find("input[name='WBS_TASK_OBJID']").val();
|
|
var taskLevel = $.trim($("#TASK_LEVEL_" + objId).val());
|
|
if(taskLevel !== "") return parseInt(taskLevel);
|
|
var unitNo = $.trim($("#UNIT_NO_" + objId).val());
|
|
if(unitNo === "0") return 0;
|
|
if(unitNo === "") return -1;
|
|
return (unitNo.match(/\./g) || []).length + 1;
|
|
}
|
|
|
|
function calculateParentRelations(){
|
|
var rows = $("#wbsTaskList tr");
|
|
var totalObjId = $("#row_total").find("input[name='WBS_TASK_OBJID']").val();
|
|
|
|
rows.each(function(idx){
|
|
var trId = $(this).attr("id");
|
|
if(trId === "row_total") return true;
|
|
|
|
var objId = $(this).find("input[name='WBS_TASK_OBJID']").val();
|
|
var depth = getRowDepth(this);
|
|
var parentObjId = "";
|
|
|
|
if(depth === 1){
|
|
parentObjId = totalObjId;
|
|
} else if(depth > 1){
|
|
var prevRows = $(this).prevAll("tr");
|
|
prevRows.each(function(){
|
|
var prevDepth = getRowDepth(this);
|
|
if(prevDepth === depth - 1){
|
|
parentObjId = $(this).find("input[name='WBS_TASK_OBJID']").val();
|
|
return false;
|
|
}
|
|
});
|
|
}
|
|
|
|
$("#UPPER_TASK_OBJID_" + objId).val(parentObjId);
|
|
});
|
|
}
|
|
|
|
function saveWBS(){
|
|
if($("#title").val() == ""){
|
|
Swal.fire('제목을 입력해 주세요');
|
|
return;
|
|
}
|
|
|
|
if($("input[name='WBS_TASK_OBJID']").length == 0){
|
|
Swal.fire('등록할 항목을 추가해 주세요');
|
|
return;
|
|
}
|
|
|
|
var isValid = true;
|
|
$("input[name='WBS_TASK_OBJID']").each(function(){
|
|
var objId = $(this).val();
|
|
if($(this).closest("tr").attr("id") === "row_total") return true;
|
|
var level = $.trim($("#UNIT_NO_" + objId).val());
|
|
var taskName = $.trim($("#TASK_NAME_" + objId).val());
|
|
if(level == "" || taskName == ""){
|
|
isValid = false;
|
|
return false;
|
|
}
|
|
});
|
|
|
|
if(!isValid){
|
|
Swal.fire('수준과 Unit Name / 공정을 모두 입력해 주세요');
|
|
return;
|
|
}
|
|
|
|
if(!isEditMode){
|
|
if(!fn_checkWBSTemplateRevision()){
|
|
Swal.fire("이미 해당 제목으로 등록된 정보가 존재합니다.");
|
|
return;
|
|
}
|
|
}
|
|
|
|
calculateParentRelations();
|
|
|
|
Swal.fire({
|
|
title: '저장하시겠습니까?',
|
|
icon: 'question',
|
|
showCancelButton: true,
|
|
confirmButtonText: '확인',
|
|
cancelButtonText: '취소'
|
|
}).then(function(result){
|
|
if(result.isConfirmed){
|
|
$.ajax({
|
|
type:"POST",
|
|
url : "/project/saveExcelUploadWBS.do",
|
|
data : $("#form1").serialize(),
|
|
dataType:"json",
|
|
async:false,
|
|
error: function(jqxhr, status, error){
|
|
Swal.fire(jqxhr.statusText + ", " + status + ", " + error);
|
|
},
|
|
success: function(result){
|
|
if(null != result){
|
|
Swal.fire(result.message);
|
|
opener.fn_search();
|
|
self.close();
|
|
}
|
|
}
|
|
});
|
|
}
|
|
});
|
|
}
|
|
</script>
|
|
</head>
|
|
<body>
|
|
<form name="form1" id="form1" action="" method="post">
|
|
<input type="hidden" name="importPopObjid" id="importPopObjid" value="${OBJID}">
|
|
<input type="hidden" name="product" id="product" value="${param.product}">
|
|
<input type="hidden" name="templateObjId" id="templateObjId" value="${templateObjId}">
|
|
|
|
<div class="content-box">
|
|
<div class="content-box-s">
|
|
<div class="plm_menu_name">
|
|
<h2>
|
|
<span>${empty templateObjId ? 'WBS 템플릿 등록' : 'WBS 템플릿 수정'}</span>
|
|
</h2>
|
|
</div>
|
|
<div id="plmSearchZon" style="width:auto;">
|
|
<table>
|
|
<tbody>
|
|
<tr>
|
|
<td class="align_r">
|
|
<label for="">제품구분</label>
|
|
</td>
|
|
<td>
|
|
<select name="product1" id="product1" style="" class="select2" autocomplete="off">
|
|
<option value="">선택</option>
|
|
${code_map.product_cd}
|
|
</select>
|
|
</td>
|
|
<td class="align_r">
|
|
<label for="title">제목</label>
|
|
</td>
|
|
<td>
|
|
<input id="title" name="title" type="text" value="">
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
<section class="contents_page_basic_margin">
|
|
<div class="btn_wrap">
|
|
<div class="plm_btn_wrap">
|
|
<input type="button" value="Template Download" id="templateDownload" class="plm_btns">
|
|
<input type="button" value="추가" class="plm_btns" onclick="addRow();">
|
|
<input type="button" value="하위추가" class="plm_btns" onclick="addChildRow();">
|
|
<input type="button" value="삭제" class="plm_btns" onclick="deleteRow();">
|
|
<input type="button" value="저장" class="plm_btns" onclick="saveWBS();">
|
|
<input type="button" value="닫기" id="btn_close" class="plm_btns" onclick="javascript:self.close();">
|
|
</div>
|
|
</div>
|
|
<div id="excelImportDropZone" class="dropzone" style="height:50px;">Drag & Drop 엑셀 템플릿</div>
|
|
<div id="excelImportList">
|
|
<table id="excelImportTable" class="excelUploadPopupForm">
|
|
<thead>
|
|
<tr><td colspan="3">Excel 첨부파일</td></tr>
|
|
</thead>
|
|
<tbody id="excelImportArea">
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
|
|
<div style="width:100%;">
|
|
<table class="plm_table" style="width:100%;border-collapse:collapse;">
|
|
<colgroup>
|
|
<col width="5%" />
|
|
<col width="8%" />
|
|
<col width="8%" />
|
|
<col width="8%" />
|
|
<col width="71%" />
|
|
</colgroup>
|
|
<thead>
|
|
<tr class="plm_thead">
|
|
<td rowspan="2">선택</td>
|
|
<td colspan="3">수준</td>
|
|
<td rowspan="2">Unit Name / 공정</td>
|
|
</tr>
|
|
<tr class="plm_thead">
|
|
<td>1</td>
|
|
<td>2</td>
|
|
<td>3</td>
|
|
</tr>
|
|
</thead>
|
|
</table>
|
|
</div>
|
|
<div style="width:100%;height:calc(100vh - 280px);overflow-y:auto;">
|
|
<table class="plm_table" style="width:100%;border-collapse:collapse;">
|
|
<colgroup>
|
|
<col width="5%" />
|
|
<col width="8%" />
|
|
<col width="8%" />
|
|
<col width="8%" />
|
|
<col width="71%" />
|
|
</colgroup>
|
|
<tbody id="wbsTaskList"></tbody>
|
|
</table>
|
|
</div>
|
|
</section>
|
|
</div>
|
|
</div>
|
|
</form>
|
|
</body>
|
|
</html> |