- 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
334 lines
14 KiB
Plaintext
334 lines
14 KiB
Plaintext
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
|
|
<%@ page import="com.pms.common.utils.*"%>
|
|
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
|
|
<%@ page import="java.util.*" %>
|
|
<%@include file="/init.jsp"%>
|
|
<c:set var="now" value="<%=new java.util.Date() %>"/>
|
|
<c:set var="sysYear"><fmt:formatDate value="${now}" pattern="yyyy" /></c:set>
|
|
<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
|
<title><%=Constants.SYSTEM_NAME%></title>
|
|
</head>
|
|
|
|
<style>
|
|
.select2-selection__choice {
|
|
font-size: 11px;
|
|
background-color: #fff !important;
|
|
border: none !important;
|
|
margin-right: 0px !important;
|
|
}
|
|
.select2-selection__choice__remove {
|
|
display: contents !important;
|
|
}
|
|
.select2-container .select2-selection--multiple {
|
|
min-height: 20px !important;
|
|
}
|
|
.select2-container--default .select2-selection--multiple .select2-selection__choice {
|
|
margin-top: 3.5px !important;
|
|
}
|
|
.select2-selection__rendered {
|
|
height: 18px !important;
|
|
}
|
|
.select2-container .select2-selection--multiple .select2-selection__rendered {
|
|
overflow: auto !important;
|
|
}
|
|
</style>
|
|
|
|
<script type="text/javascript">
|
|
$(document).ready(function(){
|
|
$('.select2').select2();
|
|
fnc_datepick();
|
|
|
|
$("#appr_status").val("${param.appr_status}").trigger("change");
|
|
//조회
|
|
$("#btnSearch").click(function(){
|
|
fn_search();
|
|
});
|
|
//등록
|
|
$("#btnReg").click(function(){
|
|
fn_formPopUp("","");
|
|
});
|
|
//삭제
|
|
$("#btnDelete").click(function(){
|
|
fn_delete();
|
|
});
|
|
//결재상신
|
|
$("#btnApproval").click(function(){
|
|
var selectedRowIds = fn_jqGrid_selarrrow(grid1);
|
|
if(selectedRowIds.length==0){
|
|
Swal.fire("결재상신할 행을 선택해주십시오.");
|
|
return false;
|
|
}else if(selectedRowIds.length>1){
|
|
Swal.fire("한번에 한개의 결재만 가능합니다.");
|
|
return false;
|
|
}else{
|
|
var targetStatus = grid1.getCell(selectedRowIds, "APPR_STATUS_NAME");
|
|
var title = encodeURIComponent("CS조치내역서 상신 - " + grid1.getCell(selectedRowIds, "TITLE"));
|
|
var objId = grid1.getCell(selectedRowIds, "OBJID");
|
|
|
|
if(targetStatus == "결재완료" || targetStatus == "결재중"){
|
|
Swal.fire("이미 결재완료 또는 결재중 상태입니다.");
|
|
return false;
|
|
}else{
|
|
if(confirm("결재상신 하시겠습니까?")){
|
|
window.open("/approval/registApproval.do?targetType=CSM&targetObjId="+objId+"&approvalTitle="+title+"&callbackFnc=fn_search","registApproval","width=700,height=700");
|
|
}
|
|
}
|
|
}
|
|
});
|
|
fn_search();
|
|
});
|
|
|
|
|
|
var columns = [
|
|
{headerHozAlign : 'center', hozAlign : 'left', width : '100', title : '접수 No.', field : 'SERVICE_NO',
|
|
formatter:fnc_createGridAnchorTag,
|
|
cellClick:function(e, cell){
|
|
var objid = fnc_checkNull(cell.getData().OBJID);
|
|
fn_formPopUp(objid);
|
|
}
|
|
},
|
|
{headerHozAlign : 'center', hozAlign : 'left', width : '120', title : '제품구분(기계형식)', field : 'PRODUCT_NAME' },
|
|
{headerHozAlign : 'center', hozAlign : 'center', width : '120', title : '프로젝트번호', field : 'PROJECT_NO' },
|
|
{headerHozAlign : 'center', hozAlign : 'left', width : '100', title : '고객사', field : 'CUSTOMER_NAME' },
|
|
{headerHozAlign : 'center', hozAlign : 'left', width : '120', title : '출고일자', field : 'RELEASE_DATE' },
|
|
{headerHozAlign : 'center', hozAlign : 'left', width : '120', title : '셋업지', field : 'SETUP'},
|
|
{headerHozAlign : 'center', hozAlign : 'left', width : '120', title : '유무상', field : 'WARRANTY_NAME' },
|
|
{headerHozAlign : 'center', hozAlign : 'left', width : '120', title : 'CS구분', field : 'CATEGORY_NAME' },
|
|
{headerHozAlign : 'center', hozAlign : 'center', width : '100', title : '유형', field : 'CATEGORY_H_NAME' },
|
|
{headerHozAlign : 'center', hozAlign : 'left', width : '150', title : '제목', field : 'TITLE' },
|
|
{headerHozAlign : 'center', hozAlign : 'center', width : '80', title : '접수일', field : 'REC_DT' },
|
|
{headerHozAlign : 'center', hozAlign : 'right', width : '100', title : '예상발생비용', field : 'PLAN_COST' },
|
|
{headerHozAlign : 'center', hozAlign : 'left', width : '80', title : '등록자', field : 'MANAGER_NAME' },
|
|
{headerHozAlign : 'center', hozAlign : 'left', width : '100', title : '조치완료일', field : 'ACT_DATE' },
|
|
{headerHozAlign : 'center', hozAlign : 'center', width : '80', title : '첨부파일', field : 'CU03_CNT' ,
|
|
formatter:fnc_subInfoValueFormatter,
|
|
cellClick:function(e, cell){
|
|
var objid = fnc_checkNull(cell.getData().OBJID);
|
|
fn_FileRegist(objid,"AS_DOC_01","AS_DOC_01");
|
|
}
|
|
},
|
|
{headerHozAlign : 'center', hozAlign : 'center', width : '100', title : '상태', field : 'APPR_STATUS_NAME' ,
|
|
formatter:fnc_createGridAnchorTag,
|
|
cellClick:function(e, cell){
|
|
var APPROVAL_OBJID = fnc_checkNull(cell.getData().APPROVAL_OBJID);
|
|
var ROUTE_OBJID = fnc_checkNull(cell.getData().ROUTE_OBJID);
|
|
approval_form(APPROVAL_OBJID,ROUTE_OBJID);
|
|
}
|
|
},
|
|
|
|
];
|
|
|
|
|
|
function fn_FileRegist(objId, docType, docTypeName){
|
|
var popup_width = 800;
|
|
var popup_height = 300;
|
|
|
|
var objId = objId;
|
|
var docType = docType;
|
|
var docTypeName = docTypeName;
|
|
var params = "?targetObjId="+objId+"&docType="+docType+"&docTypeName="+docTypeName;
|
|
var url = "/projectConcept/FileRegistPopup.do"+params;
|
|
|
|
fn_centerPopup(popup_width, popup_height, url);
|
|
}
|
|
|
|
|
|
function fn_search(){
|
|
var selectedValues = $("#project_no").val();
|
|
|
|
$('<input>').attr({
|
|
type: 'hidden',
|
|
name: 'project_nos',
|
|
value: selectedValues
|
|
}).appendTo('#form1');
|
|
|
|
_tabulGrid = fnc_tabul_search(_tabul_layout_fitDataTable, _tabulGrid, "/as/asMngGridList.do", columns, false);
|
|
}
|
|
//등록,수정,뷰
|
|
function fn_formPopUp(objId,status){
|
|
var popup_width = 1400;
|
|
var popup_height = 930;
|
|
|
|
var hiddenForm = document.hiddenForm;
|
|
var target = "asMngFormPopUp";
|
|
var url = "/as/asMngFormPopUp.do";
|
|
fn_centerPopup(popup_width, popup_height, "", target);
|
|
|
|
hiddenForm.objId.value = objId;
|
|
hiddenForm.action = url;
|
|
hiddenForm.target = target;
|
|
hiddenForm.submit();
|
|
}
|
|
|
|
function fn_delete(){
|
|
var selectedRowIds = fn_jqGrid_selarrrow(grid1);
|
|
if(selectedRowIds.length==0){
|
|
Swal.fire("삭제할 행을 선택해주십시오.");
|
|
return false;
|
|
}else{
|
|
if(confirm("삭제 하시겠습니까?")){
|
|
var checkObjs = new Array();
|
|
for(var i=0; i<selectedRowIds.length; i++){
|
|
checkObjs.push( grid1.getCell(selectedRowIds[i], "OBJID") );
|
|
}
|
|
$("#objIds").val(checkObjs);
|
|
|
|
$.ajax({
|
|
type : "POST",
|
|
url : "/as/asDelete.do",
|
|
data: $("#hiddenForm").serialize(),
|
|
dataType:"json",
|
|
success:function(data){
|
|
if(data =="SUCCESS"){
|
|
Swal.fire("삭제되었습니다.");
|
|
fn_search();
|
|
};
|
|
}
|
|
,error: function(jqxhr, status, error){
|
|
}
|
|
});
|
|
}
|
|
}
|
|
}
|
|
|
|
function approval_form(APPROVAL_OBJID,ROUTE_OBJID){
|
|
|
|
url = "/approval/approvalDetail.do?approvalObjId="+APPROVAL_OBJID+"&routeObjId="+ROUTE_OBJID;
|
|
|
|
fn_centerPopup(650,400,url,'approvalDetailPopup')
|
|
}
|
|
|
|
/*
|
|
Custom Formatter Parameters Description
|
|
◆ cellvalue: value to be formatted
|
|
◆ options : { rowId: rid, colModel: {name: , index, width, align, ...}}
|
|
◆ rowObject : row data
|
|
*/
|
|
function col_custom_fmt(cellvalue, options, rowObject) {
|
|
//console.log("rid : "+ options.rowId + " colModel["+JSON.stringify(options.colModel)+"]");
|
|
var return_fmt = "";
|
|
cellvalue = fnc_checkNull(cellvalue);
|
|
|
|
|
|
|
|
if(options.colModel.name == "SERVICE_NO" ){ //접수 NO
|
|
var url = "/as/asMngFormPopUp.do?objId="+rowObject.OBJID;
|
|
return_fmt = '<a href="#" onclick="javascript:fn_centerPopup(1200, 930, \''+url+'\', \'asMngFormPopUp\');">'+cellvalue+'</a>';
|
|
|
|
}else if(options.colModel.name == "CU03_CNT" ){ //첨부파일
|
|
var url = "/projectConcept/FileRegistPopup.do?docType=AS_DOC_01&docTypeName=AS_DOC_01&targetObjId="+rowObject.OBJID;
|
|
var empty = ($.isNumeric(cellvalue) && Number(cellvalue) > 0) ? "" : "empty_";
|
|
return_fmt = '<a href="#" class="File file_'+empty+'icon" onclick="javascript:fn_centerPopup(550, 250, \''+url+'\', \'fileAS_DOC_01\');"></a>';
|
|
|
|
}else if(options.colModel.name == "APPR_STATUS_NAME" ){ //상태
|
|
var url = "/approval/approvalDetail.do?approvalObjId="+rowObject.APPROVAL_OBJID+"&routeObjId="+rowObject.ROUTE_OBJID;
|
|
var empty = ($.isNumeric(cellvalue) && Number(cellvalue) > 0) ? "" : "empty_";
|
|
return_fmt = '<a href="#" onclick="javascript:fn_centerPopup(650, 400, \''+url+'\', \'approvalDetailPopup\');">'+cellvalue+'</a>';
|
|
}
|
|
return return_fmt;
|
|
}
|
|
/**
|
|
unFormatter : grid1.getRowData(), getCell(n,colname) 에서 값만 나오게하는 함수
|
|
*/
|
|
function col_custom_fmt_un(cellvalue, options, cell) {
|
|
return cellvalue;
|
|
}
|
|
</script>
|
|
<body>
|
|
<form name="hiddenForm" id="hiddenForm" method="post">
|
|
<input type="hidden" name="objId" id="objId">
|
|
<input type="hidden" name="actionType" id="actionType">
|
|
<input type="hidden" name="objIds" id="objIds">
|
|
</form>
|
|
<form name="form1" id="form1" action="" method="post">
|
|
<div class="content-box">
|
|
<div class="content-box-s">
|
|
<div class="plm_menu_name_gdnsi" style="position:;">
|
|
<h2 style="">
|
|
<span>CS관리_CS등록 및 조회</span>
|
|
</h2>
|
|
<div class="btnArea">
|
|
<input type="button" class="plm_btns" value="결재상신" id="btnApproval">
|
|
<input type="button" class="plm_btns" value="등록" id="btnReg">
|
|
<input type="button" class="plm_btns" value="삭제" id="btnDelete">
|
|
<input type="button" class="plm_btns" value="조회" id="btnSearch">
|
|
</div>
|
|
</div>
|
|
<div id="plmSearchZon">
|
|
<table>
|
|
<tr>
|
|
<td><label for="Year">년도</label></td>
|
|
<td>
|
|
<select name="Year" id="Year" class="select2" autocomplete="off" style="width:190px">
|
|
<option value="">선택</option>
|
|
<c:forEach begin="${sysYear-4}" end="${sysYear}" var="req_year">
|
|
<option value="${req_year}"${param.Year eq req_year ? 'selected':'' }>${req_year}</option>
|
|
</c:forEach>
|
|
</select>
|
|
</td>
|
|
|
|
<td><label for="">제품구분</label></td>
|
|
<td><select name="product_cd" id="product_cd" class="select2" autocomplete="off"><option value="">선택</option>${code_map.product_cd}</select></td>
|
|
|
|
<td><label for="project_no">프로젝트번호</label></td>
|
|
<td>
|
|
<select name="project_no" id="project_no" style="width:300px;" class="select2" autocomplete="off" multiple="multiple">
|
|
<option value="">선택</option>
|
|
${code_map.project_no}
|
|
</select>
|
|
</td>
|
|
|
|
<td><label for="">유/무상</label></td>
|
|
<td><select name="warranty" id="warranty" class="select2" autocomplete="off"><option value="">선택</option>${code_map.warranty}</select></td>
|
|
|
|
<td class="align_r"><label>접수일</label></td>
|
|
<td>
|
|
<input type="text" name="rec_start_date" id="rec_start_date" style="width:90px;" autocomplete="off" value="${param.rec_start_date}" class="date_icon">~
|
|
<input type="text" name="rec_end_date" id="rec_end_date" style="width:90px;" autocomplete="off" value="${param.rec_end_date }" class="date_icon">
|
|
</td>
|
|
|
|
<td><label for="">조치담당자</label></td>
|
|
<td><select name="manager_id" id="manager_id" class="select2" autocomplete="off"><option value="">선택</option>${code_map.manager_id}</select></td>
|
|
|
|
</tr>
|
|
<tr>
|
|
<%-- <td><label for="">유형(대)</label></td>
|
|
<td><select name="category_h" id="category_h" class="select2" autocomplete="off" def-value="${param.category_h }"><option value="">선택</option></select></td>
|
|
|
|
<td><label for="">유형(중)</label></td>
|
|
<td><select name="category_m" id="category_m" class="select2" autocomplete="off" def-value="${param.category_m }"><option value="">선택</option></select></td>
|
|
|
|
<td><label for="">유형(소)</label></td>
|
|
<td><select name="category_l" id="category_l" class="select2" autocomplete="off" def-value="${param.category_l }"><option value="">선택</option></select></td> --%>
|
|
|
|
|
|
|
|
|
|
<td class="align_r"><label>조치완료일</label></td>
|
|
<td>
|
|
<input type="text" name="act_start_date" id="act_start_date" style="width:90px;" autocomplete="off" value="${param.act_start_date}" class="date_icon">~
|
|
<input type="text" name="act_end_date" id="act_end_date" style="width:90px;" autocomplete="off" value="${param.act_end_date }" class="date_icon">
|
|
</td>
|
|
|
|
<td><label for="">상태</label></td>
|
|
<td>
|
|
<select name="appr_status" id="appr_status" class="select2" autocomplete="off">
|
|
<option value="">선택</option>
|
|
<%-- ${code_map.appr_status} --%>
|
|
<option value="inProcess">결재중</option>
|
|
<option value="reject">반려</option>
|
|
<option value="complete">결재완료</option>
|
|
</select>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
<%@include file= "/WEB-INF/view/common/common_gridArea.jsp" %>
|
|
</div>
|
|
</div>
|
|
</form>
|
|
</body>
|
|
</html> |