- 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
262 lines
10 KiB
Plaintext
262 lines
10 KiB
Plaintext
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
|
|
<%@page import="com.pms.common.utils.*"%>
|
|
<%@page import="com.pms.common.bean.PersonBean" %>
|
|
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
|
|
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
|
|
<%
|
|
boolean isLoggedIn = SessionManager.hasSession(session);
|
|
boolean isAdmin = false;
|
|
|
|
String connectUserId = "";
|
|
String connectUserDeptCode = "";
|
|
String connectUserName = "";
|
|
String connectUserDeptName = "";
|
|
if(!isLoggedIn){
|
|
out.write("<script>Swal.fire('session was destroyed.');</script>");
|
|
out.write("<script>top.location.href='/index.do';</script>");
|
|
}else{
|
|
PersonBean initPerson = null;
|
|
initPerson = (PersonBean)session.getAttribute(Constants.PERSON_BEAN);
|
|
connectUserId = CommonUtils.checkNull(initPerson.getUserId());
|
|
connectUserDeptCode = CommonUtils.checkNull(initPerson.getDeptCode());
|
|
connectUserName = CommonUtils.checkNull(initPerson.getUserName());
|
|
connectUserDeptName = CommonUtils.checkNull(initPerson.getDeptName());
|
|
|
|
if("plm_admin".equals(connectUserId)){
|
|
isAdmin = true;
|
|
}
|
|
|
|
}
|
|
pageContext.setAttribute("newLineChar", "\n");
|
|
%>
|
|
<c:set var="countPerPage" value="<%=Constants.COUNT_PER_PAGE%>" />
|
|
<c:set var="connectUserId" value="<%=connectUserId %>" />
|
|
<c:set var="connectUserDeptCode" value="<%=connectUserDeptCode %>" />
|
|
<c:set var="connectUserName" value="<%=connectUserName %>" />
|
|
<c:set var="connectUserDeptName" value="<%=connectUserDeptName %>" />
|
|
<c:set var="isAdmin" value="<%=isAdmin%>" />
|
|
<c:set var="menuObjId" value="${empty param.menuObjId?'':param.menuObjId}" />
|
|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
|
<meta http-equiv="X-UA-Compatible" content="IE=11">
|
|
<title><%=Constants.SYSTEM_NAME%></title>
|
|
|
|
<!-- //basic -->
|
|
<link rel="stylesheet" href="/css/basic.css">
|
|
<link rel="stylesheet" href="/css/select2.css">
|
|
<script src="/js/jquery-1.11.3.min.js"></script>
|
|
<!-- <script src="/js/jquery-2.1.4.min.js"></script> -->
|
|
<script src="/js/html5shiv.js"></script>
|
|
|
|
<!-- //Gantt Chart -->
|
|
<link rel="stylesheet" href="/js/gantt/jsgantt.css" type="text/css">
|
|
<!-- <script type="text/javascript" src="/js/gantt/jsgantt.js"></script> -->
|
|
|
|
<!-- //highchart -->
|
|
<!-- <script type="text/javascript" src="/js/highcharts-custom.js" ></script> -->
|
|
<script type="text/javascript" src="/js/highcharts.js" ></script>
|
|
<script type="text/javascript" src="/js/data.js" ></script>
|
|
<script type="text/javascript" src="/js/drilldown.js" ></script>
|
|
<script type="text/javascript" src="/js/bullet.js" ></script>
|
|
|
|
<!-- //datepicker -->
|
|
<link rel="stylesheet" href="/css/jquery-ui-1.10.2.custom.css" type="text/css">
|
|
<link rel="stylesheet" href="/css/jquery-ui.css" type="text/css">
|
|
<link rel="stylesheet" href="/css/jquery-ui.min.css" type="text/css">
|
|
<link rel="stylesheet" href="/css/jquery-ui.structure.css" type="text/css">
|
|
<link rel="stylesheet" href="/css/jquery-ui.structure.min.css" type="text/css">
|
|
<link rel="stylesheet" href="/css/jquery-ui.theme.css" type="text/css">
|
|
<link rel="stylesheet" href="/css/jquery-ui.theme.min.css" type="text/css">
|
|
|
|
<script type="text/javascript" src="/js/ui/jquery-ui.js" ></script>
|
|
<script type="text/javascript" src="/js/ui/jquery.ui.core.js" ></script>
|
|
<script type="text/javascript" src="/js/ui/jquery.ui.datepicker.js" ></script>
|
|
<script type="text/javascript" src="/js/ui/jquery.ui.datepicker-ko.js" ></script>
|
|
<script type="text/javascript" src="/js/ui/jquery.ui.widget.js" ></script>
|
|
<script type="text/javascript" src="/js/ui/jquery.ui.button.js" ></script>
|
|
<script type="text/javascript" src="/js/common.js" ></script>
|
|
|
|
<!-- //month picker -->
|
|
<script type="text/javascript" src="/js/jquery.mtz.monthpicker.js" ></script>
|
|
|
|
<!-- //ppt viewer -->
|
|
<script type="text/javascript" src="/js/jquery.gdocsviewer.js" ></script>
|
|
<script type="text/javascript" src="/js/select2.js" ></script>
|
|
<script type="text/javascript" src="/js/sweetalert2.js" ></script>
|
|
|
|
<!-- jqGrind -->
|
|
<link rel="stylesheet" type="text/css" href="/js/jqGrid-4.7.1/css/jquery-ui-custom.css" />
|
|
<link rel="stylesheet" type="text/css" href="/js/jqGrid-4.7.1/css/ui.jqgrid.css" />
|
|
<link rel="stylesheet" type="text/css" href="/js/jqGrid-4.7.1/css/ui.multiselect.css" />
|
|
<!-- <link rel="stylesheet" type="text/css" href="/js/jqGrid-4.7.1/css/jqGrid.overrides.css" /> -->
|
|
|
|
<!-- <script type="text/javascript" src="/js/jquery-1.11.3.min.js"></script> -->
|
|
<script type="text/javascript" src="/js/jqGrid-4.7.1/i18n/grid.locale-kr.js"></script>
|
|
<script type="text/javascript" src="/js/jqGrid-4.7.1/jquery.jqGrid.min.js"></script>
|
|
|
|
<!-- //excel Export -->
|
|
<script type="text/javascript" src="/js/jquery.table2excel.js" ></script>
|
|
|
|
<style type="text/css"><%-- jqGrid css조정 --%>
|
|
.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default{
|
|
font-weight: bold;
|
|
color: #2b2b2b;
|
|
|
|
text-align: right;
|
|
font-weight: 400;
|
|
/* height: 25px; */
|
|
font-size: 13px;
|
|
}
|
|
.ui-jqgrid tr.jqgrow td{
|
|
font-size: 13px;
|
|
font-weight: 400;
|
|
}
|
|
</style>
|
|
|
|
<script type="text/javascript">
|
|
$(function(){
|
|
var menuObjId = "${param.menuObjId}";
|
|
/* if(fnc_checkNull(menuObjId) != ""){
|
|
$.ajax({
|
|
url:"/common/getMenuPath.do",
|
|
type:"POST",
|
|
data:{"menuObjId":menuObjId},
|
|
dataType:"json",
|
|
async:true,
|
|
success:function(data){
|
|
var path = data.path;
|
|
$(".pdm_menu_name").children().children("span").text(path);
|
|
|
|
},
|
|
error: function(jqxhr, status, error){
|
|
Swal.fire(jqxhr.statusText + ", " + status + ", " + error);
|
|
Swal.fire(jqxhr.status);
|
|
Swal.fire(jqxhr.responseText);
|
|
}
|
|
});
|
|
}
|
|
*/
|
|
$(".plm_menu_name").attr("class", "plm_menu_name_ieg");
|
|
$(".plmMainImg").attr("class", "plmMainImg_ieg");
|
|
|
|
fnc_pageAuthController(menuObjId);
|
|
|
|
});
|
|
|
|
/**
|
|
* jqgrid기본기능이 동작안해서 함수 새로 만듬 (적용시 Grid 다른 옵션 동작안되는것 있음 ex:sortable)
|
|
* 옵션사용은 아래를 참고할것
|
|
* http://www.trirand.com/jqgridwiki/doku.php?id=wiki:groupingheadar
|
|
*/
|
|
function fn_jqGrid_setGroupHeaders(grid, optJson){
|
|
var gid = grid.attr("id");
|
|
var thr = $("#"+gid+"_"+optJson.groupHeaders[0].startColumnName).parents("tr:first");
|
|
var thrC= thr.clone();
|
|
var grid_wrap_div = $("#gbox_"+gid);
|
|
$(thrC).attr("id", "thr_clone");
|
|
$(thr).parents("thead:first").append(thrC);
|
|
|
|
$.each(optJson.groupHeaders, function(j,h){
|
|
$('th', thr).each(function(i, o){
|
|
if($(o).attr("id") == gid+"_"+h.startColumnName){
|
|
h.startColumnNum = i;
|
|
$(o).attr("colspan", h.numberOfColumns);
|
|
$(o).addClass("newHeader");
|
|
var _totalWidth = 0;
|
|
$.each(grid.getGridParam("colModel"), function(k,c){
|
|
if(k >= h.startColumnNum && k < (h.startColumnNum+h.numberOfColumns)){
|
|
_totalWidth += c.width +4 ; //2:border좌우값
|
|
}
|
|
});
|
|
$(o).css("width", _totalWidth);
|
|
$(o).removeAttr("id");
|
|
$(o).html(h.titleText);
|
|
}else{
|
|
if(h.startColumnNum > -1){
|
|
if(i < (h.startColumnNum + h.numberOfColumns)){
|
|
$(o).remove();
|
|
}
|
|
}
|
|
}
|
|
});
|
|
});
|
|
|
|
//useColSpanStyle 옵션(그룹헤더제외 컬럼 rowspan처리여부) 관련 처리
|
|
$("#thr_clone>th",grid_wrap_div).each(function(i,o){
|
|
var dualTh = $("th[id="+$(o).attr("id")+"]");
|
|
if(dualTh.length > 1){
|
|
if(optJson.useColSpanStyle || $(o).attr("id") == gid+"_rn" || $(o).attr("id") == gid+"_cb"){
|
|
dualTh.eq(0).attr("rowspan", 2);
|
|
dualTh.eq(dualTh.length-1).remove();
|
|
}else{
|
|
console.log(dualTh.attr("id"));
|
|
dualTh.eq(0).html("");
|
|
}
|
|
}
|
|
});
|
|
|
|
//style 수정
|
|
$(thr).parents("div.ui-jqgrid-hdiv").css("height",50);
|
|
$("th.newHeader", grid_wrap_div).css("border-bottom","1px solid #c5dbec");
|
|
|
|
//$(".ui-jqgrid-hdiv", grid_wrap_div).width( $(".ui-jqgrid-hdiv", grid_wrap_div).width() ); //우측 스크롤관련 여백 제거
|
|
$(".ui-jqgrid-sortable, .ui-jqgrid-resize", grid_wrap_div).css({cursor: "auto"}); //이벤트커서 제거
|
|
$("th:visible",$('#thr_clone', grid_wrap_div))
|
|
.attr("style", "background: #f0f3f4; border-left: 1px solid #ccc; font-size: 12px; ") //색상수정
|
|
.removeClass('ui-state-default').off("mouseover"); //기본색상클래스 제거, 이벤트 제거
|
|
}
|
|
|
|
function fn_jqGrid_init(grid, isDisplyEmpty){
|
|
var gid = grid.attr("id");
|
|
var grid_wrap_div = $("#gbox_"+gid);
|
|
//$("table.ui-jqgrid-htable thead", grid_wrap_div).prepend( $("tr.jqgfirstrow", grid_wrap_div).clone().removeAttr("role") ); //열너비tr 헤더에 입력
|
|
|
|
//윈도우 화면크기에 따른 자동 크기 조절
|
|
//$(window).on('resize.jqGrid', function () {
|
|
// grid.jqGrid( 'setGridWidth', grid_wrap_div.parents("div:first").width() );
|
|
//
|
|
// var hw = $("table.ui-jqgrid-htable", grid_wrap_div).width() ; //리사이즈된 헤더 넓이
|
|
// if( grid_wrap_div.width() < hw ){
|
|
// grid.setGridWidth( hw );
|
|
// }
|
|
//});
|
|
if( $("#thr_clone", grid_wrap_div).length > 0 ){ //fn_jqGrid_setGroupHeaders 사용시에만 간격조정(컬럼사이즈 조절불가시에만적용)
|
|
var cg = "<colgroup>";
|
|
$(".jqgfirstrow >td", grid_wrap_div).each(function(i,o){
|
|
var _w = $(this).width();
|
|
if( $(this).css('display') == 'none' ){ return true; }
|
|
if( i == 0 ){ _w += 2; }
|
|
cg += "<col width='" +_w+ "px' />" ;
|
|
});
|
|
cg += "</colgroup>";
|
|
$(cg).insertBefore(".ui-jqgrid-htable > thead", grid_wrap_div)
|
|
}
|
|
|
|
//조회결과 없음 표시
|
|
if(isDisplyEmpty && grid.getGridParam("reccount") == 0){
|
|
grid.addRowData(1, {});
|
|
$("tr[role=row]#1", grid_wrap_div).html('<td class="ui-widget-content jqgrow" style="text-align:center;" colspan="'+grid.getGridParam("colModel").length+'">조회된 데이터가 없습니다.</td>');
|
|
}
|
|
|
|
//setTimeout("$(window).scrollTop(0);", 50);
|
|
}
|
|
|
|
//선택된 id 목록
|
|
function fn_jqGrid_selarrrow(grid){
|
|
var gid = grid.attr("id");
|
|
var return_arr = [];
|
|
$("input:checkbox.cbox", grid).filter(":checked").each(function(i,o){
|
|
return_arr.push( $(o).parents("tr:first").attr("id") );
|
|
});
|
|
|
|
return return_arr;
|
|
}
|
|
</script>
|
|
<input type="hidden" name="menuPath" id="menuPath" value="" />
|
|
<div class="loading-container-wrap">
|
|
<div class="loading-container">
|
|
<div class="loading"></div>
|
|
<div id="loading-text">loading</div>
|
|
</div>
|
|
<p id="_loadingMessage"></p>
|
|
</div>
|