포틀릿 기능 추가
This commit is contained in:
parent
886227d8bd
commit
e5aee659c4
@ -357,6 +357,10 @@ public class MainController
|
||||
request.getSession().setAttribute("list_headmenu", list_headmenu);
|
||||
request.getSession().setAttribute("list_menulist", list_menulist);
|
||||
|
||||
|
||||
log.info("한번 봅시다. [{}]", list_menulist.toString());
|
||||
|
||||
|
||||
model.addAttribute("list_headmenu", list_headmenu);
|
||||
model.addAttribute("list_menulist", list_menulist);
|
||||
model.addAttribute("strMainYn", strMainYn);
|
||||
|
||||
@ -613,6 +613,63 @@ public class PortletManageController {
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 자산 현황 통계 포틀릿
|
||||
* @author urp 인프라본부 나혁제
|
||||
* 작성일 : 2025.11.11
|
||||
*/
|
||||
@RequestMapping(value = "/potl/getResouceTotalStat.do")
|
||||
public String getResouceTotalStat( HttpServletRequest request
|
||||
, @RequestParam Map<String, Object> commandMap
|
||||
, ModelMap model) throws Exception
|
||||
{
|
||||
log.info(">>>>>>>>>>>>>>> /potl/getResouceTotalStat.do <<<<<<<<<<<<<<<");
|
||||
|
||||
PrsnlPortletManageVO prsnlPortletManageVO = new PrsnlPortletManageVO();
|
||||
|
||||
prsnlPortletManageVO.setPrsnlId((String) commandMap.get("prsnlId"));
|
||||
|
||||
// Body Setting Start ---------------------------------
|
||||
Map<String, Object> bodyMap2 = ConvertUtils.convertToMapAll(prsnlPortletManageVO);
|
||||
// Body Setting End ---------------------------------
|
||||
// RestApi Call Start ---------------------------------
|
||||
Map<String, Object> returnMap2 = restApiCallUtil.RestApiCall(bodyMap2, "/potl/selectPotlSize.do");
|
||||
// RestApi Call End ---------------------------------
|
||||
|
||||
// Return Data Setting Start --------------------------
|
||||
Map<String, Object> resultList2 = (Map<String, Object>)returnMap2.get("resultList");
|
||||
// Return Data Setting End --------------------------
|
||||
|
||||
int potlWidth= (int) resultList2.get("portletWidth");
|
||||
int potlHeight= (int) resultList2.get("portletHeight");
|
||||
|
||||
Map<String, Object> bodyMap = new LinkedHashMap();
|
||||
Map<String, Object> returnMap = new LinkedHashMap();
|
||||
List<Map<String, Object>> resultList = new ArrayList();
|
||||
|
||||
// Body Setting Start ---------------------------------
|
||||
// Body Setting End ---------------------------------
|
||||
|
||||
// RestApi Call Start ---------------------------------
|
||||
returnMap = restApiCallUtil.RestApiCall(bodyMap, "/srm/getResouceTotalStat.do");
|
||||
// RestApi Call End ---------------------------------
|
||||
|
||||
// Return Data Setting Start --------------------------
|
||||
resultList = (List<Map<String, Object>>)returnMap.get("resultList");
|
||||
// Return Data Setting End --------------------------
|
||||
|
||||
String potlId=(String) commandMap.get("prsnlId");
|
||||
|
||||
model.addAttribute("resultList", resultList);
|
||||
model.addAttribute("potlId", potlId);
|
||||
model.addAttribute("potlWidth" , potlWidth);
|
||||
model.addAttribute("potlHeight", potlHeight);
|
||||
|
||||
log.info("<<<<<<<<<<<<<<< /potl/getResouceTotalStat.do >>>>>>>>>>>>>>>");
|
||||
|
||||
return "/itms/pot/MyResouceTotalStat";
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -800,6 +800,45 @@ public class ResourceManagerController
|
||||
return resBody;
|
||||
}
|
||||
|
||||
/**
|
||||
* 자산 삭제 처리를 한다.
|
||||
* @author urp 인프라본부 나혁제
|
||||
* 작성일 : 2025.02.05
|
||||
*/
|
||||
@ResponseBody
|
||||
@RequestMapping(value="/rem/deleteMultiAsset.do")
|
||||
public LinkedHashMap<String, Object> deleteMultiAsset( HttpServletRequest request
|
||||
, HttpServletResponse response ) throws Exception
|
||||
{
|
||||
log.info(">>>>>>>>>>>>>>> /rem/deleteMultiAsset.do <<<<<<<<<<<<<<<");
|
||||
|
||||
// api in/out map 정의
|
||||
Map<String, Object> bodyMap = new LinkedHashMap();
|
||||
Map<String, Object> returnMap = new LinkedHashMap();
|
||||
|
||||
// return 처리
|
||||
LinkedHashMap<String, Object> resBody = new LinkedHashMap<String, Object>(); // Response Map
|
||||
|
||||
String strInAssetSeqMulti = CommonUtil.nvl(request.getParameter("inAssetSeqMulti" ));
|
||||
|
||||
log.info(" strInAssetSeqMulti [{}]", strInAssetSeqMulti);
|
||||
|
||||
// Body Setting Start ---------------------------------
|
||||
bodyMap.put("inAssetSeqMulti" , strInAssetSeqMulti);
|
||||
// Body Setting End ---------------------------------
|
||||
|
||||
// RestApi Call Start ---------------------------------
|
||||
returnMap = restApiCallUtil.RestApiCall(bodyMap, "/rem/deleteMultiAsset.do");
|
||||
// RestApi Call End ---------------------------------
|
||||
|
||||
resBody.put("resultCd" , returnMap.get("resultCd") );
|
||||
resBody.put("resultMsg" , returnMap.get("resultMsg") );
|
||||
|
||||
log.info("<<<<<<<<<<<<<<< /rem/deleteMultiAsset.do >>>>>>>>>>>>>>>");
|
||||
|
||||
return resBody;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
|
||||
@ -27,6 +27,7 @@ import org.springframework.web.multipart.MultipartFile;
|
||||
import org.springframework.web.multipart.MultipartHttpServletRequest;
|
||||
import org.springmodules.validation.commons.DefaultBeanValidator;
|
||||
|
||||
import com.urpsys.basefront.common.util.CommonUtil;
|
||||
import com.urpsys.basefront.common.util.ConvertUtils;
|
||||
import com.urpsys.basefront.common.util.RestApiCallUtil;
|
||||
import com.urpsys.basefront.common.egov.util.EgovDateUtil;
|
||||
@ -228,6 +229,7 @@ public class ResourceMutilManagerController
|
||||
|
||||
LinkedHashMap<String, Object> resBody = new LinkedHashMap<String, Object>();
|
||||
|
||||
boolean iCheck = true;
|
||||
// Body Setting Start ---------------------------------
|
||||
bodyMap.put("vcAssetId",requestMap.get("vcAssetId"));
|
||||
// Body Setting End ---------------------------------
|
||||
@ -242,8 +244,46 @@ public class ResourceMutilManagerController
|
||||
{
|
||||
resBody.put("resultCd" , "E" );
|
||||
resBody.put("resultMsg" , "중복된 [자산번호] 입니다." );
|
||||
iCheck = false;
|
||||
}
|
||||
else
|
||||
|
||||
// 실사용자 정보 가져오기
|
||||
if(iCheck)
|
||||
{
|
||||
String strVcRealChargrNm = CommonUtil.nvl( requestMap.get("vcRealChargrNm"));
|
||||
if(!strVcRealChargrNm.equals(""))
|
||||
{
|
||||
// Body Setting Start ---------------------------------
|
||||
bodyMap.put("vcRealChargrNm",strVcRealChargrNm);
|
||||
// Body Setting End
|
||||
|
||||
// RestApi Call Start ---------------------------------
|
||||
returnMap = restApiCallUtil.RestApiCall(bodyMap, "/rem/realUserList.do");
|
||||
// RestApi Call End ---------------------------------
|
||||
|
||||
List<LinkedHashMap<String, Object>> listResult = (List<LinkedHashMap<String, Object>>)returnMap.get("result");
|
||||
|
||||
if(listResult.size()>1)
|
||||
{
|
||||
resBody.put("resultCd" , "E" );
|
||||
resBody.put("resultMsg" , "실사용자가 중복 되었습니다." );
|
||||
iCheck = false;
|
||||
}
|
||||
|
||||
else if(listResult.size()<1)
|
||||
{
|
||||
resBody.put("resultCd" , "E" );
|
||||
resBody.put("resultMsg" , "실사용자가 존재하지 않습니다." );
|
||||
iCheck = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
requestMap.put("inRealChargr", listResult.get(0).get("esntlId") );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(iCheck)
|
||||
{
|
||||
requestMap.put("inParentSeq" , "0"); // 상위자산 0 으로 세팅
|
||||
requestMap.put("inRemainPrice" , "0");
|
||||
|
||||
@ -425,20 +425,19 @@ public class PrsnlPortletCreateManageController
|
||||
Map<String, Object> bodyMap2 = ConvertUtils.convertToMap(prsnlPortletManageVO);
|
||||
// Body Setting End ---------------------------------
|
||||
|
||||
Map<String, Object> returnMap = restApiCallUtil.RestApiCall( bodyMap, "/potl/mainPortletPage.do");
|
||||
Map<String, Object> returnMap = restApiCallUtil.RestApiCall( bodyMap, "/potl/mainPortletPage.do");
|
||||
Map<String, Object> returnMap2 = restApiCallUtil.RestApiCall( bodyMap2, "/sys/selectPortletManageList.do");
|
||||
|
||||
List<Map<String, Object>> resultList = (List<Map<String, Object>>)returnMap.get("resultList");
|
||||
List<Map<String, Object>> resultList = (List<Map<String, Object>>)returnMap.get("resultList");
|
||||
List<Map<String, Object>> resultList2 = (List<Map<String, Object>>)returnMap2.get("resultList");
|
||||
|
||||
int portletCnt=(int)returnMap.get("totCnt");
|
||||
|
||||
model.addAttribute("resultList" , resultList);
|
||||
model.addAttribute("resultList2", resultList2);
|
||||
model.addAttribute("portletCnt" , portletCnt);
|
||||
|
||||
log.info("<<<<<<<<<<<<<<< /main/mainPage.do >>>>>>>>>>>>>>>");
|
||||
int portletCnt = (int)returnMap.get("totCnt" );
|
||||
int iMaxSeq = (int)returnMap.get("iMaxSeq"); // 2025.11.11 나혁제 정렬최대순서
|
||||
|
||||
model.addAttribute("resultList" , resultList );
|
||||
model.addAttribute("resultList2", resultList2 );
|
||||
model.addAttribute("portletCnt" , portletCnt );
|
||||
model.addAttribute("iMaxSeq" , iMaxSeq ); // 2025.11.11 나혁제 정렬최대순서
|
||||
|
||||
log.info("<<<<<<<<<<<<<<< /sys/selectPortletCreate2.do >>>>>>>>>>>>>>>");
|
||||
|
||||
|
||||
87
src/main/webapp/WEB-INF/jsp/itms/pot/MyResouceTotalStat.jsp
Normal file
87
src/main/webapp/WEB-INF/jsp/itms/pot/MyResouceTotalStat.jsp
Normal file
@ -0,0 +1,87 @@
|
||||
<!DOCTYPE html>
|
||||
<%
|
||||
/**
|
||||
* @Class Name : MyResouceTotalStat.jsp
|
||||
* @Description : 자산현황 통계 포틀릿
|
||||
* @Modification Information
|
||||
* @
|
||||
* @ 수정일 수정자 수정내용
|
||||
* @ ------- -------- ---------------------------
|
||||
* @ 2025.11.11 나혁제 최초 생성
|
||||
*
|
||||
* @author urp 인프라본부 나혁제
|
||||
* @since 2025.11.11
|
||||
* @version 1.0
|
||||
* @see
|
||||
*
|
||||
*/
|
||||
%>
|
||||
<%@ page contentType="text/html; charset=utf-8"%>
|
||||
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
|
||||
<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
|
||||
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
|
||||
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
|
||||
|
||||
<script type="text/javaScript" language="javascript" defer="defer">
|
||||
|
||||
//----------------------------------------
|
||||
// 상세조회 페이지 이동처리
|
||||
// ----------------------------------------
|
||||
function DataDetailTodo(strInType, strId, strTask)
|
||||
{
|
||||
var strMenu = "";
|
||||
|
||||
// 보고서
|
||||
if(strInType == '1')
|
||||
{
|
||||
strMenu = "&baseMenuNo=3000000&leftMenuNo=3010000";
|
||||
|
||||
// 점검보고서
|
||||
if(strTask == '1')
|
||||
{
|
||||
$(location).attr("href", "/srm/getReportWithBodyCheck.do?inReportSeq="+strId+strMenu);
|
||||
}
|
||||
// 장애보고서
|
||||
else if(strTask == '2')
|
||||
{
|
||||
$(location).attr("href", "/srm/getReportWithBodyError.do?inReportSeq="+strId+strMenu);
|
||||
}
|
||||
// 이슈보고서
|
||||
else if(strTask == '3')
|
||||
{
|
||||
$(location).attr("href", "/srm/getReportWithBodyIssue.do?inReportSeq="+strId+strMenu);
|
||||
}
|
||||
}
|
||||
// 인스던트
|
||||
else if(strInType == '2')
|
||||
{
|
||||
strMenu = "&baseMenuNo=3000000&leftMenuNo=3010000";
|
||||
|
||||
$(location).attr("href", "/srm/getIncidentBySeq.do?inIncidentSeq="+strId+strMenu);
|
||||
}
|
||||
}
|
||||
|
||||
</script>
|
||||
|
||||
<div class="week_news" style="width:${potlWidth}px; height:${potlHeight}px;">
|
||||
<h1>자산현황<a href="javascript:goAddPortletPage('4000000', '4010100');" class="btn_more" title="자산목록">더보기</a>
|
||||
<div class="delBtn" style="position:relative; z-index:501;" onclick="DelBtn('${potlId}')"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="currentColor" class="bi bi-trash3" viewBox="0 0 16 16">
|
||||
<path d="M6.5 1h3a.5.5 0 0 1 .5.5v1H6v-1a.5.5 0 0 1 .5-.5ZM11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3A1.5 1.5 0 0 0 5 1.5v1H2.506a.58.58 0 0 0-.01 0H1.5a.5.5 0 0 0 0 1h.538l.853 10.66A2 2 0 0 0 4.885 16h6.23a2 2 0 0 0 1.994-1.84l.853-10.66h.538a.5.5 0 0 0 0-1h-.995a.59.59 0 0 0-.01 0H11Zm1.958 1-.846 10.58a1 1 0 0 1-.997.92h-6.23a1 1 0 0 1-.997-.92L3.042 3.5h9.916Zm-7.487 1a.5.5 0 0 1 .528.47l.5 8.5a.5.5 0 0 1-.998.06L5 5.03a.5.5 0 0 1 .47-.53Zm5.058 0a.5.5 0 0 1 .47.53l-.5 8.5a.5.5 0 1 1-.998-.06l.5-8.5a.5.5 0 0 1 .528-.47ZM8 4.5a.5.5 0 0 1 .5.5v8.5a.5.5 0 0 1-1 0V5a.5.5 0 0 1 .5-.5Z"/>
|
||||
</svg>
|
||||
</div>
|
||||
</h1>
|
||||
<ul class="news_list">
|
||||
<c:forEach var="result" items="${resultList}" varStatus="status">
|
||||
<li>
|
||||
<a href="javascript:DataDetailTodo('${result.inType}', '${result.inSeq}','${result.inTask}');">
|
||||
<span class="noti_tit"><c:out value="${result.vcTitle}" /></span>
|
||||
</a>
|
||||
<span class="r_txt">
|
||||
<span class="w_name">${result.vcType}</span>
|
||||
${result.dtRegDatetime}
|
||||
</span>
|
||||
</li>
|
||||
|
||||
</c:forEach>
|
||||
</ul>
|
||||
</div>
|
||||
@ -62,6 +62,19 @@
|
||||
$('#inCate3').val('${resourceManage.inCate3}');
|
||||
}
|
||||
|
||||
// 2025.10.23 나혁제
|
||||
// 자산선택 check box 전체 선택
|
||||
$("#cbx_chkAll").click(function()
|
||||
{
|
||||
if($("#cbx_chkAll").is(":checked"))
|
||||
{
|
||||
$("input[name=chkBox]").prop("checked", true);
|
||||
}
|
||||
else
|
||||
{
|
||||
$("input[name=chkBox]").prop("checked", false);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
//----------------------------------------
|
||||
@ -89,6 +102,8 @@
|
||||
|
||||
document.listForm.searchCondition.value = "1";
|
||||
document.listForm.pageIndex.value = pageIndex;
|
||||
// 2025.10.23 나혁제 한페이지당 목록건수
|
||||
document.listForm.pageUnit.value = document.listForm.selPageSize.value;
|
||||
document.listForm.action = "<c:url value='/rem/SelectResource.do'/>";
|
||||
document.listForm.submit();
|
||||
}
|
||||
@ -172,14 +187,55 @@
|
||||
{
|
||||
document.listForm.action = "<c:url value='/rem/SelectResourceExecl.do'/>";
|
||||
document.listForm.submit();
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
// 2025.10.23 나혁제
|
||||
// 선택자산 일괄삭제
|
||||
// ----------------------------------------
|
||||
function bn_MultiAssetDelete()
|
||||
{
|
||||
var arrChkCnt = $("input:checkbox[name='chkBox']").length;
|
||||
|
||||
var iChkCnt=0;
|
||||
var strCheckedAssetSeq = "";
|
||||
for(var i=0; i<arrChkCnt; i++)
|
||||
{
|
||||
var bCheckYn = $("input:checkbox[name='chkBox']").eq(i).is(":checked");
|
||||
|
||||
if(bCheckYn)
|
||||
{
|
||||
var strAssetSeq = $("input[name='hidAssetSeq']" ).eq(i).val();
|
||||
|
||||
strCheckedAssetSeq = strCheckedAssetSeq + strAssetSeq+";"
|
||||
|
||||
iChkCnt++;
|
||||
}
|
||||
}
|
||||
|
||||
if(strCheckedAssetSeq.length > 0)
|
||||
{
|
||||
strCheckedAssetSeq = strCheckedAssetSeq.substr(0, strCheckedAssetSeq.length-1);
|
||||
}
|
||||
else
|
||||
{
|
||||
alert("삭제할 자산을 선택해 주시기 바랍니다.");
|
||||
}
|
||||
|
||||
var bYes = confirm("선택된 자산을 일괄 삭제 처리를 하시겠습니까?");
|
||||
if(bYes==false) return;
|
||||
|
||||
$('#inAssetSeqMulti').val(strCheckedAssetSeq);
|
||||
|
||||
console.log( "inAssetSeqMulti :"+$('#inAssetSeqMulti').val());
|
||||
|
||||
proc.fn_asset_multi_delete();
|
||||
}
|
||||
|
||||
|
||||
|
||||
//서블릿 통신
|
||||
//----------------------------------------
|
||||
// Ajax 서블릿 통신
|
||||
// ----------------------------------------
|
||||
var proc =
|
||||
{
|
||||
// 자산중분류 조회 처리
|
||||
@ -247,6 +303,39 @@
|
||||
}
|
||||
});
|
||||
}
|
||||
,
|
||||
// 2025.10.23 나혁제
|
||||
// 일괄 자산삭제
|
||||
fn_asset_multi_delete : function ()
|
||||
{
|
||||
var strUrl = "/rem/deleteMultiAsset.do";
|
||||
|
||||
var form = $('#listForm')[0];
|
||||
var formData = new FormData(form);
|
||||
|
||||
$.ajax({
|
||||
url: strUrl
|
||||
, type: 'post'
|
||||
, enctype:'multipart/form-data'
|
||||
, data: formData
|
||||
, dataType: 'json'
|
||||
, processData:false
|
||||
, contentType:false
|
||||
, cache:false
|
||||
, success: function(data)
|
||||
{
|
||||
alert("정상적으로 삭제처리 되었습니다.");
|
||||
linkPage(1);
|
||||
},
|
||||
error: function(errorThrown)
|
||||
{
|
||||
console.log(JSON.stringify(errorThrown));
|
||||
|
||||
alert("자산 일괄삭제 처리중 오류가 발생 하였습니다. \n 시스템 관리자에게 연락바랍니다.");
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -258,7 +347,7 @@
|
||||
<!-- javascript warning tag -->
|
||||
<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript>
|
||||
|
||||
<form:form name="listForm" action="${pageContext.request.contextPath}/rem/SelectResource.do" method="post">
|
||||
<form:form name="listForm" id="listForm" action="${pageContext.request.contextPath}/rem/SelectResource.do" method="post">
|
||||
|
||||
<!-- body_wrap :start -->
|
||||
<div class="body_wrap">
|
||||
@ -355,6 +444,27 @@
|
||||
</div>
|
||||
<!--//검색 :e -->
|
||||
|
||||
<%-- 2025.10.23 나혁제 자산일괄삭제 기능 추가 --%>
|
||||
<!-- tbl info -->
|
||||
<div class="tbl_info" style="margin-bottom: 10px;margin-top: -15px;">
|
||||
<div class="left_Area">
|
||||
<input type="button" id="btnMultiCmdExec" name="btnMultiCmdExec" onclick="javascript:bn_MultiAssetDelete()" class="btn btn-inspect"
|
||||
value="선택자산 일괄삭제" title="선택자산 일괄삭제" style="height:40px;width:200px;background: darkblue;">
|
||||
</div>
|
||||
|
||||
<div class="right_Area">
|
||||
<select name="selPageSize" id="selPageSize" onchange="linkPage(1)" title="리스트 보기">
|
||||
<option value="10" <c:if test="${resourceManage.pageUnit == '10'}"> selected </c:if> >10개씩</option>
|
||||
<option value="20" <c:if test="${resourceManage.pageUnit == '20'}"> selected </c:if> >20개씩</option>
|
||||
<option value="30" <c:if test="${resourceManage.pageUnit == '30'}"> selected </c:if> >30개씩</option>
|
||||
<option value="40" <c:if test="${resourceManage.pageUnit == '40'}"> selected </c:if> >40개씩</option>
|
||||
<option value="50" <c:if test="${resourceManage.pageUnit == '50'}"> selected </c:if> >50개씩</option>
|
||||
</select>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<!--//tbl info -->
|
||||
|
||||
<%--
|
||||
<div class="searchArea single-row" style="border: 0;background: bottom;">
|
||||
<div class="btnArea">
|
||||
@ -370,6 +480,7 @@
|
||||
<table class="table" summary="<spring:message code="common.summary.list" arguments="자산관리" />">
|
||||
<caption>자산관리 <spring:message code="title.list" /></caption>
|
||||
<colgroup>
|
||||
<col style="width: 3%;" > <!-- 2025.10.23 나혁제 체크박스 -->
|
||||
<col style="width: 7%;" > <!-- 대분류 -->
|
||||
<col style="width: 7%;" > <!-- 중분류 -->
|
||||
<col style="width: 8%;" > <!-- 소분류 -->
|
||||
@ -385,6 +496,7 @@
|
||||
</colgroup>
|
||||
<thead>
|
||||
<tr>
|
||||
<th><label><input type="checkbox" style="display: block;" name="cbx_chkAll" id="cbx_chkAll" /> </label></th>
|
||||
<th class="board_th_link">대분류</th>
|
||||
<th>중분류</th>
|
||||
<th>소분류</th>
|
||||
@ -406,6 +518,7 @@
|
||||
</c:if>
|
||||
<c:forEach var="resource" items="${resourceList}" varStatus="status">
|
||||
<tr>
|
||||
<td> <label><input type="checkbox" style="display: block;" name="chkBox" /> </label> </td>
|
||||
<td><c:out value="${resource.vcCate1}"/></td>
|
||||
<td><c:out value="${resource.vcCate2}"/></td>
|
||||
<td><c:out value="${resource.vcCate3}"/></td>
|
||||
@ -421,6 +534,8 @@
|
||||
<td><c:out value="${resource.inMasTarget}"/></td>
|
||||
<td><c:out value="${resource.dtEos}"/></td>
|
||||
|
||||
<%-- 2025.10.23 나혁제 일괄삭제처리 위한 seq --%>
|
||||
<input type="hidden" name="hidAssetSeq" id="hidAssetSeq" value="${resource.inAssetSeq}" />
|
||||
|
||||
</tr>
|
||||
</c:forEach>
|
||||
@ -460,6 +575,9 @@
|
||||
|
||||
<input type="hidden" name="inAssetSeq" value="0" />
|
||||
<input type="hidden" name="pageIndex" value="<c:out value='${resourceManage.pageIndex}'/>"/>
|
||||
<input type="hidden" name="pageUnit" value="<c:out value='${resourceManage.pageSize}'/>"/>
|
||||
<input type="hidden" name="searchCondition" value="1"/>
|
||||
<input type="hidden" name="hidEosCheckYn" value="${resourceManage.hidEosCheckYn}"/>
|
||||
<input type="hidden" name="inAssetSeqMulti" id="inAssetSeqMulti" value="" /> <%-- 2025.10.23 나혁제 일괄삭제처리 --%>
|
||||
|
||||
</form:form>
|
||||
|
||||
@ -376,6 +376,9 @@
|
||||
var dtEol = $.trim(rows[i].EOL일자 ) +"";
|
||||
var inPortInfo = $.trim(rows[i].포트정보 ) +"";
|
||||
|
||||
// 2025.10.27 나혁제 실사용자 추가
|
||||
var vcRealChargrNm = $.trim(rows[i].실사용자명 ) +"";
|
||||
|
||||
if( vcAssetId == undefined || vcAssetId == 'undefined' ) vcAssetId = '';
|
||||
if( inCate1 == undefined || inCate1 == 'undefined' ) inCate1 = '';
|
||||
if( inCate2 == undefined || inCate2 == 'undefined' ) inCate2 = '';
|
||||
@ -407,7 +410,7 @@
|
||||
|
||||
if( vcChkTrgYn != 'Y') vcChkTrgYn='';
|
||||
|
||||
// 2025.09.01 나혀겢 자산 추가속성
|
||||
// 2025.09.01 나혁제 자산 추가속성
|
||||
if( vcTaskNm == undefined || vcTaskNm == 'undefined' ) vcTaskNm = '';
|
||||
if( vcNrwdMicnStrtDt == undefined || vcNrwdMicnStrtDt == 'undefined' ) vcNrwdMicnStrtDt = '';
|
||||
if( vcNrwdMicnEndDt == undefined || vcNrwdMicnEndDt == 'undefined' ) vcNrwdMicnEndDt = '';
|
||||
@ -421,6 +424,9 @@
|
||||
if( dtEol == '' ) dtEol = strCurDate;
|
||||
if( dtLLicenseEnd == '' ) dtLLicenseEnd = strCurDate;
|
||||
|
||||
// 2025.10.27 나혁제 실사용자 추가
|
||||
if( vcRealChargrNm == undefined || vcRealChargrNm == 'undefined' ) vcRealChargrNm = '';
|
||||
|
||||
var strErrCd = '';
|
||||
var strErrMsg = '';
|
||||
|
||||
@ -602,6 +608,9 @@
|
||||
, dtEol // 2025.09.01 나혁제 자산 추가속성
|
||||
, inPortInfo // 2025.09.01 나혁제 자산 추가속성
|
||||
|
||||
, vcRealChargrNm // 2025.10.28 나혁제 자산 추가속성
|
||||
|
||||
|
||||
, strErrCd
|
||||
, strErrMsg
|
||||
}
|
||||
|
||||
@ -483,7 +483,7 @@
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<%-- 2025.09.01 나혁제 불필요한 항목 사젝 --%>
|
||||
<%-- 2025.09.01 나혁제 불필요한 항목 삭제 --%>
|
||||
<th style="display:none"> 서비스다운 </th>
|
||||
<td style="display:none" >
|
||||
${resultReport.dtDownstartDatetime}~${resultReport.dtDownfinishDatetime}
|
||||
|
||||
@ -634,7 +634,7 @@
|
||||
<td></td>
|
||||
<th> 서비스 </th>
|
||||
<td>
|
||||
<select name="inServiceCode" id="inServiceCode" onchange="selInServiceCode()" style="width: 0%;" >
|
||||
<select name="inServiceCode" id="inServiceCode" onchange="selInServiceCode()" style="width: 90%;" >
|
||||
<c:forEach items="${resultService}" var="result" varStatus="status">
|
||||
<option value="${result.value}" > ${result.label} </option><!-- 분류코드명 -->
|
||||
</c:forEach>
|
||||
|
||||
@ -657,7 +657,9 @@
|
||||
<input type="hidden" name="searchKeyword" value="<c:out value='${searchVO.searchKeyword}'/>" >
|
||||
<input type="hidden" name="pageIndex" value="<c:out value='${searchVO.pageIndex}'/>" >
|
||||
<input type="hidden" name="multiUserSelectYn" value="" >
|
||||
<%-- 2025.10.21 나혁제 오류 발생
|
||||
<input type="hidden" name="inTask" id="inTask" value="${searchVO.inTask}"/>
|
||||
--%>
|
||||
|
||||
<!-- 입력정보 -->
|
||||
<input type="hidden" id="txIncidentBody" name="txIncidentBody" value="" >
|
||||
|
||||
@ -120,6 +120,7 @@
|
||||
console.log('start');
|
||||
}
|
||||
,update: function(e, ui){
|
||||
alert('600');
|
||||
var left = $('.left #portletSeq');
|
||||
for(var i=0; i<left.length; i++){
|
||||
left[i].value=(i*2)+1
|
||||
@ -128,10 +129,39 @@
|
||||
for(var i=0; i<right.length; i++){
|
||||
right[i].value=(i*2)+2
|
||||
}
|
||||
fn_updt_portletSeq()
|
||||
fn_updt_portletSeq();
|
||||
}
|
||||
});
|
||||
|
||||
$(".col-lg-4").sortable({
|
||||
|
||||
connectWith: ".col-lg-4",
|
||||
handle: ".portlet-handle",
|
||||
placeholder: "portlet-placeholder ui-corner-all"
|
||||
|
||||
,start: function(e, ui){
|
||||
console.log('start');
|
||||
}
|
||||
,update: function(e, ui){
|
||||
alert('450');
|
||||
var portl450 = $('.col-lg-4 #portletSeq');
|
||||
|
||||
alert("portl450=>"+portl450.length);
|
||||
|
||||
for(var i=0; i<portl450.length; i++)
|
||||
{
|
||||
portl450[i].value=i+1;
|
||||
}
|
||||
/*
|
||||
var right = $('.right #portletSeq');
|
||||
for(var i=0; i<right.length; i++){
|
||||
right[i].value=(i*2)+2
|
||||
}
|
||||
*/
|
||||
fn_updt_portletSeq();
|
||||
}
|
||||
});
|
||||
|
||||
$( ".portlet" )
|
||||
.addClass( "ui-helper-clearfix ui-corner-all" )
|
||||
.find( ".portlet-handle" )
|
||||
@ -159,67 +189,119 @@
|
||||
|
||||
|
||||
//사용자 포틀릿 추가
|
||||
function insertPortlet(prsnlId, prsnlKoreanNm, url, potlWidth, potlHeight){
|
||||
var vForm=document.prsnlPortletCreateVO;
|
||||
var exPotlId=document.prsnlPortletCreateVO.prsnlId;
|
||||
var insertChk=true;
|
||||
var insertCnt=0;
|
||||
var portletCnt=document.getElementById("portletCnt").value;
|
||||
if(exPotlId){
|
||||
if(exPotlId.length>1){
|
||||
for(var i=0; i < exPotlId.length; i++){
|
||||
if(prsnlId==exPotlId[i].value){
|
||||
alert("이미 해당 포틀릿이 존재합니다.");
|
||||
insertChk=false;
|
||||
}
|
||||
}
|
||||
}else{
|
||||
if(prsnlId==exPotlId.value){
|
||||
alert("이미 해당 포틀릿이 존재합니다.");
|
||||
insertChk=false;
|
||||
}
|
||||
}
|
||||
}
|
||||
if(insertChk){
|
||||
if(confirm(prsnlKoreanNm+" 포틀릿을 추가 하시겠습니까?")){
|
||||
$.ajax({
|
||||
url :"<c:url value='/potl/insertUserPortlet.do'/>"
|
||||
function insertPortlet(prsnlId, prsnlKoreanNm, strRealUrl, potlWidth, potlHeight)
|
||||
{
|
||||
var vForm=document.prsnlPortletCreateVO;
|
||||
var exPotlId=document.prsnlPortletCreateVO.prsnlId;
|
||||
var insertChk=true;
|
||||
var insertCnt=0;
|
||||
var portletCnt=document.getElementById("portletCnt").value;
|
||||
|
||||
if(exPotlId)
|
||||
{
|
||||
if(exPotlId.length>1)
|
||||
{
|
||||
for(var i=0; i < exPotlId.length; i++)
|
||||
{
|
||||
if(prsnlId==exPotlId[i].value)
|
||||
{
|
||||
alert("이미 해당 포틀릿이 존재합니다.");
|
||||
insertChk=false;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if(prsnlId==exPotlId.value)
|
||||
{
|
||||
alert("이미 해당 포틀릿이 존재합니다.");
|
||||
insertChk=false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(insertChk)
|
||||
{
|
||||
/*
|
||||
if(confirm(prsnlKoreanNm+" 포틀릿을 추가 하시겠습니까?"))
|
||||
{
|
||||
|
||||
var innerHtml="";
|
||||
innerHtml+="<div class='portlet' style='width:"+ potlWidth +"px; height:"+ potlHeight +"px;'>";
|
||||
innerHtml+="<div class='portlet-handle' onmouseover='test();' id='"+ prsnlId +"'>";
|
||||
innerHtml+="<input id='prsnlId' type='hidden' name='prsnlId' value='"+ prsnlId +"' maxlength='60' style='width:231px' />";
|
||||
innerHtml+="<input id='portletSeq' type='hidden' name='portletSeq' maxlength='60' style='width:231px' />";
|
||||
// innerHtml+=data;
|
||||
innerHtml+="</div>";
|
||||
innerHtml+="</div>";
|
||||
|
||||
if(potlWidth > 450)
|
||||
{
|
||||
$("#insertColumn600").append(innerHtml);
|
||||
}
|
||||
else
|
||||
{
|
||||
$("#insertColumn450").append(innerHtml);
|
||||
}
|
||||
|
||||
}
|
||||
*/
|
||||
|
||||
|
||||
if(confirm(prsnlKoreanNm+" 포틀릿을 추가 하시겠습니까?")){
|
||||
|
||||
$.ajax({
|
||||
url :"<c:url value='/potl/insertUserPortlet.do'/>"
|
||||
, type: "POST"
|
||||
, dataType: 'json'
|
||||
, data: { insPrnslIds: prsnlId
|
||||
}
|
||||
, success : function(data)
|
||||
{
|
||||
$.ajax({
|
||||
url : url
|
||||
, type: "POST"
|
||||
,data: {prsnlId: prsnlId}
|
||||
, success : function(data)
|
||||
{
|
||||
var innerHtml="";
|
||||
innerHtml+="<div class='portlet' style='width:"+ potlWidth +"px; height:"+ potlHeight +"px;'>";
|
||||
innerHtml+="<div class='portlet-handle' onmouseover='test();' id='"+ prsnlId +"'>";
|
||||
innerHtml+="<input id='prsnlId' type='hidden' name='prsnlId' value='"+ prsnlId +"' maxlength='60' style='width:231px' />";
|
||||
innerHtml+="<input id='portletSeq' type='hidden' name='portletSeq' maxlength='60' style='width:231px' />";
|
||||
innerHtml+=data;
|
||||
innerHtml+="</div>";
|
||||
innerHtml+="</div>";
|
||||
$("#insertColumn").append(innerHtml);
|
||||
}
|
||||
, error: function()
|
||||
{
|
||||
alert("실패");
|
||||
}
|
||||
});
|
||||
}
|
||||
, error: function()
|
||||
{
|
||||
alert("실패");
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
{
|
||||
$.ajax({
|
||||
url : strRealUrl
|
||||
, type: "POST"
|
||||
,data: {prsnlId: prsnlId}
|
||||
, success : function(data)
|
||||
{
|
||||
var innerHtml = "";
|
||||
innerHtml+="<div class='portlet' style='width:"+ potlWidth +"px; height:"+ potlHeight +"px;'>";
|
||||
innerHtml+="<div class='portlet-handle' onmouseover='test();' id='"+ prsnlId +"'>";
|
||||
innerHtml+="<input id='prsnlId' type='hidden' name='prsnlId' value='"+ prsnlId +"' maxlength='60' style='width:231px' />";
|
||||
// innerHtml+="<input id='portletSeq' type='hidden' name='portletSeq' maxlength='60' style='width:231px' />";
|
||||
innerHtml+=data;
|
||||
innerHtml+="</div>";
|
||||
innerHtml+="</div>";
|
||||
|
||||
if(potlWidth > 450)
|
||||
{
|
||||
$("#insertColumn600").append(innerHtml);
|
||||
}
|
||||
else
|
||||
{
|
||||
$("#insertColumn450").append(innerHtml);
|
||||
}
|
||||
|
||||
fn_updt_portletSeq();
|
||||
}
|
||||
, error: function()
|
||||
{
|
||||
alert("실패");
|
||||
}
|
||||
});
|
||||
}
|
||||
, error: function()
|
||||
{
|
||||
alert("실패");
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//포틀릿 삭제
|
||||
@ -247,34 +329,41 @@
|
||||
}
|
||||
}
|
||||
|
||||
//포틀릿 배치 수정
|
||||
// 포틀릿 배치 수정
|
||||
function fn_updt_portletSeq()
|
||||
{
|
||||
var portletSeqList="";
|
||||
var prsnlIdList="";
|
||||
var checkField=document.prsnlPortletCreateVO.portletSeq;
|
||||
var checkField2=document.prsnlPortletCreateVO.prsnlId;
|
||||
|
||||
var checkField = document.prsnlPortletCreateVO.portletSeq;
|
||||
var checkField2 = document.prsnlPortletCreateVO.prsnlId;
|
||||
|
||||
var checkedCount = 0;
|
||||
var checkedCount2 = 0;
|
||||
|
||||
if(checkField)
|
||||
{
|
||||
alert(checkField.length);
|
||||
|
||||
if(checkField.length > 1)
|
||||
{
|
||||
for(var i=0; i < checkField.length; i++)
|
||||
{
|
||||
portletSeqList += ((checkedCount==0? "" : ",") + checkField[i].value);
|
||||
portletSeqList += ((checkedCount==0 ? "" : ",") + checkField[i].value);
|
||||
checkedCount++;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
portletSeqList += ((checkedCount==0? "" : ",") + checkField.value);
|
||||
portletSeqList += ((checkedCount==0 ? "" : ",") + checkField.value);
|
||||
checkedCount++;
|
||||
}
|
||||
}
|
||||
|
||||
if(checkField2)
|
||||
{
|
||||
alert(checkField2.length);
|
||||
|
||||
if(checkField2.length > 1)
|
||||
{
|
||||
for(var i=0; i < checkField2.length; i++)
|
||||
@ -282,11 +371,17 @@
|
||||
prsnlIdList += ((checkedCount2==0? "" : ",") + checkField2[i].value);
|
||||
checkedCount2++;
|
||||
}
|
||||
}else{
|
||||
}
|
||||
else
|
||||
{
|
||||
prsnlIdList += ((checkedCount2==0? "" : ",") + checkField2.value);
|
||||
checkedCount2++;
|
||||
}
|
||||
}
|
||||
|
||||
alert("portletSeqList=>"+portletSeqList);
|
||||
alert("prsnlIdList=>"+prsnlIdList);
|
||||
|
||||
$.ajax({
|
||||
url :"<c:url value='/potl/updatePortletSeq.do'/>"
|
||||
, type: "POST"
|
||||
@ -303,10 +398,14 @@
|
||||
});
|
||||
|
||||
}
|
||||
function fn_complete_updt(){
|
||||
|
||||
function fn_complete_updt()
|
||||
{
|
||||
location.href = "<c:url value='/main/mainPage.do'/>";
|
||||
}
|
||||
function fn_test(){
|
||||
|
||||
function fn_test()
|
||||
{
|
||||
location.href = "<c:url value='/potl/test.do'/>";
|
||||
}
|
||||
|
||||
@ -358,9 +457,130 @@
|
||||
</c:forEach>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-lg-6 left" id="insertColumn">
|
||||
|
||||
<%--
|
||||
<c:set var="listCnt">${fn:length(resultList)-3}</c:set>
|
||||
${status.index}/${listCnt}
|
||||
--%>
|
||||
|
||||
|
||||
|
||||
<c:forEach begin="1" end="3" step="1" varStatus="status1">
|
||||
<c:set var="bPortYn">0</c:set>
|
||||
|
||||
<c:forEach var="result" items="${resultList}" varStatus="status2">
|
||||
<c:if test="${result.portletSeq == status1.index}">
|
||||
|
||||
<c:set var="bPortYn">1</c:set>
|
||||
<div class="col-lg-4" id="insertColumn450">
|
||||
|
||||
<div class="portlet" style="width:${result.portletWidth}px; height:${result.portletHeight}px;">
|
||||
<div class="portlet-handle" id="${result.prsnlId}">
|
||||
<input id="prsnlId" type="hidden" name="prsnlId" value='<c:out value="${result.prsnlId}" />' />
|
||||
<input id="portletSeq" type="hidden" name="portletSeq" value='<c:out value="${result.portletSeq}" />' />
|
||||
<c:import url="${result.url}" charEncoding="utf-8">
|
||||
<c:param name="prsnlId" value="${result.prsnlId}"/>
|
||||
</c:import>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</c:if>
|
||||
</c:forEach>
|
||||
|
||||
<c:if test="${bPortYn == 0}">
|
||||
<div class="col-lg-4" id="insertColumn450">
|
||||
<div class="portlet" >
|
||||
<div class="portlet-handle" id="${result.prsnlId}">
|
||||
<input id="prsnlId" type="hidden" name="prsnlId" value='' />
|
||||
<input id="portletSeq" type="hidden" name="portletSeq" value='' />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<%--
|
||||
<input id="prsnlId" type="hidden" name="prsnlId" value='' />
|
||||
<input id="portletSeq" type="hidden" name="portletSeq" value='<c:out value="${status1.index}" />' />
|
||||
--%>
|
||||
</div>
|
||||
</c:if>
|
||||
|
||||
</c:forEach>
|
||||
|
||||
<c:set var="iEndIdx">${iMaxSeq}</c:set>
|
||||
<c:if test="${iMaxSeq < 6}">
|
||||
<c:set var="iEndIdx">6</c:set>
|
||||
</c:if>
|
||||
|
||||
<c:forEach begin="4" end="${iEndIdx}" step="1" varStatus="status1">
|
||||
|
||||
<c:set var="bPortYn">0</c:set>
|
||||
|
||||
<c:forEach var="result" items="${resultList}" varStatus="status2">
|
||||
<c:if test="${result.portletSeq == status1.index}">
|
||||
|
||||
<c:set var="bPortYn">1</c:set>
|
||||
<div class="col-lg-6" id="insertColumn600">
|
||||
|
||||
<div class="portlet" style="width:${result.portletWidth}px; height:${result.portletHeight}px;">
|
||||
<div class="portlet-handle" id="${result.prsnlId}">
|
||||
<input id="prsnlId" type="hidden" name="prsnlId" value='<c:out value="${result.prsnlId}" />' maxlength="60" style="width:231px" />
|
||||
<input id="portletSeq" type="hidden" name="portletSeq" value='<c:out value="${result.portletSeq}" />' maxlength="60" style="width:231px" />
|
||||
<c:import url="${result.url}" charEncoding="utf-8">
|
||||
<c:param name="prsnlId" value="${result.prsnlId}"/>
|
||||
</c:import>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</c:if>
|
||||
</c:forEach>
|
||||
|
||||
<c:if test="${bPortYn == 0}">
|
||||
<div class="col-lg-6" id="insertColumn600">
|
||||
<input id="prsnlId" type="hidden" name="prsnlId" value='' />
|
||||
<input id="portletSeq" type="hidden" name="portletSeq" value='<c:out value="${status1.index}" />' />
|
||||
</div>
|
||||
</c:if>
|
||||
</c:forEach>
|
||||
|
||||
|
||||
|
||||
|
||||
<%--
|
||||
<c:forEach var="result" items="${resultList}" varStatus="status">
|
||||
|
||||
<c:if test="${result.portletWidth > 450}">
|
||||
<div class="col-lg-6" id="insertColumn600">
|
||||
</c:if>
|
||||
<c:if test="${result.portletWidth <= 450}">
|
||||
<div class="col-lg-4" id="insertColumn450">
|
||||
</c:if>
|
||||
|
||||
<div class="portlet" style="width:${result.portletWidth}px; height:${result.portletHeight}px;">
|
||||
<div class="portlet-handle" id="${result.prsnlId}">
|
||||
<input id="prsnlId" type="hidden" name="prsnlId" value='<c:out value="${result.prsnlId}" />' maxlength="60" style="width:231px" />
|
||||
<input id="portletSeq" type="hidden" name="portletSeq" value='<c:out value="${result.portletSeq}" />' maxlength="60" style="width:231px" />
|
||||
<c:import url="${result.url}" charEncoding="utf-8">
|
||||
<c:param name="prsnlId" value="${result.prsnlId}"/>
|
||||
</c:import>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</c:forEach>
|
||||
|
||||
<!-- 2025.11.11 빈공간 생성 -->
|
||||
<div class="col-lg-6" id="insertColumn600">
|
||||
</div>
|
||||
<div class="col-lg-4" id="insertColumn450">
|
||||
</div>
|
||||
|
||||
--%>
|
||||
|
||||
<%--
|
||||
<div class="col-lg-6" id="insertColumn">
|
||||
<c:forEach var="result" items="${resultList}" varStatus="status">
|
||||
<c:if test="${result.portletSeq%2!=0}">
|
||||
<c:if test="${result.portletSeq%2 == 1}">
|
||||
<div class="portlet" style="width:${result.portletWidth}px; height:${result.portletHeight}px;">
|
||||
<div class="portlet-handle" id="${result.prsnlId}">
|
||||
<input id="prsnlId" type="hidden" name="prsnlId" value='<c:out value="${result.prsnlId}" />' maxlength="60" style="width:231px" />
|
||||
@ -373,9 +593,26 @@
|
||||
</c:if>
|
||||
</c:forEach>
|
||||
</div>
|
||||
<div class="col-lg-6 right">
|
||||
|
||||
<div class="col-lg-6" id="insertColumn">
|
||||
<c:forEach var="result" items="${resultList}" varStatus="status">
|
||||
<c:if test="${result.portletSeq%2==0}">
|
||||
<c:if test="${result.portletSeq%2 == 2}">
|
||||
<div class="portlet" style="width:${result.portletWidth}px; height:${result.portletHeight}px;">
|
||||
<div class="portlet-handle" id="${result.prsnlId}">
|
||||
<input id="prsnlId" type="hidden" name="prsnlId" value='<c:out value="${result.prsnlId}" />' maxlength="60" style="width:231px" />
|
||||
<input id="portletSeq" type="hidden" name="portletSeq" value='<c:out value="${result.portletSeq}" />' maxlength="60" style="width:231px" />
|
||||
<c:import url="${result.url}" charEncoding="utf-8">
|
||||
<c:param name="prsnlId" value="${result.prsnlId}"/>
|
||||
</c:import>
|
||||
</div>
|
||||
</div>
|
||||
</c:if>
|
||||
</c:forEach>
|
||||
</div>
|
||||
|
||||
<div class="col-lg-6">
|
||||
<c:forEach var="result" items="${resultList}" varStatus="status">
|
||||
<c:if test="${result.portletSeq%2 == 0}">
|
||||
<div class="portlet" style="width:${result.portletWidth}px; height:${result.portletHeight}px;">
|
||||
<div class="portlet-handle" id="${result.prsnlId}">
|
||||
<input id="prsnlId" type="hidden" name="prsnlId" value='<c:out value="${result.prsnlId}" />' maxlength="60" style="width:231px" />
|
||||
@ -388,6 +625,7 @@
|
||||
</c:if>
|
||||
</c:forEach>
|
||||
</div>
|
||||
--%>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
@ -0,0 +1,421 @@
|
||||
<!DOCTYPE html>
|
||||
|
||||
<%
|
||||
/**
|
||||
* @ Class Name : PrsnlPortletCreateManage2.jsp
|
||||
* @ Description : 사용자포틀릿관리 목록2 조회
|
||||
* @ Modification Information
|
||||
* @
|
||||
* @ 수정일 수정자 수정내용
|
||||
* @ ---------- -------- ---------------------------
|
||||
* @ 2025.03.10 나혁제 최초 생성
|
||||
*
|
||||
* @ author urp 인프라본부 나혁제
|
||||
* @ since 2025.03.10
|
||||
* @ version 1.0
|
||||
* @ see
|
||||
*
|
||||
*/
|
||||
%>
|
||||
|
||||
<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
|
||||
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
|
||||
<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
|
||||
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
|
||||
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
|
||||
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
|
||||
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" >
|
||||
<link href="<c:url value="/egov/css/com/button.css"/>" rel="stylesheet" type="text/css">
|
||||
|
||||
<!-- bootstrap -->
|
||||
<%-- 2025.08.29 나혁제 스크립트 오류가 발생함
|
||||
<link href="${ctx}/css/bootstrap/bootstrap.min.css" rel="stylesheet" integrity="sha384-rbsA2VBKQhggwzxH7pPCaAqO46MgnOM80zW1RWuH61DGLwZJEdK2Kadq2F9CUG65" crossorigin="anonymous">
|
||||
<script src="${ctx}/js/bootstrap/bootstrap.bundle.min.js" integrity="sha384-kenU1KFdBIe4zVF0s0G1M5b4hcpxyD9F7jL+jjXkk+Q2h455rYXK/7HAuoJl+0I4" crossorigin="anonymous"></script>
|
||||
--%>
|
||||
<link href="${ctx}/css/bootstrap/bootstrap.min.css" rel="stylesheet" crossorigin="anonymous">
|
||||
<script src="${ctx}/js/bootstrap/bootstrap.bundle.min.js" crossorigin="anonymous"></script>
|
||||
<!-- bootstrap end -->
|
||||
|
||||
<link rel="stylesheet" type="text/css" href="${ctx}/css/import.css?ver=1">
|
||||
<script type="text/javascript" src="${ctx}/js/common_script.js?ver=1"></script>
|
||||
|
||||
|
||||
<title>사용자포틀릿관리2</title>
|
||||
<style>
|
||||
.pgmList{
|
||||
display:flex;
|
||||
margin-bottom: 50px;
|
||||
background-color:#f2f4f7;
|
||||
padding:10px;
|
||||
overflow-x:scroll;
|
||||
}
|
||||
.selectPgm{
|
||||
margin-right: 50px;
|
||||
}
|
||||
.pgmThumb{
|
||||
border: 3px solid #f2f4f7;
|
||||
border-radius: 20px;
|
||||
transition: 0.2s;
|
||||
}
|
||||
.pgmThumb:hover{
|
||||
cursor:pointer;
|
||||
border-color: #00b6c2;
|
||||
box-shadow: 0 5px 8px 0 #00b6c2
|
||||
}
|
||||
.potlNm{
|
||||
margin-top: 8px;
|
||||
text-align: center;
|
||||
}
|
||||
.portlet {
|
||||
border:none;
|
||||
margin: 0 1em 1em 0;
|
||||
padding: 0.3em;
|
||||
}
|
||||
.portlet-placeholder {
|
||||
border: 1px dotted black;
|
||||
background-color:#f4f4f4;
|
||||
margin: 0 1em 1em 0;
|
||||
height: 200px;
|
||||
}
|
||||
.delBtn{
|
||||
float:right;
|
||||
padding:5px;
|
||||
border-radius:30px;
|
||||
display:none;
|
||||
}
|
||||
.delBtn:hover{
|
||||
cursor:pointer;
|
||||
transition: 0.3s;
|
||||
background-color:lightgrey;
|
||||
}
|
||||
.portlet-handle {
|
||||
transition: 0.2s;
|
||||
border-radius: 20px;
|
||||
}
|
||||
.portlet-handle:hover {
|
||||
cursor:move;
|
||||
transform: translateY(-5px);
|
||||
box-shadow: 0 8px 14px 0 rgba(0,0,0,0.4)
|
||||
}
|
||||
</style>
|
||||
<%-- 2025.03.10 나혁제 로컬에서 사용
|
||||
<script src="https://code.jquery.com/jquery-3.6.0.js"></script>
|
||||
<script src="https://code.jquery.com/ui/1.13.2/jquery-ui.js"></script>
|
||||
--%>
|
||||
|
||||
<script src="${ctx}/js/bootstrap/jquery-3.6.0.js"></script>
|
||||
<script src="${ctx}/js/bootstrap/jquery-ui.js"></script>
|
||||
|
||||
<script type="text/javascript">
|
||||
$( function() {
|
||||
test();
|
||||
|
||||
$(".col-lg-6").sortable({
|
||||
connectWith: ".col-lg-6",
|
||||
handle: ".portlet-handle",
|
||||
placeholder: "portlet-placeholder ui-corner-all"
|
||||
|
||||
,start: function(e, ui){
|
||||
console.log('start');
|
||||
}
|
||||
,update: function(e, ui){
|
||||
var left = $('.left #portletSeq');
|
||||
for(var i=0; i<left.length; i++){
|
||||
left[i].value=(i*2)+1
|
||||
}
|
||||
var right = $('.right #portletSeq');
|
||||
for(var i=0; i<right.length; i++){
|
||||
right[i].value=(i*2)+2
|
||||
}
|
||||
fn_updt_portletSeq()
|
||||
}
|
||||
});
|
||||
|
||||
$( ".portlet" )
|
||||
.addClass( "ui-helper-clearfix ui-corner-all" )
|
||||
.find( ".portlet-handle" )
|
||||
.addClass( "ui-corner-all" )
|
||||
|
||||
$(".copy").css({
|
||||
"margin-top": "-20px"
|
||||
});
|
||||
|
||||
} );
|
||||
|
||||
function test(){
|
||||
$('.portlet-handle').mouseover(function(e){
|
||||
var id= e.target.closest('.portlet-handle').id;
|
||||
$('#'+id+' .news_list').css("pointer-events", "none");
|
||||
$('#'+id+' .btn_more').css("display", "none");
|
||||
$('#'+id+' .delBtn').css("display", "block")
|
||||
});
|
||||
$('.portlet-handle').mouseout(function(e){
|
||||
var id= e.target.closest('.portlet-handle').id;
|
||||
$('.delBtn').css("display", "none");
|
||||
$('#'+id+' .btn_more').css("display", "block");
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
//사용자 포틀릿 추가
|
||||
function insertPortlet(prsnlId, prsnlKoreanNm, url, potlWidth, potlHeight){
|
||||
var vForm=document.prsnlPortletCreateVO;
|
||||
var exPotlId=document.prsnlPortletCreateVO.prsnlId;
|
||||
var insertChk=true;
|
||||
var insertCnt=0;
|
||||
var portletCnt=document.getElementById("portletCnt").value;
|
||||
if(exPotlId){
|
||||
if(exPotlId.length>1){
|
||||
for(var i=0; i < exPotlId.length; i++){
|
||||
if(prsnlId==exPotlId[i].value){
|
||||
alert("이미 해당 포틀릿이 존재합니다.");
|
||||
insertChk=false;
|
||||
}
|
||||
}
|
||||
}else{
|
||||
if(prsnlId==exPotlId.value){
|
||||
alert("이미 해당 포틀릿이 존재합니다.");
|
||||
insertChk=false;
|
||||
}
|
||||
}
|
||||
}
|
||||
if(insertChk){
|
||||
if(confirm(prsnlKoreanNm+" 포틀릿을 추가 하시겠습니까?")){
|
||||
$.ajax({
|
||||
url :"<c:url value='/potl/insertUserPortlet.do'/>"
|
||||
, type: "POST"
|
||||
, dataType: 'json'
|
||||
, data: { insPrnslIds: prsnlId
|
||||
}
|
||||
, success : function(data)
|
||||
{
|
||||
$.ajax({
|
||||
url : url
|
||||
, type: "POST"
|
||||
,data: {prsnlId: prsnlId}
|
||||
, success : function(data)
|
||||
{
|
||||
var innerHtml="";
|
||||
innerHtml+="<div class='portlet' style='width:"+ potlWidth +"px; height:"+ potlHeight +"px;'>";
|
||||
innerHtml+="<div class='portlet-handle' onmouseover='test();' id='"+ prsnlId +"'>";
|
||||
innerHtml+="<input id='prsnlId' type='hidden' name='prsnlId' value='"+ prsnlId +"' maxlength='60' style='width:231px' />";
|
||||
innerHtml+="<input id='portletSeq' type='hidden' name='portletSeq' maxlength='60' style='width:231px' />";
|
||||
innerHtml+=data;
|
||||
innerHtml+="</div>";
|
||||
innerHtml+="</div>";
|
||||
$("#insertColumn").append(innerHtml);
|
||||
}
|
||||
, error: function()
|
||||
{
|
||||
alert("실패");
|
||||
}
|
||||
});
|
||||
}
|
||||
, error: function()
|
||||
{
|
||||
alert("실패");
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//포틀릿 삭제
|
||||
function DelBtn(prsnlId){
|
||||
|
||||
if(confirm("해당 포틀릿을 삭제하시겠습니까?")){
|
||||
const div = $('#'+prsnlId).parent('div');
|
||||
var portletCnt=document.getElementById("portletCnt").value;
|
||||
div.remove();
|
||||
$.ajax({
|
||||
url :"<c:url value='/potl/deleteUserPortlet.do'/>"
|
||||
, type: "POST"
|
||||
, dataType: 'json'
|
||||
, data: { prsnlIdForInsert: prsnlId
|
||||
}
|
||||
, success : function(data)
|
||||
{
|
||||
portletCnt - 1
|
||||
}
|
||||
, error: function()
|
||||
{
|
||||
alert("실패");
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
//포틀릿 배치 수정
|
||||
function fn_updt_portletSeq()
|
||||
{
|
||||
var portletSeqList="";
|
||||
var prsnlIdList="";
|
||||
var checkField=document.prsnlPortletCreateVO.portletSeq;
|
||||
var checkField2=document.prsnlPortletCreateVO.prsnlId;
|
||||
var checkedCount = 0;
|
||||
var checkedCount2 = 0;
|
||||
|
||||
if(checkField)
|
||||
{
|
||||
if(checkField.length > 1)
|
||||
{
|
||||
for(var i=0; i < checkField.length; i++)
|
||||
{
|
||||
portletSeqList += ((checkedCount==0? "" : ",") + checkField[i].value);
|
||||
checkedCount++;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
portletSeqList += ((checkedCount==0? "" : ",") + checkField.value);
|
||||
checkedCount++;
|
||||
}
|
||||
}
|
||||
if(checkField2)
|
||||
{
|
||||
if(checkField2.length > 1)
|
||||
{
|
||||
for(var i=0; i < checkField2.length; i++)
|
||||
{
|
||||
prsnlIdList += ((checkedCount2==0? "" : ",") + checkField2[i].value);
|
||||
checkedCount2++;
|
||||
}
|
||||
}else{
|
||||
prsnlIdList += ((checkedCount2==0? "" : ",") + checkField2.value);
|
||||
checkedCount2++;
|
||||
}
|
||||
}
|
||||
$.ajax({
|
||||
url :"<c:url value='/potl/updatePortletSeq.do'/>"
|
||||
, type: "POST"
|
||||
, dataType: 'json'
|
||||
, data: { portletSeqForInsert: portletSeqList
|
||||
, prsnlIdForInsert: prsnlIdList
|
||||
}
|
||||
, success : function(data)
|
||||
{
|
||||
}
|
||||
, error: function()
|
||||
{
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
function fn_complete_updt(){
|
||||
location.href = "<c:url value='/main/mainPage.do'/>";
|
||||
}
|
||||
function fn_test(){
|
||||
location.href = "<c:url value='/potl/test.do'/>";
|
||||
}
|
||||
|
||||
|
||||
</script>
|
||||
|
||||
<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript>
|
||||
|
||||
<form:form modelAttribute="prsnlPortletCreateVO" name="prsnlPortletCreateVO" method="post">
|
||||
<input name="portletSeqForInsert" type="hidden" >
|
||||
<input name="prsnlIdForInsert" type="hidden" >
|
||||
<input id="portletCnt" type="hidden" value="${portletCnt}">
|
||||
|
||||
<%-- 2025.03.10 나혁제 신디자인 적용
|
||||
<div class="inner clearfix">
|
||||
--%>
|
||||
<div id="container">
|
||||
|
||||
<div class="content">
|
||||
|
||||
<div class="main_titWrap" style="width: 1400px;">
|
||||
|
||||
<h3>사용자 포틀릿관리</h3>
|
||||
|
||||
<!-- location :s -->
|
||||
<div class="location">
|
||||
<div class="location-cont">
|
||||
<div>
|
||||
<ul class="route_navi">
|
||||
<li><a href="#" title="홈"><span class="home">홈</span></a></li>
|
||||
<li><a href="#" title="시스템관리">시스템관리</a></li>
|
||||
<li>사용자 포틀릿관리</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!--//location :e -->
|
||||
</div>
|
||||
|
||||
|
||||
<span>※포틀릿을 하나도 지정하지 않는 경우 업무게시판, 공지사항 포틀릿은 기본으로 보여집니다.</span>
|
||||
<br><br>
|
||||
<div class="pgmList">
|
||||
<c:forEach var="result2" items="${resultList2}" varStatus="status">
|
||||
<div class="selectPgm" onclick="insertPortlet('${result2.prsnlId}','${result2.prsnlKoreanNm}','${result2.url}','${result2.portletWidth}' ,'${result2.portletHeight}')">
|
||||
<img class="pgmThumb" src="${result2.portletImgPath}">
|
||||
<p class="potlNm">${result2.prsnlKoreanNm}</p>
|
||||
</div>
|
||||
</c:forEach>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-lg-6 left" id="insertColumn">
|
||||
<c:forEach var="result" items="${resultList}" varStatus="status">
|
||||
<c:if test="${result.portletSeq%2!=0}">
|
||||
<div class="portlet" style="width:${result.portletWidth}px; height:${result.portletHeight}px;">
|
||||
<div class="portlet-handle" id="${result.prsnlId}">
|
||||
<input id="prsnlId" type="hidden" name="prsnlId" value='<c:out value="${result.prsnlId}" />' maxlength="60" style="width:231px" />
|
||||
<input id="portletSeq" type="hidden" name="portletSeq" value='<c:out value="${result.portletSeq}" />' maxlength="60" style="width:231px" />
|
||||
<c:import url="${result.url}" charEncoding="utf-8">
|
||||
<c:param name="prsnlId" value="${result.prsnlId}"/>
|
||||
</c:import>
|
||||
</div>
|
||||
</div>
|
||||
</c:if>
|
||||
</c:forEach>
|
||||
</div>
|
||||
<div class="col-lg-6 right">
|
||||
<c:forEach var="result" items="${resultList}" varStatus="status">
|
||||
<c:if test="${result.portletSeq%2==0}">
|
||||
<div class="portlet" style="width:${result.portletWidth}px; height:${result.portletHeight}px;">
|
||||
<div class="portlet-handle" id="${result.prsnlId}">
|
||||
<input id="prsnlId" type="hidden" name="prsnlId" value='<c:out value="${result.prsnlId}" />' maxlength="60" style="width:231px" />
|
||||
<input id="portletSeq" type="hidden" name="portletSeq" value='<c:out value="${result.portletSeq}" />' maxlength="60" style="width:231px" />
|
||||
<c:import url="${result.url}" charEncoding="utf-8">
|
||||
<c:param name="prsnlId" value="${result.prsnlId}"/>
|
||||
</c:import>
|
||||
</div>
|
||||
</div>
|
||||
</c:if>
|
||||
</c:forEach>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<!-- main btn : start -->
|
||||
<div class="btn_group">
|
||||
<div>
|
||||
<button type="button" class="btn-function" title="완료" onclick="fn_complete_updt(); return false;" >완료 <!-- 완료 -->
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<!-- main btn : end -->
|
||||
|
||||
<%-- 2025.03.10 나혁제 신디자인 적용
|
||||
<!-- 하단 버튼 -->
|
||||
<div class="btn-Area">
|
||||
<!-- 왼쪽영역-->
|
||||
<div>
|
||||
</div>
|
||||
<!--//왼쪽영역-->
|
||||
<!-- 오른쪽영역-->
|
||||
<div>
|
||||
<button type="button" class="btn-primary" title="등록" onclick="fn_complete_updt(); return false;">완료</button>
|
||||
</div>
|
||||
<!--//오른쪽영역-->
|
||||
</div>
|
||||
<!-- //하단 버튼 -->
|
||||
--%>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form:form>
|
||||
@ -201,26 +201,46 @@
|
||||
</div>
|
||||
<div class="m-gnb">
|
||||
<ul>
|
||||
|
||||
<c:forEach var="resultHead" items="${list_headmenu}" varStatus="status">
|
||||
<li style="width:15%;">
|
||||
<a href="#LINK" onclick="javascript:goMenuPage('<c:out value="${resultHead.menuNo}"/>')" > ${resultHead.menuNm} </a>
|
||||
|
||||
<!-- 2depth menu -->
|
||||
<ul class="depth-2">
|
||||
<c:forEach var="resultLeft" items="${list_menulist}" varStatus="status" >
|
||||
|
||||
<c:if test="${resultHead.menuNo == resultLeft.baseMenuNo}">
|
||||
<li>
|
||||
<a href="javascript:goAllMenuPage('${resultLeft.menuNo}', '${resultHead.menuNo}')"> ${resultLeft.menuNm} </a>
|
||||
</li>
|
||||
|
||||
<c:forEach var="resultLeft1" items="${list_menulist}" varStatus="status1" >
|
||||
<c:if test="${resultHead.menuNo == resultLeft1.upperMenuId}">
|
||||
<li style="font-size: 17px;color: red;font-weight: bold;background-color: aqua;">
|
||||
${resultLeft1.menuNm}
|
||||
</li>
|
||||
|
||||
<c:forEach var="resultLeft2" items="${list_menulist}" varStatus="status2" >
|
||||
<c:if test="${resultLeft1.menuNo == resultLeft2.upperMenuId}">
|
||||
<li>
|
||||
<a href="javascript:goAllMenuPage('${resultLeft2.menuNo}', '${resultHead.menuNo}')"> ${resultLeft2.menuNm} </a>
|
||||
</li>
|
||||
</c:if>
|
||||
</c:forEach>
|
||||
</c:if>
|
||||
|
||||
</c:forEach>
|
||||
|
||||
<%--
|
||||
<c:forEach var="resultLeft2" items="${list_menulist}" varStatus="status2" >
|
||||
|
||||
<c:if test="${resultHead.menuNo == resultLeft.baseMenuNo}">
|
||||
<li>
|
||||
<a href="javascript:goAllMenuPage('${resultLeft.menuNo}', '${resultHead.menuNo}')"> ${resultLeft.menuNm} </a>
|
||||
</li>
|
||||
</c:if>
|
||||
|
||||
</c:forEach>
|
||||
--%>
|
||||
|
||||
|
||||
</ul>
|
||||
</li>
|
||||
</c:forEach>
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
<p class="gnb-close"><button type="button">메뉴 닫기</button></p>
|
||||
|
||||
Loading…
Reference in New Issue
Block a user