포틀릿 기능 추가

This commit is contained in:
urp 2025-11-12 09:30:38 +09:00
parent 886227d8bd
commit e5aee659c4
14 changed files with 1135 additions and 101 deletions

View File

@ -357,6 +357,10 @@ public class MainController
request.getSession().setAttribute("list_headmenu", list_headmenu); request.getSession().setAttribute("list_headmenu", list_headmenu);
request.getSession().setAttribute("list_menulist", list_menulist); request.getSession().setAttribute("list_menulist", list_menulist);
log.info("한번 봅시다. [{}]", list_menulist.toString());
model.addAttribute("list_headmenu", list_headmenu); model.addAttribute("list_headmenu", list_headmenu);
model.addAttribute("list_menulist", list_menulist); model.addAttribute("list_menulist", list_menulist);
model.addAttribute("strMainYn", strMainYn); model.addAttribute("strMainYn", strMainYn);

View File

@ -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";
}

View File

@ -800,6 +800,45 @@ public class ResourceManagerController
return resBody; 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;
}
/** /**

View File

@ -27,6 +27,7 @@ import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest; import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springmodules.validation.commons.DefaultBeanValidator; 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.ConvertUtils;
import com.urpsys.basefront.common.util.RestApiCallUtil; import com.urpsys.basefront.common.util.RestApiCallUtil;
import com.urpsys.basefront.common.egov.util.EgovDateUtil; import com.urpsys.basefront.common.egov.util.EgovDateUtil;
@ -228,6 +229,7 @@ public class ResourceMutilManagerController
LinkedHashMap<String, Object> resBody = new LinkedHashMap<String, Object>(); LinkedHashMap<String, Object> resBody = new LinkedHashMap<String, Object>();
boolean iCheck = true;
// Body Setting Start --------------------------------- // Body Setting Start ---------------------------------
bodyMap.put("vcAssetId",requestMap.get("vcAssetId")); bodyMap.put("vcAssetId",requestMap.get("vcAssetId"));
// Body Setting End --------------------------------- // Body Setting End ---------------------------------
@ -242,8 +244,46 @@ public class ResourceMutilManagerController
{ {
resBody.put("resultCd" , "E" ); resBody.put("resultCd" , "E" );
resBody.put("resultMsg" , "중복된 [자산번호] 입니다." ); resBody.put("resultMsg" , "중복된 [자산번호] 입니다." );
iCheck = false;
}
// 실사용자 정보 가져오기
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 else
{
requestMap.put("inRealChargr", listResult.get(0).get("esntlId") );
}
}
}
if(iCheck)
{ {
requestMap.put("inParentSeq" , "0"); // 상위자산 0 으로 세팅 requestMap.put("inParentSeq" , "0"); // 상위자산 0 으로 세팅
requestMap.put("inRemainPrice" , "0"); requestMap.put("inRemainPrice" , "0");

View File

@ -431,14 +431,13 @@ public class PrsnlPortletCreateManageController
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"); List<Map<String, Object>> resultList2 = (List<Map<String, Object>>)returnMap2.get("resultList");
int portletCnt=(int)returnMap.get("totCnt"); 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);
log.info("<<<<<<<<<<<<<<< /main/mainPage.do >>>>>>>>>>>>>>>");
model.addAttribute("resultList" , resultList );
model.addAttribute("resultList2", resultList2 );
model.addAttribute("portletCnt" , portletCnt );
model.addAttribute("iMaxSeq" , iMaxSeq ); // 2025.11.11 나혁제 정렬최대순서
log.info("<<<<<<<<<<<<<<< /sys/selectPortletCreate2.do >>>>>>>>>>>>>>>"); log.info("<<<<<<<<<<<<<<< /sys/selectPortletCreate2.do >>>>>>>>>>>>>>>");

View 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>

View File

@ -62,6 +62,19 @@
$('#inCate3').val('${resourceManage.inCate3}'); $('#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.searchCondition.value = "1";
document.listForm.pageIndex.value = pageIndex; 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.action = "<c:url value='/rem/SelectResource.do'/>";
document.listForm.submit(); document.listForm.submit();
} }
@ -172,14 +187,55 @@
{ {
document.listForm.action = "<c:url value='/rem/SelectResourceExecl.do'/>"; document.listForm.action = "<c:url value='/rem/SelectResourceExecl.do'/>";
document.listForm.submit(); 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 = 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 --> <!-- javascript warning tag -->
<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript> <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 --> <!-- body_wrap :start -->
<div class="body_wrap"> <div class="body_wrap">
@ -355,6 +444,27 @@
</div> </div>
<!--//검색 :e --> <!--//검색 :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="searchArea single-row" style="border: 0;background: bottom;">
<div class="btnArea"> <div class="btnArea">
@ -370,6 +480,7 @@
<table class="table" summary="<spring:message code="common.summary.list" arguments="자산관리" />"> <table class="table" summary="<spring:message code="common.summary.list" arguments="자산관리" />">
<caption>자산관리 <spring:message code="title.list" /></caption> <caption>자산관리 <spring:message code="title.list" /></caption>
<colgroup> <colgroup>
<col style="width: 3%;" > <!-- 2025.10.23 나혁제 체크박스 -->
<col style="width: 7%;" > <!-- 대분류 --> <col style="width: 7%;" > <!-- 대분류 -->
<col style="width: 7%;" > <!-- 중분류 --> <col style="width: 7%;" > <!-- 중분류 -->
<col style="width: 8%;" > <!-- 소분류 --> <col style="width: 8%;" > <!-- 소분류 -->
@ -385,6 +496,7 @@
</colgroup> </colgroup>
<thead> <thead>
<tr> <tr>
<th><label><input type="checkbox" style="display: block;" name="cbx_chkAll" id="cbx_chkAll" /> </label></th>
<th class="board_th_link">대분류</th> <th class="board_th_link">대분류</th>
<th>중분류</th> <th>중분류</th>
<th>소분류</th> <th>소분류</th>
@ -406,6 +518,7 @@
</c:if> </c:if>
<c:forEach var="resource" items="${resourceList}" varStatus="status"> <c:forEach var="resource" items="${resourceList}" varStatus="status">
<tr> <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.vcCate1}"/></td>
<td><c:out value="${resource.vcCate2}"/></td> <td><c:out value="${resource.vcCate2}"/></td>
<td><c:out value="${resource.vcCate3}"/></td> <td><c:out value="${resource.vcCate3}"/></td>
@ -421,6 +534,8 @@
<td><c:out value="${resource.inMasTarget}"/></td> <td><c:out value="${resource.inMasTarget}"/></td>
<td><c:out value="${resource.dtEos}"/></td> <td><c:out value="${resource.dtEos}"/></td>
<%-- 2025.10.23 나혁제 일괄삭제처리 위한 seq --%>
<input type="hidden" name="hidAssetSeq" id="hidAssetSeq" value="${resource.inAssetSeq}" />
</tr> </tr>
</c:forEach> </c:forEach>
@ -460,6 +575,9 @@
<input type="hidden" name="inAssetSeq" value="0" /> <input type="hidden" name="inAssetSeq" value="0" />
<input type="hidden" name="pageIndex" value="<c:out value='${resourceManage.pageIndex}'/>"/> <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="searchCondition" value="1"/>
<input type="hidden" name="hidEosCheckYn" value="${resourceManage.hidEosCheckYn}"/> <input type="hidden" name="hidEosCheckYn" value="${resourceManage.hidEosCheckYn}"/>
<input type="hidden" name="inAssetSeqMulti" id="inAssetSeqMulti" value="" /> <%-- 2025.10.23 나혁제 일괄삭제처리 --%>
</form:form> </form:form>

View File

@ -376,6 +376,9 @@
var dtEol = $.trim(rows[i].EOL일자 ) +""; var dtEol = $.trim(rows[i].EOL일자 ) +"";
var inPortInfo = $.trim(rows[i].포트정보 ) +""; var inPortInfo = $.trim(rows[i].포트정보 ) +"";
// 2025.10.27 나혁제 실사용자 추가
var vcRealChargrNm = $.trim(rows[i].실사용자명 ) +"";
if( vcAssetId == undefined || vcAssetId == 'undefined' ) vcAssetId = ''; if( vcAssetId == undefined || vcAssetId == 'undefined' ) vcAssetId = '';
if( inCate1 == undefined || inCate1 == 'undefined' ) inCate1 = ''; if( inCate1 == undefined || inCate1 == 'undefined' ) inCate1 = '';
if( inCate2 == undefined || inCate2 == 'undefined' ) inCate2 = ''; if( inCate2 == undefined || inCate2 == 'undefined' ) inCate2 = '';
@ -407,7 +410,7 @@
if( vcChkTrgYn != 'Y') vcChkTrgYn=''; if( vcChkTrgYn != 'Y') vcChkTrgYn='';
// 2025.09.01 나혀겢 자산 추가속성 // 2025.09.01 나혁제 자산 추가속성
if( vcTaskNm == undefined || vcTaskNm == 'undefined' ) vcTaskNm = ''; if( vcTaskNm == undefined || vcTaskNm == 'undefined' ) vcTaskNm = '';
if( vcNrwdMicnStrtDt == undefined || vcNrwdMicnStrtDt == 'undefined' ) vcNrwdMicnStrtDt = ''; if( vcNrwdMicnStrtDt == undefined || vcNrwdMicnStrtDt == 'undefined' ) vcNrwdMicnStrtDt = '';
if( vcNrwdMicnEndDt == undefined || vcNrwdMicnEndDt == 'undefined' ) vcNrwdMicnEndDt = ''; if( vcNrwdMicnEndDt == undefined || vcNrwdMicnEndDt == 'undefined' ) vcNrwdMicnEndDt = '';
@ -421,6 +424,9 @@
if( dtEol == '' ) dtEol = strCurDate; if( dtEol == '' ) dtEol = strCurDate;
if( dtLLicenseEnd == '' ) dtLLicenseEnd = strCurDate; if( dtLLicenseEnd == '' ) dtLLicenseEnd = strCurDate;
// 2025.10.27 나혁제 실사용자 추가
if( vcRealChargrNm == undefined || vcRealChargrNm == 'undefined' ) vcRealChargrNm = '';
var strErrCd = ''; var strErrCd = '';
var strErrMsg = ''; var strErrMsg = '';
@ -602,6 +608,9 @@
, dtEol // 2025.09.01 나혁제 자산 추가속성 , dtEol // 2025.09.01 나혁제 자산 추가속성
, inPortInfo // 2025.09.01 나혁제 자산 추가속성 , inPortInfo // 2025.09.01 나혁제 자산 추가속성
, vcRealChargrNm // 2025.10.28 나혁제 자산 추가속성
, strErrCd , strErrCd
, strErrMsg , strErrMsg
} }

View File

@ -483,7 +483,7 @@
</tr> </tr>
<tr> <tr>
<%-- 2025.09.01 나혁제 불필요한 항목 사젝 --%> <%-- 2025.09.01 나혁제 불필요한 항목 삭제 --%>
<th style="display:none"> 서비스다운 </th> <th style="display:none"> 서비스다운 </th>
<td style="display:none" > <td style="display:none" >
${resultReport.dtDownstartDatetime}~${resultReport.dtDownfinishDatetime} ${resultReport.dtDownstartDatetime}~${resultReport.dtDownfinishDatetime}

View File

@ -634,7 +634,7 @@
<td></td> <td></td>
<th> 서비스 </th> <th> 서비스 </th>
<td> <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"> <c:forEach items="${resultService}" var="result" varStatus="status">
<option value="${result.value}" > ${result.label} </option><!-- 분류코드명 --> <option value="${result.value}" > ${result.label} </option><!-- 분류코드명 -->
</c:forEach> </c:forEach>

View File

@ -657,7 +657,9 @@
<input type="hidden" name="searchKeyword" value="<c:out value='${searchVO.searchKeyword}'/>" > <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="pageIndex" value="<c:out value='${searchVO.pageIndex}'/>" >
<input type="hidden" name="multiUserSelectYn" value="" > <input type="hidden" name="multiUserSelectYn" value="" >
<%-- 2025.10.21 나혁제 오류 발생
<input type="hidden" name="inTask" id="inTask" value="${searchVO.inTask}"/> <input type="hidden" name="inTask" id="inTask" value="${searchVO.inTask}"/>
--%>
<!-- 입력정보 --> <!-- 입력정보 -->
<input type="hidden" id="txIncidentBody" name="txIncidentBody" value="" > <input type="hidden" id="txIncidentBody" name="txIncidentBody" value="" >

View File

@ -120,6 +120,7 @@
console.log('start'); console.log('start');
} }
,update: function(e, ui){ ,update: function(e, ui){
alert('600');
var left = $('.left #portletSeq'); var left = $('.left #portletSeq');
for(var i=0; i<left.length; i++){ for(var i=0; i<left.length; i++){
left[i].value=(i*2)+1 left[i].value=(i*2)+1
@ -128,7 +129,36 @@
for(var i=0; i<right.length; i++){ for(var i=0; i<right.length; i++){
right[i].value=(i*2)+2 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();
} }
}); });
@ -159,29 +189,67 @@
//사용자 포틀릿 추가 //사용자 포틀릿 추가
function insertPortlet(prsnlId, prsnlKoreanNm, url, potlWidth, potlHeight){ function insertPortlet(prsnlId, prsnlKoreanNm, strRealUrl, potlWidth, potlHeight)
{
var vForm=document.prsnlPortletCreateVO; var vForm=document.prsnlPortletCreateVO;
var exPotlId=document.prsnlPortletCreateVO.prsnlId; var exPotlId=document.prsnlPortletCreateVO.prsnlId;
var insertChk=true; var insertChk=true;
var insertCnt=0; var insertCnt=0;
var portletCnt=document.getElementById("portletCnt").value; var portletCnt=document.getElementById("portletCnt").value;
if(exPotlId){
if(exPotlId.length>1){ if(exPotlId)
for(var i=0; i < exPotlId.length; i++){ {
if(prsnlId==exPotlId[i].value){ if(exPotlId.length>1)
alert("이미 해당 포틀릿이 존재합니다."); {
insertChk=false; for(var i=0; i < exPotlId.length; i++)
} {
} if(prsnlId==exPotlId[i].value)
}else{ {
if(prsnlId==exPotlId.value){
alert("이미 해당 포틀릿이 존재합니다."); alert("이미 해당 포틀릿이 존재합니다.");
insertChk=false; insertChk=false;
} }
} }
} }
if(insertChk){ 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+" 포틀릿을 추가 하시겠습니까?")){ if(confirm(prsnlKoreanNm+" 포틀릿을 추가 하시겠습니까?")){
$.ajax({ $.ajax({
url :"<c:url value='/potl/insertUserPortlet.do'/>" url :"<c:url value='/potl/insertUserPortlet.do'/>"
, type: "POST" , type: "POST"
@ -191,20 +259,30 @@
, success : function(data) , success : function(data)
{ {
$.ajax({ $.ajax({
url : url url : strRealUrl
, type: "POST" , type: "POST"
,data: {prsnlId: prsnlId} ,data: {prsnlId: prsnlId}
, success : function(data) , success : function(data)
{ {
var innerHtml=""; var innerHtml = "";
innerHtml+="<div class='portlet' style='width:"+ potlWidth +"px; height:"+ potlHeight +"px;'>"; innerHtml+="<div class='portlet' style='width:"+ potlWidth +"px; height:"+ potlHeight +"px;'>";
innerHtml+="<div class='portlet-handle' onmouseover='test();' id='"+ prsnlId +"'>"; 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='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+="<input id='portletSeq' type='hidden' name='portletSeq' maxlength='60' style='width:231px' />";
innerHtml+=data; innerHtml+=data;
innerHtml+="</div>"; innerHtml+="</div>";
innerHtml+="</div>"; innerHtml+="</div>";
$("#insertColumn").append(innerHtml);
if(potlWidth > 450)
{
$("#insertColumn600").append(innerHtml);
}
else
{
$("#insertColumn450").append(innerHtml);
}
fn_updt_portletSeq();
} }
, error: function() , error: function()
{ {
@ -218,6 +296,10 @@
} }
}); });
} }
} }
} }
@ -247,34 +329,41 @@
} }
} }
//포틀릿 배치 수정 // 포틀릿 배치 수정
function fn_updt_portletSeq() function fn_updt_portletSeq()
{ {
var portletSeqList=""; var portletSeqList="";
var prsnlIdList=""; 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 checkedCount = 0;
var checkedCount2 = 0; var checkedCount2 = 0;
if(checkField) if(checkField)
{ {
alert(checkField.length);
if(checkField.length > 1) if(checkField.length > 1)
{ {
for(var i=0; i < checkField.length; i++) for(var i=0; i < checkField.length; i++)
{ {
portletSeqList += ((checkedCount==0? "" : ",") + checkField[i].value); portletSeqList += ((checkedCount==0 ? "" : ",") + checkField[i].value);
checkedCount++; checkedCount++;
} }
} }
else else
{ {
portletSeqList += ((checkedCount==0? "" : ",") + checkField.value); portletSeqList += ((checkedCount==0 ? "" : ",") + checkField.value);
checkedCount++; checkedCount++;
} }
} }
if(checkField2) if(checkField2)
{ {
alert(checkField2.length);
if(checkField2.length > 1) if(checkField2.length > 1)
{ {
for(var i=0; i < checkField2.length; i++) for(var i=0; i < checkField2.length; i++)
@ -282,11 +371,17 @@
prsnlIdList += ((checkedCount2==0? "" : ",") + checkField2[i].value); prsnlIdList += ((checkedCount2==0? "" : ",") + checkField2[i].value);
checkedCount2++; checkedCount2++;
} }
}else{ }
else
{
prsnlIdList += ((checkedCount2==0? "" : ",") + checkField2.value); prsnlIdList += ((checkedCount2==0? "" : ",") + checkField2.value);
checkedCount2++; checkedCount2++;
} }
} }
alert("portletSeqList=>"+portletSeqList);
alert("prsnlIdList=>"+prsnlIdList);
$.ajax({ $.ajax({
url :"<c:url value='/potl/updatePortletSeq.do'/>" url :"<c:url value='/potl/updatePortletSeq.do'/>"
, type: "POST" , type: "POST"
@ -303,10 +398,14 @@
}); });
} }
function fn_complete_updt(){
function fn_complete_updt()
{
location.href = "<c:url value='/main/mainPage.do'/>"; location.href = "<c:url value='/main/mainPage.do'/>";
} }
function fn_test(){
function fn_test()
{
location.href = "<c:url value='/potl/test.do'/>"; location.href = "<c:url value='/potl/test.do'/>";
} }
@ -358,9 +457,130 @@
</c:forEach> </c:forEach>
</div> </div>
<div class="row"> <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:forEach var="result" items="${resultList}" varStatus="status">
<c:if test="${result.portletSeq%2!=0}">
<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 == 1}">
<div class="portlet" style="width:${result.portletWidth}px; height:${result.portletHeight}px;"> <div class="portlet" style="width:${result.portletWidth}px; height:${result.portletHeight}px;">
<div class="portlet-handle" id="${result.prsnlId}"> <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="prsnlId" type="hidden" name="prsnlId" value='<c:out value="${result.prsnlId}" />' maxlength="60" style="width:231px" />
@ -373,9 +593,10 @@
</c:if> </c:if>
</c:forEach> </c:forEach>
</div> </div>
<div class="col-lg-6 right">
<div class="col-lg-6" id="insertColumn">
<c:forEach var="result" items="${resultList}" varStatus="status"> <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" style="width:${result.portletWidth}px; height:${result.portletHeight}px;">
<div class="portlet-handle" id="${result.prsnlId}"> <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="prsnlId" type="hidden" name="prsnlId" value='<c:out value="${result.prsnlId}" />' maxlength="60" style="width:231px" />
@ -389,6 +610,23 @@
</c:forEach> </c:forEach>
</div> </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" />
<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> </div>
<!-- main btn : start --> <!-- main btn : start -->

View File

@ -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>

View File

@ -201,26 +201,46 @@
</div> </div>
<div class="m-gnb"> <div class="m-gnb">
<ul> <ul>
<c:forEach var="resultHead" items="${list_headmenu}" varStatus="status"> <c:forEach var="resultHead" items="${list_headmenu}" varStatus="status">
<li style="width:15%;"> <li style="width:15%;">
<a href="#LINK" onclick="javascript:goMenuPage('<c:out value="${resultHead.menuNo}"/>')" > ${resultHead.menuNm} </a> <a href="#LINK" onclick="javascript:goMenuPage('<c:out value="${resultHead.menuNo}"/>')" > ${resultHead.menuNm} </a>
<!-- 2depth menu --> <!-- 2depth menu -->
<ul class="depth-2"> <ul class="depth-2">
<c:forEach var="resultLeft" items="${list_menulist}" varStatus="status" > <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}"> <c:if test="${resultHead.menuNo == resultLeft.baseMenuNo}">
<li> <li>
<a href="javascript:goAllMenuPage('${resultLeft.menuNo}', '${resultHead.menuNo}')"> ${resultLeft.menuNm} </a> <a href="javascript:goAllMenuPage('${resultLeft.menuNo}', '${resultHead.menuNo}')"> ${resultLeft.menuNm} </a>
</li> </li>
</c:if> </c:if>
</c:forEach> </c:forEach>
--%>
</ul> </ul>
</li> </li>
</c:forEach> </c:forEach>
</ul> </ul>
</div> </div>
<p class="gnb-close"><button type="button">메뉴 닫기</button></p> <p class="gnb-close"><button type="button">메뉴 닫기</button></p>