인스던트 신청 기능 확장

This commit is contained in:
nhj 2025-12-18 19:49:50 +09:00
parent 56bf5b942b
commit 5b45e527c8
35 changed files with 3826 additions and 190 deletions

View File

@ -12,11 +12,7 @@
<attribute name="gradle_used_by_scope" value="main,test"/> <attribute name="gradle_used_by_scope" value="main,test"/>
</attributes> </attributes>
</classpathentry> </classpathentry>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/openJDK16"> <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-16/"/>
<attributes>
<attribute name="module" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.web.container"/> <classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.web.container"/>
<classpathentry kind="con" path="org.eclipse.buildship.core.gradleclasspathcontainer"> <classpathentry kind="con" path="org.eclipse.buildship.core.gradleclasspathcontainer">
<attributes> <attributes>

View File

@ -146,7 +146,8 @@ public class RestApiCallUtil
String strFullReturnData = returnObj.toString(); String strFullReturnData = returnObj.toString();
// log.info("전체 리턴값 => [{}]", returnObj.toString()); // 개발완료 주석처리
log.info("전체 리턴값 => [{}]", returnObj.toString());
// Map 변환처리 // Map 변환처리
Map<String, Object> returnMap = null; Map<String, Object> returnMap = null;

View File

@ -861,6 +861,254 @@ public class PortletManageController {
return resBody; return resBody;
} }
/**
* SR 처리준수율 통계 포틀릿
* @author urp 인프라본부 나혁제
* 작성일 : 2025.12.10
*/
@RequestMapping(value = "/potl/getSrProPromiseRate.do")
public String getSrProPromiseRate( HttpServletRequest request
, @RequestParam Map<String, Object> commandMap
, ModelMap model) throws Exception
{
log.info(">>>>>>>>>>>>>>> /potl/getSrProPromiseRate.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");
String potlId=(String) commandMap.get("prsnlId");
model.addAttribute("potlId", potlId);
model.addAttribute("potlWidth" , potlWidth);
model.addAttribute("potlHeight", potlHeight);
model.addAttribute("dtCurMonth" , CommonUtil.getKST("yyyy-MM")); // 조회일시
log.info("<<<<<<<<<<<<<<< /potl/getSrProPromiseRate.do >>>>>>>>>>>>>>>");
return "/itms/pot/MySrProPromiseRate";
}
/**
* 월간 SR 처리준수율 현황 통계 조회
* @author urp 인프라본부 나혁제
* 작성일 : 2025.12.09
*/
@ResponseBody
@RequestMapping(value="/potl/getSrProPromiseRateData.do")
public LinkedHashMap<String, Object> getSrProPromiseRateData( @RequestBody LinkedHashMap<String, Object> requestMap
, HttpServletRequest request
, HttpServletResponse response ) throws Exception
{
log.info(">>>>>>>>>>>>>>> /potl/getSrProPromiseRateData.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
// Body Setting Start ---------------------------------
bodyMap.put("strSearchMon" , (String)requestMap.get("strSearchMon"));
// Body Setting End ---------------------------------
// RestApi Call Start ---------------------------------
returnMap = restApiCallUtil.RestApiCall(bodyMap, "/srm/getSrProPromiseRate.do");
// RestApi Call End ---------------------------------
// Return Data Setting Start --------------------------
List<Map<String, Object>> resultList = (List<Map<String, Object>>)returnMap.get("resultList");
// Return Data Setting End --------------------------
resBody.put("resultList" , resultList );
log.info("<<<<<<<<<<<<<<< /potl/getSrProPromiseRateData.do >>>>>>>>>>>>>>>");
return resBody;
}
/**
* SR 만족율 통계 포틀릿
* @author urp 인프라본부 나혁제
* 작성일 : 2025.12.10
*/
@RequestMapping(value = "/potl/getSrStsfdgRatePage.do")
public String getSrStsfdgRatePage( HttpServletRequest request
, @RequestParam Map<String, Object> commandMap
, ModelMap model) throws Exception
{
log.info(">>>>>>>>>>>>>>> /potl/getSrStsfdgRatePage.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");
String potlId=(String) commandMap.get("prsnlId");
model.addAttribute("potlId", potlId);
model.addAttribute("potlWidth" , potlWidth);
model.addAttribute("potlHeight", potlHeight);
model.addAttribute("dtCurMonth" , CommonUtil.getKST("yyyy-MM")); // 조회일시
log.info("<<<<<<<<<<<<<<< /potl/getSrStsfdgRatePage.do >>>>>>>>>>>>>>>");
return "/itms/pot/MySrStsfdgRate";
}
/**
* SR 만족율 통계 통계 조회
* @author urp 인프라본부 나혁제
* 작성일 : 2025.12.09
*/
@ResponseBody
@RequestMapping(value="/potl/getSrStsfdgRate.do")
public LinkedHashMap<String, Object> getSrStsfdgRate( @RequestBody LinkedHashMap<String, Object> requestMap
, HttpServletRequest request
, HttpServletResponse response ) throws Exception
{
log.info(">>>>>>>>>>>>>>> /potl/getSrStsfdgRate.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
// Body Setting Start ---------------------------------
bodyMap.put("strSearchMon" , (String)requestMap.get("strSearchMon"));
// Body Setting End ---------------------------------
// RestApi Call Start ---------------------------------
returnMap = restApiCallUtil.RestApiCall(bodyMap, "/srm/getSrStsfdgRate.do");
// RestApi Call End ---------------------------------
// Return Data Setting Start --------------------------
List<Map<String, Object>> resultList = (List<Map<String, Object>>)returnMap.get("resultList");
// Return Data Setting End --------------------------
resBody.put("resultList" , resultList );
log.info("<<<<<<<<<<<<<<< /potl/getSrStsfdgRate.do >>>>>>>>>>>>>>>");
return resBody;
}
/**
* 보고서 만족율 통계 포틀릿
* @author urp 인프라본부 나혁제
* 작성일 : 2025.12.10
*/
@RequestMapping(value = "/potl/getReportStsfdgRatePage.do")
public String getReportStsfdgRatePage( HttpServletRequest request
, @RequestParam Map<String, Object> commandMap
, ModelMap model) throws Exception
{
log.info(">>>>>>>>>>>>>>> /potl/getReportStsfdgRatePage.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");
String potlId=(String) commandMap.get("prsnlId");
model.addAttribute("potlId", potlId);
model.addAttribute("potlWidth" , potlWidth);
model.addAttribute("potlHeight", potlHeight);
model.addAttribute("dtCurMonth" , CommonUtil.getKST("yyyy-MM")); // 조회일시
log.info("<<<<<<<<<<<<<<< /potl/getReportStsfdgRatePage.do >>>>>>>>>>>>>>>");
return "/itms/pot/MyReportStsfdgRate";
}
/**
* SR 만족율 통계 통계 조회
* @author urp 인프라본부 나혁제
* 작성일 : 2025.12.09
*/
@ResponseBody
@RequestMapping(value="/potl/getReportStsfdgRate.do")
public LinkedHashMap<String, Object> getReportStsfdgRate( @RequestBody LinkedHashMap<String, Object> requestMap
, HttpServletRequest request
, HttpServletResponse response ) throws Exception
{
log.info(">>>>>>>>>>>>>>> /potl/getReportStsfdgRate.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
// Body Setting Start ---------------------------------
bodyMap.put("strSearchMon" , (String)requestMap.get("strSearchMon"));
// Body Setting End ---------------------------------
// RestApi Call Start ---------------------------------
returnMap = restApiCallUtil.RestApiCall(bodyMap, "/srm/getReportStsfdgRate.do");
// RestApi Call End ---------------------------------
// Return Data Setting Start --------------------------
List<Map<String, Object>> resultList = (List<Map<String, Object>>)returnMap.get("resultList");
// Return Data Setting End --------------------------
resBody.put("resultList" , resultList );
log.info("<<<<<<<<<<<<<<< /potl/getReportStsfdgRate.do >>>>>>>>>>>>>>>");
return resBody;
}

View File

@ -312,17 +312,63 @@ public class SvcDeskController
model.addAttribute("serviceList", resultList); // 서비스 정보 model.addAttribute("serviceList", resultList); // 서비스 정보
String dtReqDatetime = CommonUtil.getDatewithSpan(CommonUtil.getKST("yyyyMMddHHmm"), 7, "D", "yyyy-MM-dd HH:mm"); String strReqIncidentNum = CommonUtil.nvl(request.getParameter("vcReqIncidentNum" ));
// 출력데이터
String dtReqDatetime = "";
// 2025.12.17 나혁제 신청화면에서 오는 경우
if(!strReqIncidentNum.equals(""))
{
// Body Setting Start ---------------------------------
bodyMap.put("vcReqIncidentNum", strReqIncidentNum);
// Body Setting End ---------------------------------
// RestApi Call Start ---------------------------------
returnMap = restApiCallUtil.RestApiCall(bodyMap, "/srm/getReqIncidentBySeq.do");
// RestApi Call End ---------------------------------
// 결과값 추출 Start ---------------------------------
Map<String, Object> resultReqIncident = (Map<String, Object>)returnMap.get("resultReqIncident");
// RestApi Call End ---------------------------------
// 조치예정일일
dtReqDatetime = CommonUtil.nvl(resultReqIncident.get("dtCompleteReqDateTime"));
// 조치예정일일
String strRegAtchFileId = CommonUtil.nvl(resultReqIncident.get("atchFileId"));
// 서비스코드
String strInServiceCode = CommonUtil.nvl(resultReqIncident.get("inServiceCode"));
// 인스던트 본문 복호화처리
String strIncidentBody = (String)resultReqIncident.get("txIncidentBody");
String strIncidentBodyDec = CommonUtil.base64decode(strIncidentBody);
model.addAttribute("reqTxIncidentBody" , strIncidentBodyDec ); // 본문내용
model.addAttribute("reqAtchFileId" , strRegAtchFileId ); // 신청첨부파일
model.addAttribute("reqInServiceCode" , strInServiceCode ); // 서비스코드
model.addAttribute("reqVcIncidentTitle" , CommonUtil.nvl(resultReqIncident.get("vcIncidentTitle")) ); // 제목
model.addAttribute("reqInChargeUser", CommonUtil.nvl(resultReqIncident.get("inChargeUser")) ); // 조치예정자 ID
model.addAttribute("reqVcChargeUser", CommonUtil.nvl(resultReqIncident.get("vcChargeUser")) ); // 조치예정자
model.addAttribute("reqRptRejTxComment", CommonUtil.nvl(request.getParameter("reqRptRejTxComment")) ); // 접수의견
}
else
{
dtReqDatetime = CommonUtil.getDatewithSpan(CommonUtil.getKST("yyyyMMddHHmm"), 7, "D", "yyyy-MM-dd HH:mm");
}
log.info(" dtReqDatetime [{}]", dtReqDatetime); log.info(" dtReqDatetime [{}]", dtReqDatetime);
model.addAttribute("dtReceiptDatetime" , CommonUtil.getKST("yyyy-MM-dd HH:mm")); // 접수일시 model.addAttribute("dtReceiptDatetime" , CommonUtil.getKST("yyyy-MM-dd HH:mm")); // 접수일시
model.addAttribute("dtReqDatetime" , dtReqDatetime); // 완료요청일시는 7일 이후 model.addAttribute("dtReqDatetime" , dtReqDatetime); // 완료요청일시는 7일 이후
model.addAttribute("vcReqIncidentNum" , strReqIncidentNum); // 신청번호
TokenInfo tokenInfo = CommonUtil.getTokenInfo(); TokenInfo tokenInfo = CommonUtil.getTokenInfo();
model.addAttribute("inRegUser", tokenInfo.getUniqId()); // 접수자ID model.addAttribute("inRegUser", tokenInfo.getUniqId()); // 접수자ID
model.addAttribute("vcRegUser", tokenInfo.getUserName()); // 접수일시 model.addAttribute("vcRegUser", tokenInfo.getUserName()); // 접수자명
// 2025.12.03 나혁제 파일체크 로직 추가 // 2025.12.03 나혁제 파일체크 로직 추가
// 파일업로드 제한 // 파일업로드 제한
@ -473,6 +519,8 @@ public class SvcDeskController
List<Map<String, Object>> approvalsList = new ArrayList(); List<Map<String, Object>> approvalsList = new ArrayList();
log.info("reqRptRejTxComment [{}]", incidentVo.getReqRptRejTxComment());
if(srApprovalsId != null && srApprovalsId.length > 0) if(srApprovalsId != null && srApprovalsId.length > 0)
{ {
int iSeq=0; int iSeq=0;
@ -499,7 +547,6 @@ public class SvcDeskController
incidentVo.setTxIncidentBody(strBodyEnc); incidentVo.setTxIncidentBody(strBodyEnc);
// 첨부파일 Setting Start ********************** / // 첨부파일 Setting Start ********************** /
// 첨부파일 관련 첨부파일ID 생성 // 첨부파일 관련 첨부파일ID 생성
List<FileVO> _result = null; List<FileVO> _result = null;

View File

@ -0,0 +1,599 @@
package com.urpsys.itmsfront.srm.controller;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.egovframe.rte.fdl.property.EgovPropertyService;
import org.egovframe.rte.ptl.mvc.tags.ui.pagination.PaginationInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
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.EgovFileMngUtil;
import com.urpsys.basefront.common.service.CommonService;
import com.urpsys.basefront.domain.FileVO;
import com.urpsys.basefront.domain.TokenInfo;
import com.urpsys.basefront.config.EgovMessageSource;
import com.urpsys.itmsfront.srm.domain.IncidentReqVo;
import com.urpsys.itmsfront.srm.domain.IncidentVo;
import com.urpsys.itmsfront.srm.domain.SvcDeskListVo;
import com.urpsys.itmsfront.srm.domain.SvcDeskReqListVo;
import lombok.extern.slf4j.Slf4j;
/**
* 서비스 데스크 신청 관련 컨트롤러 클래스 (게시판생성관리-enterprise)
* @author URP 인프라본부 나혁제
* @since 2025.12.15
* @version 1.0
* @see
*
* <pre>
* << 개정이력(Modification Information) >>
*
* 수정일 수정자 수정내용
* ---------- -------- ---------------------------
* 2025.12.15 나혁제 최초 생성
*
* </pre>
*
*/
@Slf4j
@Controller
public class SvcDeskReqController
{
/** EgovMessageSource */
@Resource(name="egovMessageSource")
EgovMessageSource egovMessageSource;
/* 파일처리 */
@Resource(name="EgovFileMngUtil")
private EgovFileMngUtil fileUtil;
/** EgovPropertyService */
@Resource(name = "propertiesService")
protected EgovPropertyService propertyService;
@Resource(name="RestApiCallUtil")
private RestApiCallUtil restApiCallUtil;
@Autowired
CommonService commonService;
/**
* 서비스 데스크 인스던트 목록을 조회한다.
* @author urp 인프라본부 나혁제
* 작성일 : 2025.02.08
*/
@RequestMapping("/srm/searchReqIncident.do")
public String searchReqIncident( @ModelAttribute("searchVO") SvcDeskReqListVo searchVO
, HttpServletRequest request
, HttpServletResponse response
, ModelMap model ) throws Exception
{
log.info(">>>>>>>>>>>>>>> /srm/searchReqIncident.do <<<<<<<<<<<<<<<");
// api in/out map 정의
Map<String, Object> bodyMap = new LinkedHashMap();
Map<String, Object> returnMap = new LinkedHashMap();
/** paging */
PaginationInfo paginationInfo = new PaginationInfo();
paginationInfo.setCurrentPageNo (searchVO.getPageIndex());
paginationInfo.setRecordCountPerPage(searchVO.getPageUnit());
paginationInfo.setPageSize (searchVO.getPageSize());
searchVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
searchVO.setLastIndex(paginationInfo.getLastRecordIndex());
searchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
// Body Setting Start ---------------------------------
bodyMap = ConvertUtils.convertToMapAll(searchVO);
// Body Setting End ---------------------------------
// RestApi Call Start ---------------------------------
returnMap = restApiCallUtil.RestApiCall(bodyMap, "/srm/searchReqIncident.do");
// RestApi Call End ---------------------------------
// Return Data Setting Start --------------------------
List<Map<String, Object>> resultList = (List<Map<String, Object>>)returnMap.get("resultList");
int totCnt = (int)returnMap.get("totCnt");
// Return Data Setting End --------------------------
paginationInfo.setTotalRecordCount(totCnt);
model.addAttribute("resultList" , resultList);
model.addAttribute("paginationInfo" , paginationInfo);
model.addAttribute("message" , egovMessageSource.getMessage("success.common.select"));
log.info("<<<<<<<<<<<<<<< /srm/searchReqIncident.do >>>>>>>>>>>>>>>");
return "uritms-tiles2/srm/SvcDeskReqList";
}
/**
* 서비스 데스크 인스던트 신청 상세조회 화면으로 이동한다.
* @author URP 인프라본부 나혁제
* 작성일 : 2025.12.16
*/
@RequestMapping(value = "/srm/getReqIncidentBySeq.do")
public String getReqIncidentBySeq( @ModelAttribute("SvcDeskListVo") SvcDeskReqListVo svcDeskReqListVo
, @ModelAttribute("searchVO") SvcDeskReqListVo searchVO
, HttpServletRequest request
, HttpServletResponse response
, ModelMap model) throws Exception
{
log.info(">>>>>>>>>>>>>>> /srm/getReqIncidentBySeq.do <<<<<<<<<<<<<<<");
// api in/out map 정의
Map<String, Object> bodyMap = new LinkedHashMap();
Map<String, Object> returnMap = new LinkedHashMap();
String vcReqIncidentNum = CommonUtil.nvl(svcDeskReqListVo.getVcReqIncidentNum());
// Body Setting Start ---------------------------------
bodyMap.put("vcReqIncidentNum", vcReqIncidentNum);
// Body Setting End ---------------------------------
// RestApi Call Start ---------------------------------
returnMap = restApiCallUtil.RestApiCall(bodyMap, "/srm/getReqIncidentBySeq.do");
// RestApi Call End ---------------------------------
// 결과값 추출 Start ---------------------------------
Map<String, Object> resultReqIncident = (Map<String, Object>)returnMap.get("resultReqIncident");
String strChangeYn = (String)returnMap.get("strChangeYn");
String strCompletedYn = (String)returnMap.get("strCompletedYn");
log.info("strChangeYn [{}]", strChangeYn );
log.info("strCompletedYn [{}]", strCompletedYn );
// RestApi Call End ---------------------------------
// 인스던트 본문 복호화처리
String strIncidentBody = (String)resultReqIncident.get("txIncidentBody");
String strIncidentBodyDec = CommonUtil.base64decode(strIncidentBody);
resultReqIncident.put("txIncidentBody", strIncidentBodyDec);
model.addAttribute("strChangeYn" , strChangeYn ); // 수정/삭제 가능여부
model.addAttribute("strCompletedYn" , strCompletedYn ); // 처리완료
model.addAttribute("resultReqIncident" , resultReqIncident ); // Map
// 접수정보 추출
String strIncidentSeq = CommonUtil.nvl(resultReqIncident.get("inIncidentSeq"));
if(!strIncidentSeq.equals(""))
{
int inIncidentSeq = CommonUtil.stoi(strIncidentSeq);
// Body Setting Start ---------------------------------
bodyMap.put("inIncidentSeq", inIncidentSeq);
// Body Setting End ---------------------------------
// RestApi Call Start ---------------------------------
returnMap = restApiCallUtil.RestApiCall(bodyMap, "/srm/getIncidentBySeq.do");
// RestApi Call End ---------------------------------
// 결과값 추출 Start ---------------------------------
Map<String, Object> resultIncident = (Map<String, Object>)returnMap.get("resultIncident");
model.addAttribute("resultIncident" , resultIncident ); // Map
model.addAttribute("bRptYn", "Y");
}
else
{
TokenInfo tokenInfo = CommonUtil.getTokenInfo();
model.addAttribute("inReqUser", tokenInfo.getUniqId()); // 접수자ID
model.addAttribute("vcReqUser", tokenInfo.getUserName()); // 접수일시
// 조치예정자만 접수권한 부여
if(tokenInfo.getUniqId().equals(resultReqIncident.get("inChargeUser")))
{
model.addAttribute("bRptAuth", "Y");
}
}
log.info("<<<<<<<<<<<<<<< /srm/getReqIncidentBySeq.do >>>>>>>>>>>>>>>");
return "uritms-tiles2/srm/SvcDeskReqDetail";
}
/**
* 서비스 데스크 인스던트 신청 등록 화면으로 이동한다.
* @author URP 인프라본부 나혁제
* 작성일 : 2025.12.15
*/
@PostMapping(value = "/srm/insertViewReqIncident.do")
public String insertViewIncident( @ModelAttribute("searchVO") SvcDeskReqListVo searchVO
, HttpServletRequest request
, HttpServletResponse response
, ModelMap model) throws Exception
{
log.info(">>>>>>>>>>>>>>> /srm/insertViewReqIncident.do <<<<<<<<<<<<<<<");
// api in/out map 정의
Map<String, Object> bodyMap = new LinkedHashMap();
Map<String, Object> returnMap = new LinkedHashMap();
// 서비스 정보 추출
// RestApi Call Start ---------------------------------
returnMap = restApiCallUtil.RestApiCall(bodyMap, "/srm/getServiceCombo.do");
// RestApi Call End ---------------------------------
List<Map<String, Object>> resultList = (List<Map<String, Object>>)returnMap.get("resultList");
model.addAttribute("serviceList", resultList); // 서비스 정보
String dtCompleteReqDateTime = CommonUtil.getDatewithSpan(CommonUtil.getKST("yyyyMMddHHmm"), 7, "D", "yyyy-MM-dd HH:mm");
log.info(" dtCompleteReqDateTime [{}]", dtCompleteReqDateTime);
model.addAttribute("dtReqDateTime" , CommonUtil.getKST("yyyy-MM-dd HH:mm")); // 신청일시
model.addAttribute("dtCompleteReqDateTime" , dtCompleteReqDateTime); // 완료요청일시는 7일 이후
TokenInfo tokenInfo = CommonUtil.getTokenInfo();
model.addAttribute("inReqUser", tokenInfo.getUniqId()); // 접수자ID
model.addAttribute("vcReqUser", tokenInfo.getUserName()); // 접수일시
// 2025.12.03 나혁제 파일체크 로직 추가
// 파일업로드 제한
String whiteListFileUploadExtensions = propertyService.getString("Globals.fileUpload.Extensions");
String fileUploadMaxSize = propertyService.getString("Globals.fileUpload.maxSize");
model.addAttribute("fileUploadExtensions", whiteListFileUploadExtensions);
model.addAttribute("fileUploadMaxSize" , fileUploadMaxSize);
log.info("<<<<<<<<<<<<<<< /srm/insertViewReqIncident.do >>>>>>>>>>>>>>>");
return "uritms-tiles2/srm/SvcDeskReqInsert";
}
/**
* 서비스 데스크 인스던트 신청 수정 화면으로 이동한다.
* @author URP 인프라본부 나혁제
* 작성일 : 2025.12.16
*/
@PostMapping(value = "/srm/updateViewReqIncident.do")
public String updateViewReqIncident( @ModelAttribute("SvcDeskListVo") SvcDeskReqListVo svcDeskReqListVo
, @ModelAttribute("searchVO") SvcDeskListVo searchVO
, HttpServletRequest request
, HttpServletResponse response
, ModelMap model) throws Exception
{
log.info(">>>>>>>>>>>>>>> /srm/updateViewReqIncident.do <<<<<<<<<<<<<<<");
// api in/out map 정의
Map<String, Object> bodyMap = new LinkedHashMap();
Map<String, Object> returnMap = new LinkedHashMap();
String vcReqIncidentNum = CommonUtil.nvl(svcDeskReqListVo.getVcReqIncidentNum());
// Body Setting Start ---------------------------------
bodyMap.put("vcReqIncidentNum", vcReqIncidentNum);
// Body Setting End ---------------------------------
// RestApi Call Start ---------------------------------
returnMap = restApiCallUtil.RestApiCall(bodyMap, "/srm/getReqIncidentBySeq.do");
// RestApi Call End ---------------------------------
// 결과값 추출 Start ---------------------------------
Map<String, Object> resultReqIncident = (Map<String, Object>)returnMap.get("resultReqIncident");
// RestApi Call End ---------------------------------
// 인스던트 본문 복호화처리
String strIncidentBody = (String)resultReqIncident.get("txIncidentBody");
String strIncidentBodyDec = CommonUtil.base64decode(strIncidentBody);
resultReqIncident.put("txIncidentBody", strIncidentBodyDec);
model.addAttribute("resultReqIncident" , resultReqIncident ); // Map
// 서비스 정보 추출
// RestApi Call Start ---------------------------------
returnMap = restApiCallUtil.RestApiCall(bodyMap, "/srm/getServiceCombo.do");
// RestApi Call End ---------------------------------
List<Map<String, Object>> resultList = (List<Map<String, Object>>)returnMap.get("resultList");
model.addAttribute("serviceList", resultList); // 서비스 정보
// 2025.12.03 나혁제 파일체크 로직 추가
// 파일업로드 제한
String whiteListFileUploadExtensions = propertyService.getString("Globals.fileUpload.Extensions");
String fileUploadMaxSize = propertyService.getString("Globals.fileUpload.maxSize");
model.addAttribute("fileUploadExtensions", whiteListFileUploadExtensions);
model.addAttribute("fileUploadMaxSize" , fileUploadMaxSize);
log.info("<<<<<<<<<<<<<<< /srm/updateViewReqIncident.do >>>>>>>>>>>>>>>");
return "uritms-tiles2/srm/SvcDeskReqUpdate";
}
/**
* 서비스데스크 인스던트 신청 등록 처리를 한다.
* @author URP 인프라본부 나혁제
* 작성일 : 2025.12.15
*/
@ResponseBody
@RequestMapping(value="/srm/addReqIncident.do")
public LinkedHashMap<String, Object> addReqIncident( final @ModelAttribute("incidentReqVo") IncidentReqVo incidentReqVo
, final MultipartHttpServletRequest multiRequest
, HttpServletRequest request
, HttpServletResponse response ) throws Exception
{
log.info(">>>>>>>>>>>>>>> /srm/addReqIncident.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 strBody = incidentReqVo.getTxIncidentBody();
String strBodyEnc = CommonUtil.base64encode(strBody);
log.info("strBody [{}]", strBody);
log.info("strBodyEnc [{}]", strBodyEnc);
incidentReqVo.setTxIncidentBody(strBodyEnc);
// 첨부파일 Setting Start ********************** /
// 첨부파일 관련 첨부파일ID 생성
List<FileVO> _result = null;
String _atchFileId = "";
final List<MultipartFile> files = multiRequest.getFiles("file_1");
if ( (!files.isEmpty())
&& (files.get(0).getSize()>0) )
{
_result = fileUtil.parseFileInf(files, "INCID_", 0, "", "");
_atchFileId = _result.get(0).getAtchFileId(); // 파일이 생성되고나면 생성된 첨부파일 ID를 리턴한다.
incidentReqVo.setAtchFileId(_atchFileId);
}
List<Map<String, Object>> fileList = new ArrayList();
// 파일저장 정보 세팅
if(_result != null)
{
for(FileVO fileVo : _result)
{
log.info("file fileVo : {}", fileVo.toString());
Map<String, Object> fileMap = ConvertUtils.convertToMap(fileVo);
fileList.add(fileMap);
}
}
// 첨부파일 Setting End **********************/
// Body Setting Start ---------------------------------
bodyMap.put("incidentReqVo" , ConvertUtils.convertToMapAll(incidentReqVo));
bodyMap.put("fileList" , fileList);
// Body Setting End ---------------------------------
// RestApi Call Start ---------------------------------
returnMap = restApiCallUtil.RestApiCall(bodyMap, "/srm/addReqIncident.do");
// RestApi Call End ---------------------------------
resBody.put("resultCd" , returnMap.get("resultCd") );
resBody.put("resultMsg" , returnMap.get("resultMsg") );
log.info("<<<<<<<<<<<<<<< /srm/addReqIncident.do >>>>>>>>>>>>>>>");
return resBody;
}
/**
* 서비스데스크 인스던트 신청 수정 처리를 한다.
* @author URP 인프라본부 나혁제
* 작성일 : 2025.12.17
*/
@ResponseBody
@RequestMapping(value="/srm/updateReqIncident.do")
public LinkedHashMap<String, Object> updateReqIncident( final @ModelAttribute("incidentReqVo") IncidentReqVo incidentReqVo
, final MultipartHttpServletRequest multiRequest
, HttpServletRequest request
, HttpServletResponse response ) throws Exception
{
log.info(">>>>>>>>>>>>>>> /srm/updateReqIncident.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 strBody = incidentReqVo.getTxIncidentBody();
String strBodyEnc = CommonUtil.base64encode(strBody);
log.info("strBody [{}]", strBody);
log.info("strBodyEnc [{}]", strBodyEnc);
incidentReqVo.setTxIncidentBody(strBodyEnc);
// 첨부파일 Setting Start ********************** /
// 첨부파일 관련 첨부파일ID 생성
String _atchFileId = incidentReqVo.getAtchFileId();
final List<MultipartFile> files = multiRequest.getFiles("file_1");
List<Map<String, Object>> fileList = new ArrayList();
if ( (!files.isEmpty())
&& (files.get(0).getSize()>0) )
{
List<FileVO> _result = null;
if (_atchFileId==null || "".equals(_atchFileId) )
{
_result = fileUtil.parseFileInf(files, "INCID_", 0, _atchFileId, "");
_atchFileId = _result.get(0).getAtchFileId();
incidentReqVo.setAtchFileId(_atchFileId);
incidentReqVo.setAtchFileInUpGb("I"); // 새로만들기
}
else
{
FileVO fvo = new FileVO();
fvo.setAtchFileId(_atchFileId);
// Body Setting Start ---------------------------------
bodyMap = ConvertUtils.convertToMap(fvo);
// Body Setting End ---------------------------------
// RestApi Call Start ---------------------------------
returnMap = restApiCallUtil.RestApiCall(bodyMap, "/cmm/getMaxFileSN.do");
// RestApi Call End ---------------------------------
int _cnt = (int)returnMap.get("result");
_result = fileUtil.parseFileInf(files, "INCID_", _cnt, _atchFileId, "");
incidentReqVo.setAtchFileInUpGb("U"); // 기존자료변경
}
// 파일저장 정보 세팅
for(FileVO inMap : _result)
{
Map<String, Object> fileMap = ConvertUtils.convertToMap(inMap);
fileList.add(fileMap);
}
}
// 첨부파일 Setting End ********************** /
// Body Setting Start ---------------------------------
bodyMap.put("incidentReqVo" , ConvertUtils.convertToMapAll(incidentReqVo));
bodyMap.put("fileList" , fileList);
// Body Setting End ---------------------------------
// RestApi Call Start ---------------------------------
returnMap = restApiCallUtil.RestApiCall(bodyMap, "/srm/updateReqIncident.do");
// RestApi Call End ---------------------------------
resBody.put("resultCd" , returnMap.get("resultCd") );
resBody.put("resultMsg" , returnMap.get("resultMsg") );
log.info("<<<<<<<<<<<<<<< /rem/updateIncident.do >>>>>>>>>>>>>>>");
return resBody;
}
/**
* 서비스데스크 인스던트 신청정보 삭제 처리를 한다.
* @author urp 인프라본부 나혁제
* 작성일 : 2025.12.18
*/
@ResponseBody
@RequestMapping(value="/srm/deleteReqIncident.do")
public LinkedHashMap<String, Object> deleteReqIncident( final @ModelAttribute("incidentReqVo") IncidentReqVo incidentReqVo
, HttpServletRequest request
, HttpServletResponse response ) throws Exception
{
log.info(">>>>>>>>>>>>>>> /srm/deleteReqIncident.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
// Body Setting Start ---------------------------------
bodyMap.put("incidentReqVo" , ConvertUtils.convertToMapAll(incidentReqVo));
// Body Setting End ---------------------------------
// RestApi Call Start ---------------------------------
returnMap = restApiCallUtil.RestApiCall(bodyMap, "/srm/deleteReqIncident.do");
// RestApi Call End ---------------------------------
resBody.put("resultCd" , returnMap.get("resultCd") );
resBody.put("resultMsg" , returnMap.get("resultMsg") );
log.info("<<<<<<<<<<<<<<< /srm/deleteReqIncident.do >>>>>>>>>>>>>>>");
return resBody;
}
/**
* 인스던트 신청정보 반려 처리를 한다.
* @author URP 인프라본부 나혁제
* 작성일 : 2025.12.18
*/
@ResponseBody
@RequestMapping(value="/srm/rejectReqIncident.do")
public LinkedHashMap<String, Object> rejectReqIncident( HttpServletRequest request
, HttpServletResponse response ) throws Exception
{
log.info(">>>>>>>>>>>>>>> /srm/rejectReqReqIncident.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
TokenInfo tokenInfo = CommonUtil.getTokenInfo();
// Body Setting Start ---------------------------------
bodyMap.put("reqRptRejTxComment" , CommonUtil.getData(request, "reqRptRejTxComment") );
bodyMap.put("vcReqIncidentNum" , CommonUtil.getData(request, "vcReqIncidentNum" ) );
// Body Setting End ---------------------------------
// RestApi Call Start ---------------------------------
returnMap = restApiCallUtil.RestApiCall(bodyMap, "/srm/rejectReqIncident.do");
// RestApi Call End ---------------------------------
resBody.put("resultCd" , returnMap.get("resultCd") );
resBody.put("resultMsg" , returnMap.get("resultMsg") );
log.info("<<<<<<<<<<<<<<< /srm/rejectReqReqIncident.do >>>>>>>>>>>>>>>");
return resBody;
}
}

View File

@ -0,0 +1,136 @@
package com.urpsys.itmsfront.srm.domain;
/**
* 서비스데스크 인스던트 신청 처리 model 클래스를 정의한다.
* @author urp 인프라본부 나혁제
* @since 2025.12.15
* @version 1.0
* @see
*
* <pre>
* << 개정이력(Modification Information) >>
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2025.12.15 나혁제 최초 생성
*
* </pre>
*/
public class IncidentReqVo
{
private String vcReqIncidentNum ;
private String inServiceCode ;
private String vcIncidentTitle ;
private String txIncidentBody ;
private String inReqUser ;
private String vcReqUser ;
private String inChargeUser ;
private String vcChargeUser ;
private String dtReqDateTime ;
private String dtCompleteReqDateTime ;
private String atchFileId ;
private String procStsfdg ;
private String procOpin ;
private String inIncidentSeq ;
private String atchFileInUpGb ;
public String getVcReqIncidentNum() {
return vcReqIncidentNum;
}
public void setVcReqIncidentNum(String vcReqIncidentNum) {
this.vcReqIncidentNum = vcReqIncidentNum;
}
public String getInServiceCode() {
return inServiceCode;
}
public void setInServiceCode(String inServiceCode) {
this.inServiceCode = inServiceCode;
}
public String getVcIncidentTitle() {
return vcIncidentTitle;
}
public void setVcIncidentTitle(String vcIncidentTitle) {
this.vcIncidentTitle = vcIncidentTitle;
}
public String getTxIncidentBody() {
return txIncidentBody;
}
public void setTxIncidentBody(String txIncidentBody) {
this.txIncidentBody = txIncidentBody;
}
public String getInReqUser() {
return inReqUser;
}
public void setInReqUser(String inReqUser) {
this.inReqUser = inReqUser;
}
public String getVcReqUser() {
return vcReqUser;
}
public void setVcReqUser(String vcReqUser) {
this.vcReqUser = vcReqUser;
}
public String getInChargeUser() {
return inChargeUser;
}
public void setInChargeUser(String inChargeUser) {
this.inChargeUser = inChargeUser;
}
public String getVcChargeUser() {
return vcChargeUser;
}
public void setVcChargeUser(String vcChargeUser) {
this.vcChargeUser = vcChargeUser;
}
public String getDtReqDateTime() {
return dtReqDateTime;
}
public void setDtReqDateTime(String dtReqDateTime) {
this.dtReqDateTime = dtReqDateTime;
}
public String getDtCompleteReqDateTime() {
return dtCompleteReqDateTime;
}
public void setDtCompleteReqDateTime(String dtCompleteReqDateTime) {
this.dtCompleteReqDateTime = dtCompleteReqDateTime;
}
public String getAtchFileId() {
return atchFileId;
}
public void setAtchFileId(String atchFileId) {
this.atchFileId = atchFileId;
}
public String getProcStsfdg() {
return procStsfdg;
}
public void setProcStsfdg(String procStsfdg) {
this.procStsfdg = procStsfdg;
}
public String getProcOpin() {
return procOpin;
}
public void setProcOpin(String procOpin) {
this.procOpin = procOpin;
}
public String getInIncidentSeq() {
return inIncidentSeq;
}
public void setInIncidentSeq(String inIncidentSeq) {
this.inIncidentSeq = inIncidentSeq;
}
public String getAtchFileInUpGb() {
return atchFileInUpGb;
}
public void setAtchFileInUpGb(String atchFileInUpGb) {
this.atchFileInUpGb = atchFileInUpGb;
}
}

View File

@ -1,7 +1,5 @@
package com.urpsys.itmsfront.srm.domain; package com.urpsys.itmsfront.srm.domain;
import com.urpsys.basefront.domain.ComDefaultVO;
/** /**
* 서비스데스크 인스던트 처리 model 클래스를 정의한다. * 서비스데스크 인스던트 처리 model 클래스를 정의한다.
* @author urp 인프라본부 나혁제 * @author urp 인프라본부 나혁제
@ -53,6 +51,9 @@ public class IncidentVo
private String dtServiceStartDatetime ; private String dtServiceStartDatetime ;
private String atchFileId ; private String atchFileId ;
private String atchFileInUpGb ; private String atchFileInUpGb ;
private String vcReqIncidentNum ; // 2025.12.17 나혁제 신청번호
private String reqAtchFileId ; // 2025.12.17 나혁제 신청첨부파일
private String reqRptRejTxComment ; // 2025.12.17 나혁제 접수의견
public String getInIncidentSeq() { public String getInIncidentSeq() {
return inIncidentSeq; return inIncidentSeq;
@ -246,6 +247,24 @@ public class IncidentVo
public void setAtchFileInUpGb(String atchFileInUpGb) { public void setAtchFileInUpGb(String atchFileInUpGb) {
this.atchFileInUpGb = atchFileInUpGb; this.atchFileInUpGb = atchFileInUpGb;
} }
public String getVcReqIncidentNum() {
return vcReqIncidentNum;
}
public void setVcReqIncidentNum(String vcReqIncidentNum) {
this.vcReqIncidentNum = vcReqIncidentNum;
}
public String getReqAtchFileId() {
return reqAtchFileId;
}
public void setReqAtchFileId(String reqAtchFileId) {
this.reqAtchFileId = reqAtchFileId;
}
public String getReqRptRejTxComment() {
return reqRptRejTxComment;
}
public void setReqRptRejTxComment(String reqRptRejTxComment) {
this.reqRptRejTxComment = reqRptRejTxComment;
}

View File

@ -0,0 +1,64 @@
package com.urpsys.itmsfront.srm.domain;
import com.urpsys.basefront.domain.ComDefaultVO;
/**
* 서비스데스크 신청정보 조회조건 model 클래스를 정의한다.
* @author URP 인프라본부 나혁제
* @since 2025.12.15
* @version 1.0
* @see
*
* <pre>
* << 개정이력(Modification Information) >>
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2025.12.15 나혁제 최초 생성
*
* </pre>
*/
public class SvcDeskReqListVo extends ComDefaultVO
{
private String complete;
private String incidentReqNum;
private String reqUser;
private String incidentTitle;
private String vcReqIncidentNum;
public String getComplete() {
return complete;
}
public void setComplete(String complete) {
this.complete = complete;
}
public String getReqUser() {
return reqUser;
}
public void setReqUser(String reqUser) {
this.reqUser = reqUser;
}
public String getIncidentTitle() {
return incidentTitle;
}
public void setIncidentTitle(String incidentTitle) {
this.incidentTitle = incidentTitle;
}
public String getIncidentReqNum() {
return incidentReqNum;
}
public void setIncidentReqNum(String incidentReqNum) {
this.incidentReqNum = incidentReqNum;
}
public String getVcReqIncidentNum() {
return vcReqIncidentNum;
}
public void setVcReqIncidentNum(String vcReqIncidentNum) {
this.vcReqIncidentNum = vcReqIncidentNum;
}
}

View File

@ -36,7 +36,7 @@ import lombok.extern.slf4j.Slf4j;
/** /**
* 개인화메뉴관리 controller 클래스 * 개인화메뉴관리 controller 클래스
* @author 정보기술연구소 나혁제 * @author URP 인프라본부 나혁제
* @since 2025.03.06 * @since 2025.03.06
* @version 1.0 * @version 1.0
* @see * @see
@ -46,7 +46,7 @@ import lombok.extern.slf4j.Slf4j;
* *
* 수정일 수정자 수정내용 * 수정일 수정자 수정내용
* ---------- -------- --------------------------- * ---------- -------- ---------------------------
* 2025.03.06 권오 최초 생성 * 2025.03.06 나혁 최초 생성
* *
* </pre> * </pre>
* *
@ -82,8 +82,8 @@ public class PrsnlPortletManageController
/** /**
* 개인화메뉴 목록을 조회한다. * 개인화메뉴 목록을 조회한다.
* @author 정보기술연구소 권오 * @author URP 인프라본부 나혁
* 작성일 : 2022.12.16 * 작성일 : 2025.03.06
*/ */
@RequestMapping("/sys/selectPortletManageList.do") @RequestMapping("/sys/selectPortletManageList.do")
public String selectPortletManageList(@ModelAttribute("searchVO") PrsnlPortletManageVO prsnlPortletManageVO public String selectPortletManageList(@ModelAttribute("searchVO") PrsnlPortletManageVO prsnlPortletManageVO
@ -91,6 +91,7 @@ public class PrsnlPortletManageController
{ {
log.info(">>>>>>>>>>>>>>> /sys/selectPortletManageList.do <<<<<<<<<<<<<<<"); log.info(">>>>>>>>>>>>>>> /sys/selectPortletManageList.do <<<<<<<<<<<<<<<");
MemberVO memberVo = (MemberVO)SecurityContextHolder.getContext().getAuthentication().getPrincipal();
// Body Setting Start ------------------------------- // Body Setting Start -------------------------------
prsnlPortletManageVO.setPageUnit(propertyService.getInt("pageUnit")); prsnlPortletManageVO.setPageUnit(propertyService.getInt("pageUnit"));
@ -123,6 +124,15 @@ public class PrsnlPortletManageController
model.addAttribute("resultCnt" , totCnt); model.addAttribute("resultCnt" , totCnt);
model.addAttribute("paginationInfo" , paginationInfo); model.addAttribute("paginationInfo" , paginationInfo);
// 2025.12.08 나혁제 TEST1 삭제권한
if(memberVo.getTokenInfo().getStrMEM_ID().equals("TEST1"))
{
model.addAttribute("delAuthYn" , "Y");
}
else
{
model.addAttribute("delAuthYn" , "N");
}
log.info("<<<<<<<<<<<<<<< /sys/selectPortletManageList.do >>>>>>>>>>>>>>>"); log.info("<<<<<<<<<<<<<<< /sys/selectPortletManageList.do >>>>>>>>>>>>>>>");
@ -131,8 +141,8 @@ public class PrsnlPortletManageController
/** /**
* 개인화메뉴를 등록한다. * 개인화메뉴를 등록한다.
* @author 정보기술연구소 권오 * @author URP 인프라본부 나혁
* 작성일 : 2022.12.19 * 작성일 : 2025.03.06
*/ */
@RequestMapping("/sys/insertPrsnlPortlet.do") @RequestMapping("/sys/insertPrsnlPortlet.do")
public String insertPrsnlPortlet(final MultipartHttpServletRequest multiRequest public String insertPrsnlPortlet(final MultipartHttpServletRequest multiRequest
@ -229,8 +239,8 @@ public class PrsnlPortletManageController
/** /**
* 개인화메뉴 정보를 조회한다. * 개인화메뉴 정보를 조회한다.
* @author 정보기술연구소 권오 * @author URP 인프라본부 나혁
* 작성일 : 2022.12.19 * 작성일 : 2025.03.06
*/ */
@RequestMapping("/sys/inqirePrsnlPortlet.do") @RequestMapping("/sys/inqirePrsnlPortlet.do")
public String inqirePrsnlPortlet(@ModelAttribute("searchVO") PrsnlPortletManageVO searchVO public String inqirePrsnlPortlet(@ModelAttribute("searchVO") PrsnlPortletManageVO searchVO
@ -238,6 +248,7 @@ public class PrsnlPortletManageController
{ {
log.info(">>>>>>>>>>>>>>> /sys/inqirePrsnlPortlet.do <<<<<<<<<<<<<<<"); log.info(">>>>>>>>>>>>>>> /sys/inqirePrsnlPortlet.do <<<<<<<<<<<<<<<");
MemberVO memberVo = (MemberVO)SecurityContextHolder.getContext().getAuthentication().getPrincipal();
// Body Setting Start --------------------------------- // Body Setting Start ---------------------------------
Map<String, Object> bodyMap = ConvertUtils.convertToMapAll(searchVO); Map<String, Object> bodyMap = ConvertUtils.convertToMapAll(searchVO);
@ -257,6 +268,17 @@ public class PrsnlPortletManageController
model.addAttribute("fileUploadExtensions", whiteListFileUploadExtensions); model.addAttribute("fileUploadExtensions", whiteListFileUploadExtensions);
model.addAttribute("fileUploadMaxSize" , fileUploadMaxSize); model.addAttribute("fileUploadMaxSize" , fileUploadMaxSize);
// 2025.12.08 나혁제 TEST1 삭제권한
if(memberVo.getTokenInfo().getStrMEM_ID().equals("TEST1"))
{
model.addAttribute("delAuthYn" , "Y");
}
else
{
model.addAttribute("delAuthYn" , "N");
}
log.info("<<<<<<<<<<<<<<< /sys/inqirePrsnlPortlet.do >>>>>>>>>>>>>>>"); log.info("<<<<<<<<<<<<<<< /sys/inqirePrsnlPortlet.do >>>>>>>>>>>>>>>");
return "uritms-tiles2/sys/PrsnlPortletManageDetail"; return "uritms-tiles2/sys/PrsnlPortletManageDetail";
@ -264,8 +286,8 @@ public class PrsnlPortletManageController
/** /**
* 개인화메뉴 정보를 수정한다. * 개인화메뉴 정보를 수정한다.
* @author 정보기술연구소 권오 * @author URP 인프라본부 나혁
* 작성일 : 2022.12.19 * 작성일 : 2025.03.06
*/ */
@RequestMapping("/sys/updatePrsnlPortlet.do") @RequestMapping("/sys/updatePrsnlPortlet.do")
public String updatePrsnlPortlet(final MultipartHttpServletRequest multiRequest public String updatePrsnlPortlet(final MultipartHttpServletRequest multiRequest
@ -338,8 +360,8 @@ public class PrsnlPortletManageController
/** /**
* 개인화메뉴 정보를 삭제한다. * 개인화메뉴 정보를 삭제한다.
* @author 정보기술연구소 권오 * @author URP 인프라본부 나혁
* 작성일 : 2022.12.19 * 작성일 : 2025.03.06
*/ */
@RequestMapping("/sys/deletePrsnlPortlet.do") @RequestMapping("/sys/deletePrsnlPortlet.do")
public String deletePrsnlPortlet(@ModelAttribute("prsnlPortletManageVO") PrsnlPortletManageVO prsnlPortletManageVO public String deletePrsnlPortlet(@ModelAttribute("prsnlPortletManageVO") PrsnlPortletManageVO prsnlPortletManageVO
@ -364,8 +386,8 @@ public class PrsnlPortletManageController
/** /**
* 개인화메뉴 정보를 멀티 삭제한다. * 개인화메뉴 정보를 멀티 삭제한다.
* @author 정보기술연구소 권오 * @author URP 인프라본부 나혁
* 작성일 : 2022.12.19 * 작성일 : 2025.03.06
*/ */
@RequestMapping("/sys/deletePrsnlPortletMulti.do") @RequestMapping("/sys/deletePrsnlPortletMulti.do")
public String deletePrsnlPortletMulti(HttpServletRequest request public String deletePrsnlPortletMulti(HttpServletRequest request
@ -412,4 +434,60 @@ public class PrsnlPortletManageController
return sLocationUrl; return sLocationUrl;
} }
/**
* 개인화메뉴 정보를 멀티 상태변경 처리한다.
* @author URP 인프라본부 나혁제
* 작성일 : 2025.12.08
*/
@RequestMapping("/sys/updateStatusPrsnlPortletMulti.do")
public String updateStatusPrsnlPortletMulti(HttpServletRequest request
, @ModelAttribute("prsnlPortletManageVO") PrsnlPortletManageVO prsnlPortletManageVO
, @RequestParam("checkedPrsnlIdForDel") String checkedPrsnlIdForDel
, @RequestParam("checkUseAts") String checkUseAts
, BindingResult bindingResult
, ModelMap model) throws Exception
{
log.info(">>>>>>>>>>>>>>> /sys/updateStatusPrsnlPortletMulti.do <<<<<<<<<<<<<<<");
String sLocationUrl = "";
String resultMsg = "";
log.info("checkedPrsnlIdForDel => [{}]", checkedPrsnlIdForDel );
log.info("checkUseAts => [{}]", checkUseAts );
String [] delPrsnlId = checkedPrsnlIdForDel.split(",");
if ( (delPrsnlId == null )
|| (delPrsnlId.length == 0) )
{
resultMsg = egovMessageSource.getMessage("fail.common.update");
sLocationUrl = "forward:/sys/selectPortletManageList.do";
}
else
{
// Body Setting Start ---------------------------------
Map<String, Object> bodyMap = new HashMap<>();
bodyMap.put("checkedPrsnlIdForDel", checkedPrsnlIdForDel);
bodyMap.put("checkUseAts" , checkUseAts );
// Body Setting End ---------------------------------
Map<String, Object> returnMap = restApiCallUtil.RestApiCall(request, bodyMap, "/sys/updateStatusPrsnlPortletMulti.do");
resultMsg = egovMessageSource.getMessage("success.common.update");
sLocationUrl = "forward:/sys/selectPortletManageList.do";
}
log.info("resultMsg => [{}]", resultMsg);
model.addAttribute("resultMsg", resultMsg);
log.info("<<<<<<<<<<<<<<< /sys/updateStatusPrsnlPortletMulti.do >>>>>>>>>>>>>>>");
return sLocationUrl;
}
} }

View File

@ -19,9 +19,11 @@
livereload: livereload:
enabled: true enabled: true
servlet:
multipart: multipart:
max-file-size: 100MB max-file-size: 100MB
max-request-size: 100MB max-request-size: 100MB
# custom 설정 # custom 설정
custom: custom:
path: path:

View File

@ -19,9 +19,11 @@
livereload: livereload:
enabled: true enabled: true
servlet:
multipart: multipart:
max-file-size: 100MB max-file-size: 100MB
max-request-size: 100MB max-request-size: 100MB
# custom 설정 # custom 설정
custom: custom:
path: path:

View File

@ -24,6 +24,7 @@
livereload: livereload:
enabled: true enabled: true
servlet:
multipart: multipart:
max-file-size: 100MB max-file-size: 100MB
max-request-size: 100MB max-request-size: 100MB

View File

@ -19,6 +19,7 @@
livereload: livereload:
enabled: true enabled: true
servlet:
multipart: multipart:
max-file-size: 100MB max-file-size: 100MB
max-request-size: 100MB max-request-size: 100MB

View File

@ -19,6 +19,7 @@
livereload: livereload:
enabled: true enabled: true
servlet:
multipart: multipart:
max-file-size: 100MB max-file-size: 100MB
max-request-size: 100MB max-request-size: 100MB

View File

@ -33,6 +33,7 @@
livereload: livereload:
enabled: true enabled: true
servlet:
multipart: multipart:
max-file-size: 100MB max-file-size: 100MB
max-request-size: 100MB max-request-size: 100MB

View File

@ -50,6 +50,6 @@
senderName: 나혁제 senderName: 나혁제
socketFactory-class: javax.net.ssl.SSLSocketFactory socketFactory-class: javax.net.ssl.SSLSocketFactory
supplier: gmail.com supplier: gmail.com
client : kic client : local

View File

@ -19,9 +19,11 @@
livereload: livereload:
enabled: true enabled: true
servlet:
multipart: multipart:
max-file-size: 100MB max-file-size: 100MB
max-request-size: 100MB max-request-size: 100MB
# custom 설정 # custom 설정
custom: custom:
path: path:

View File

@ -70,6 +70,20 @@
</field> </field>
</form> </form>
<!-- 서비스데스크 인스던트 처리 -->
<form name="svcDeskReqManage">
<field property="XXXXXXX" depends="">
</field>
<field property="vcChargeUser" depends="required">
<arg0 key="조치예정자" resource="true"/>
</field>
<field property="vcIncidentTitle" depends="required">
<arg0 key="제목" resource="true"/>
</field>
</form>
<!-- 점검보고서 처리 --> <!-- 점검보고서 처리 -->
<form name="reportCheckManage"> <form name="reportCheckManage">
<field property="XXXXXXX" depends=""> <field property="XXXXXXX" depends="">

View File

@ -22,11 +22,6 @@
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> <%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<!-- Resources -->
<script type="text/javascript" src="${ctx}/js/amcharts5/index.js"></script>
<script type="text/javascript" src="${ctx}/js/amcharts5/xy.js"></script>
<script type="text/javascript" src="${ctx}/js/amcharts5/themes/Animated.js"></script>
<link rel="stylesheet" href="${ctx}/js/js-calendar/calendar-jquery-ui.css"> <link rel="stylesheet" href="${ctx}/js/js-calendar/calendar-jquery-ui.css">
<script type="text/javascript" src="${ctx}/js/jquery-2.2.4.min.js"></script> <script type="text/javascript" src="${ctx}/js/jquery-2.2.4.min.js"></script>
<script type="text/javascript" src="${ctx}/js/js-calendar/jquery.js"></script> <script type="text/javascript" src="${ctx}/js/js-calendar/jquery.js"></script>
@ -37,6 +32,7 @@
<!-- Resources --> <!-- Resources -->
<script type="text/javascript" src="${ctx}/js/amcharts5/index.js"></script> <script type="text/javascript" src="${ctx}/js/amcharts5/index.js"></script>
<script type="text/javascript" src="${ctx}/js/amcharts5/xy.js"></script> <script type="text/javascript" src="${ctx}/js/amcharts5/xy.js"></script>
<script type="text/javascript" src="${ctx}/js/amcharts5/percent.js"></script>
<script type="text/javascript" src="${ctx}/js/amcharts5/themes/Animated.js"></script> <script type="text/javascript" src="${ctx}/js/amcharts5/themes/Animated.js"></script>
<!-- Styles --> <!-- Styles -->

View File

@ -22,12 +22,9 @@
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> <%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<!-- Resources -->
<script type="text/javascript" src="${ctx}/js/amcharts5/index.js"></script>
<script type="text/javascript" src="${ctx}/js/amcharts5/xy.js"></script>
<script type="text/javascript" src="${ctx}/js/amcharts5/themes/Animated.js"></script>
<link rel="stylesheet" href="${ctx}/js/js-calendar/calendar-jquery-ui.css"> <link rel="stylesheet" href="${ctx}/js/js-calendar/calendar-jquery-ui.css">
<script type="text/javascript" src="${ctx}/js/jquery-2.2.4.min.js"></script> <script type="text/javascript" src="${ctx}/js/jquery-2.2.4.min.js"></script>
<script type="text/javascript" src="${ctx}/js/js-calendar/jquery.js"></script> <script type="text/javascript" src="${ctx}/js/js-calendar/jquery.js"></script>
<script type="text/javascript" src="${ctx}/js/js-calendar/jquery-ui.js"></script> <script type="text/javascript" src="${ctx}/js/js-calendar/jquery-ui.js"></script>
@ -37,6 +34,7 @@
<!-- Resources --> <!-- Resources -->
<script type="text/javascript" src="${ctx}/js/amcharts5/index.js"></script> <script type="text/javascript" src="${ctx}/js/amcharts5/index.js"></script>
<script type="text/javascript" src="${ctx}/js/amcharts5/xy.js"></script> <script type="text/javascript" src="${ctx}/js/amcharts5/xy.js"></script>
<script type="text/javascript" src="${ctx}/js/amcharts5/percent.js"></script>
<script type="text/javascript" src="${ctx}/js/amcharts5/themes/Animated.js"></script> <script type="text/javascript" src="${ctx}/js/amcharts5/themes/Animated.js"></script>
<!-- Styles --> <!-- Styles -->

View File

@ -0,0 +1,190 @@
<!DOCTYPE html>
<%
/**
* @Class Name : MyResouceTotalStat.jsp
* @Description : SR 만족율 포틀릿
* @Modification Information
* @
* @ 수정일 수정자 수정내용
* @ ------- -------- ---------------------------
* @ 2025.12.09 나혁제 최초 생성
*
* @author urp 인프라본부 나혁제
* @since 2025.12.09
* @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"%>
<link rel="stylesheet" href="${ctx}/js/js-calendar/calendar-jquery-ui.css">
<script type="text/javascript" src="${ctx}/js/jquery-2.2.4.min.js"></script>
<script type="text/javascript" src="${ctx}/js/js-calendar/jquery.js"></script>
<script type="text/javascript" src="${ctx}/js/js-calendar/jquery-ui.js"></script>
<script type="text/javascript" src="${ctx}/js/js-calendar/calendar.js"></script>
<script type="text/javascript" src="${ctx}/js/js-calendar/jquery.ui.monthpicker.js"></script>
<!-- Resources -->
<script type="text/javascript" src="${ctx}/js/amcharts5/index.js"></script>
<script type="text/javascript" src="${ctx}/js/amcharts5/percent.js"></script>
<script type="text/javascript" src="${ctx}/js/amcharts5/xy.js"></script>
<script type="text/javascript" src="${ctx}/js/amcharts5/themes/Animated.js"></script>
<!-- Styles -->
<style>
#chartdiv_reportStsfdg {
width: 100%;
height: 300px;
}
</style>
<script type="text/javaScript" language="javascript" defer="defer">
/*********************************************************
* 초기화
******************************************************** */
$(document).ready(function ()
{
// Month Setting
$("#dtSearchMon_reportStsfdg").monthpicker({
monthNames: ['1월(JAN)', '2월(FEB)', '3월(MAR)', '4월(APR)', '5월(MAY)', '6월(JUN)',
'7월(JUL)', '8월(AUG)', '9월(SEP)', '10월(OCT)', '11월(NOV)', '12월(DEC)']
, monthNamesShort: ['1월', '2월', '3월', '4월', '5월', '6월', '7월', '8월', '9월', '10월', '11월', '12월']
//showOn: "button",
// buttonImage: "../../Images/Goods/calendar.jpg",
, showButtonPanel: true
// buttonImageOnly: true,
, changeYear: false
, yearRange: 'c-2:c+2'
, dateFormat: 'yy-mm'
});
am5.addLicense("AM5C123456789"); // 임시적 방법
searchMon_change_reportStsfdg();
});
//----------------------------------------
// chart 세팅
// ----------------------------------------
function amChart_setting_reportStsfdg(data)
{
// 기존 차트 초기화 Start
var existing = am5.registry.rootElements.filter(function(root) {
return root.dom && root.dom.id === "chartdiv_reportStsfdg";
});
existing.forEach(function(root) {
root.dispose();
});
$("#chartdiv_reportStsfdg").empty();
// 기존 차트 초기화 End
// Create root element
// https://www.amcharts.com/docs/v5/getting-started/#Root_element
var root = am5.Root.new("chartdiv_reportStsfdg");
// Set themes
// https://www.amcharts.com/docs/v5/concepts/themes/
root.setThemes([
am5themes_Animated.new(root)
]);
// Create chart
// https://www.amcharts.com/docs/v5/charts/percent-charts/pie-chart/
var chart = root.container.children.push(am5percent.PieChart.new(root, {
layout: root.verticalLayout,
innerRadius: am5.percent(50)
}));
// Create series
// https://www.amcharts.com/docs/v5/charts/percent-charts/pie-chart/#Series
let series = chart.series.push(am5percent.PieSeries.new(root, {
valueField: "value",
categoryField: "category",
alignLabels: false
}));
series.labels.template.setAll({
textType: "circular",
centerX: 0,
centerY: 0
});
series.data.setAll(data);
// Create legend
// https://www.amcharts.com/docs/v5/charts/percent-charts/legend-percent-series/
let legend = chart.children.push(am5.Legend.new(root, {
centerX: am5.percent(50),
x: am5.percent(50),
marginTop: 15,
marginBottom: 15,
}));
legend.data.setAll(series.dataItems);
// Play initial series animation
// https://www.amcharts.com/docs/v5/concepts/animations/#Animation_of_series
series.appear(1000, 100);
}
//----------------------------------------
// 조회월 변경시 조회처리
// ----------------------------------------
function searchMon_change_reportStsfdg()
{
var inData = {"strSearchMon":$("#dtSearchMon_reportStsfdg").val() };
$.ajax({
url: '/potl/getReportStsfdgRate.do'
, type: 'post'
, data: JSON.stringify(inData)
, dataType: 'json'
, contentType: 'application/json'
, async: false
, success: function(data)
{
amChart_setting_reportStsfdg(data.resultList);
},
error: function(errorThrown)
{
alert("실패");
}
});
}
</script>
<div class="week_news" style="width:${potlWidth}px; height:${potlHeight}px;">
<h1>보고서 처리만족율<a href="javascript:goAddPortletPage('3000000', '3020100');" 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">
<div>
<input type="text" class="btn_calendar" name="dtSearchMon_reportStsfdg" id="dtSearchMon_reportStsfdg"
maxlength="10" value="${dtCurMonth}" title="조회월" readonly onchange="searchMon_change_reportStsfdg()" style="width:200px;" />
</div>
<div id="chartdiv_reportStsfdg"></div>
</ul>
</div>

View File

@ -22,9 +22,18 @@
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> <%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<link rel="stylesheet" href="${ctx}/js/js-calendar/calendar-jquery-ui.css">
<script type="text/javascript" src="${ctx}/js/jquery-2.2.4.min.js"></script>
<script type="text/javascript" src="${ctx}/js/js-calendar/jquery.js"></script>
<script type="text/javascript" src="${ctx}/js/js-calendar/jquery-ui.js"></script>
<script type="text/javascript" src="${ctx}/js/js-calendar/calendar.js"></script>
<script type="text/javascript" src="${ctx}/js/js-calendar/jquery.ui.monthpicker.js"></script>
<!-- Resources --> <!-- Resources -->
<script type="text/javascript" src="${ctx}/js/amcharts5/index.js"></script> <script type="text/javascript" src="${ctx}/js/amcharts5/index.js"></script>
<script type="text/javascript" src="${ctx}/js/amcharts5/xy.js"></script> <script type="text/javascript" src="${ctx}/js/amcharts5/xy.js"></script>
<script type="text/javascript" src="${ctx}/js/amcharts5/percent.js"></script>
<script type="text/javascript" src="${ctx}/js/amcharts5/themes/Animated.js"></script> <script type="text/javascript" src="${ctx}/js/amcharts5/themes/Animated.js"></script>
<!-- Styles --> <!-- Styles -->

View File

@ -0,0 +1,190 @@
<!DOCTYPE html>
<%
/**
* @Class Name : MyResouceTotalStat.jsp
* @Description : SR 처리 준수율 포틀릿
* @Modification Information
* @
* @ 수정일 수정자 수정내용
* @ ------- -------- ---------------------------
* @ 2025.12.09 나혁제 최초 생성
*
* @author urp 인프라본부 나혁제
* @since 2025.12.09
* @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"%>
<link rel="stylesheet" href="${ctx}/js/js-calendar/calendar-jquery-ui.css">
<script type="text/javascript" src="${ctx}/js/jquery-2.2.4.min.js"></script>
<script type="text/javascript" src="${ctx}/js/js-calendar/jquery.js"></script>
<script type="text/javascript" src="${ctx}/js/js-calendar/jquery-ui.js"></script>
<script type="text/javascript" src="${ctx}/js/js-calendar/calendar.js"></script>
<script type="text/javascript" src="${ctx}/js/js-calendar/jquery.ui.monthpicker.js"></script>
<!-- Resources -->
<script type="text/javascript" src="${ctx}/js/amcharts5/index.js"></script>
<script type="text/javascript" src="${ctx}/js/amcharts5/percent.js"></script>
<script type="text/javascript" src="${ctx}/js/amcharts5/xy.js"></script>
<script type="text/javascript" src="${ctx}/js/amcharts5/themes/Animated.js"></script>
<!-- Styles -->
<style>
#chartdiv_srPro {
width: 100%;
height: 300px;
}
</style>
<script type="text/javaScript" language="javascript" defer="defer">
/*********************************************************
* 초기화
******************************************************** */
$(document).ready(function ()
{
// Month Setting
$("#dtSearchMon_srPro").monthpicker({
monthNames: ['1월(JAN)', '2월(FEB)', '3월(MAR)', '4월(APR)', '5월(MAY)', '6월(JUN)',
'7월(JUL)', '8월(AUG)', '9월(SEP)', '10월(OCT)', '11월(NOV)', '12월(DEC)']
, monthNamesShort: ['1월', '2월', '3월', '4월', '5월', '6월', '7월', '8월', '9월', '10월', '11월', '12월']
//showOn: "button",
// buttonImage: "../../Images/Goods/calendar.jpg",
, showButtonPanel: true
// buttonImageOnly: true,
, changeYear: false
, yearRange: 'c-2:c+2'
, dateFormat: 'yy-mm'
});
am5.addLicense("AM5C123456789"); // 임시적 방법
searchMon_change_srPro();
});
//----------------------------------------
// chart 세팅
// ----------------------------------------
function amChart_setting_srPro(data)
{
// 기존 차트 초기화 Start
var existing = am5.registry.rootElements.filter(function(root) {
return root.dom && root.dom.id === "chartdiv_srPro";
});
existing.forEach(function(root) {
root.dispose();
});
$("#chartdiv_srPro").empty();
// 기존 차트 초기화 End
// Create root element
// https://www.amcharts.com/docs/v5/getting-started/#Root_element
var root = am5.Root.new("chartdiv_srPro");
// Set themes
// https://www.amcharts.com/docs/v5/concepts/themes/
root.setThemes([
am5themes_Animated.new(root)
]);
// Create chart
// https://www.amcharts.com/docs/v5/charts/percent-charts/pie-chart/
var chart = root.container.children.push(am5percent.PieChart.new(root, {
layout: root.verticalLayout,
innerRadius: am5.percent(50)
}));
// Create series
// https://www.amcharts.com/docs/v5/charts/percent-charts/pie-chart/#Series
let series = chart.series.push(am5percent.PieSeries.new(root, {
valueField: "value",
categoryField: "category",
alignLabels: false
}));
series.labels.template.setAll({
textType: "circular",
centerX: 0,
centerY: 0
});
series.data.setAll(data);
// Create legend
// https://www.amcharts.com/docs/v5/charts/percent-charts/legend-percent-series/
let legend = chart.children.push(am5.Legend.new(root, {
centerX: am5.percent(50),
x: am5.percent(50),
marginTop: 15,
marginBottom: 15,
}));
legend.data.setAll(series.dataItems);
// Play initial series animation
// https://www.amcharts.com/docs/v5/concepts/animations/#Animation_of_series
series.appear(1000, 100);
}
//----------------------------------------
// 조회월 변경시 조회처리
// ----------------------------------------
function searchMon_change_srPro()
{
var inData = {"strSearchMon":$("#dtSearchMon_srPro").val() };
$.ajax({
url: '/potl/getSrProPromiseRateData.do'
, type: 'post'
, data: JSON.stringify(inData)
, dataType: 'json'
, contentType: 'application/json'
, async: false
, success: function(data)
{
amChart_setting_srPro(data.resultList);
},
error: function(errorThrown)
{
alert("실패");
}
});
}
</script>
<div class="week_news" style="width:${potlWidth}px; height:${potlHeight}px;">
<h1>SR 처리준수율<a href="javascript:goAddPortletPage('3000000', '3020100');" 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">
<div>
<input type="text" class="btn_calendar" name="dtSearchMon_srPro" id="dtSearchMon_srPro"
maxlength="10" value="${dtCurMonth}" title="조회월" readonly onchange="searchMon_change_srPro()" style="width:200px;" />
</div>
<div id="chartdiv_srPro"></div>
</ul>
</div>

View File

@ -0,0 +1,190 @@
<!DOCTYPE html>
<%
/**
* @Class Name : MyResouceTotalStat.jsp
* @Description : SR 만족율 포틀릿
* @Modification Information
* @
* @ 수정일 수정자 수정내용
* @ ------- -------- ---------------------------
* @ 2025.12.09 나혁제 최초 생성
*
* @author urp 인프라본부 나혁제
* @since 2025.12.09
* @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"%>
<link rel="stylesheet" href="${ctx}/js/js-calendar/calendar-jquery-ui.css">
<script type="text/javascript" src="${ctx}/js/jquery-2.2.4.min.js"></script>
<script type="text/javascript" src="${ctx}/js/js-calendar/jquery.js"></script>
<script type="text/javascript" src="${ctx}/js/js-calendar/jquery-ui.js"></script>
<script type="text/javascript" src="${ctx}/js/js-calendar/calendar.js"></script>
<script type="text/javascript" src="${ctx}/js/js-calendar/jquery.ui.monthpicker.js"></script>
<!-- Resources -->
<script type="text/javascript" src="${ctx}/js/amcharts5/index.js"></script>
<script type="text/javascript" src="${ctx}/js/amcharts5/percent.js"></script>
<script type="text/javascript" src="${ctx}/js/amcharts5/xy.js"></script>
<script type="text/javascript" src="${ctx}/js/amcharts5/themes/Animated.js"></script>
<!-- Styles -->
<style>
#chartdiv_srStsfdg {
width: 100%;
height: 300px;
}
</style>
<script type="text/javaScript" language="javascript" defer="defer">
/*********************************************************
* 초기화
******************************************************** */
$(document).ready(function ()
{
// Month Setting
$("#dtSearchMon_srStsfdg").monthpicker({
monthNames: ['1월(JAN)', '2월(FEB)', '3월(MAR)', '4월(APR)', '5월(MAY)', '6월(JUN)',
'7월(JUL)', '8월(AUG)', '9월(SEP)', '10월(OCT)', '11월(NOV)', '12월(DEC)']
, monthNamesShort: ['1월', '2월', '3월', '4월', '5월', '6월', '7월', '8월', '9월', '10월', '11월', '12월']
//showOn: "button",
// buttonImage: "../../Images/Goods/calendar.jpg",
, showButtonPanel: true
// buttonImageOnly: true,
, changeYear: false
, yearRange: 'c-2:c+2'
, dateFormat: 'yy-mm'
});
am5.addLicense("AM5C123456789"); // 임시적 방법
searchMon_change_srStsfdg();
});
//----------------------------------------
// chart 세팅
// ----------------------------------------
function amChart_setting_srStsfdg(data)
{
// 기존 차트 초기화 Start
var existing = am5.registry.rootElements.filter(function(root) {
return root.dom && root.dom.id === "chartdiv_srStsfdg";
});
existing.forEach(function(root) {
root.dispose();
});
$("#chartdiv_srStsfdg").empty();
// 기존 차트 초기화 End
// Create root element
// https://www.amcharts.com/docs/v5/getting-started/#Root_element
var root = am5.Root.new("chartdiv_srStsfdg");
// Set themes
// https://www.amcharts.com/docs/v5/concepts/themes/
root.setThemes([
am5themes_Animated.new(root)
]);
// Create chart
// https://www.amcharts.com/docs/v5/charts/percent-charts/pie-chart/
var chart = root.container.children.push(am5percent.PieChart.new(root, {
layout: root.verticalLayout,
innerRadius: am5.percent(50)
}));
// Create series
// https://www.amcharts.com/docs/v5/charts/percent-charts/pie-chart/#Series
let series = chart.series.push(am5percent.PieSeries.new(root, {
valueField: "value",
categoryField: "category",
alignLabels: false
}));
series.labels.template.setAll({
textType: "circular",
centerX: 0,
centerY: 0
});
series.data.setAll(data);
// Create legend
// https://www.amcharts.com/docs/v5/charts/percent-charts/legend-percent-series/
let legend = chart.children.push(am5.Legend.new(root, {
centerX: am5.percent(50),
x: am5.percent(50),
marginTop: 15,
marginBottom: 15,
}));
legend.data.setAll(series.dataItems);
// Play initial series animation
// https://www.amcharts.com/docs/v5/concepts/animations/#Animation_of_series
series.appear(1000, 100);
}
//----------------------------------------
// 조회월 변경시 조회처리
// ----------------------------------------
function searchMon_change_srStsfdg()
{
var inData = {"strSearchMon":$("#dtSearchMon_srStsfdg").val() };
$.ajax({
url: '/potl/getSrStsfdgRate.do'
, type: 'post'
, data: JSON.stringify(inData)
, dataType: 'json'
, contentType: 'application/json'
, async: false
, success: function(data)
{
amChart_setting_srStsfdg(data.resultList);
},
error: function(errorThrown)
{
alert("실패");
}
});
}
</script>
<div class="week_news" style="width:${potlWidth}px; height:${potlHeight}px;">
<h1>SR 처리만족율<a href="javascript:goAddPortletPage('3000000', '3020100');" 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">
<div>
<input type="text" class="btn_calendar" name="dtSearchMon_srStsfdg" id="dtSearchMon_srStsfdg"
maxlength="10" value="${dtCurMonth}" title="조회월" readonly onchange="searchMon_change_srStsfdg()" style="width:200px;" />
</div>
<div id="chartdiv_srStsfdg"></div>
</ul>
</div>

View File

@ -0,0 +1,85 @@
<!DOCTYPE html>
<%--
/**
* @Class Name : PopReceiptReject.jsp
* @Description : 접수/반려 팝엄 화면
* @Modification Information
* @
* @ 수정일 수정자 수정내용
* @ ---------- -------- ---------------------------
* @ 2025.12.17 나혁제 최초 생성
*
* @author URP 인프라본부 나혁제
* @since 2025.12.17
* @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">
<script type="text/javaScript" language="javascript" defer="defer">
function fncConfirem(strGubun)
{
parent.fncRptRejLast(strGubun, document.ReqApprovalPop.comment.value);
parent.$('.ui-dialog-content').dialog('close');
}
function fncClose()
{
parent.$('.ui-dialog-content').dialog('close');
}
</script>
<!-- javascript warning tag -->
<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript>
<form:form name="ReqApprovalPop" action="" method="post">
<!-- main title -->
<div class="main_titWrap">
<h3>접수/반려</h3>
</div>
<!-- Form 테이블 :start -->
<div class="bbs_view">
<!--등록폼 -->
<table class="tbl_form" summary="<spring:message code="common.summary.list" arguments="등록" />">
<caption>승인요청</caption>
<colgroup>
<col style="width: 16%;">
<col style="width: *%;">
</colgroup>
<tbody>
<tr>
<td>
의견
</td>
<td>
<textarea rows="3" cols="40" id="comment" placeholder="승인 합니다." ></textarea>
</td>
</tr>
</tbody>
</table>
</div>
<div class="btn_group">
<button type="button" class="btn-function" id="btnConfirm" onclick="javascript:fncConfirem('0')" title="접수">접수</button>
<button type="button" class="btn-function" id="btnConfirm" onclick="javascript:fncConfirem('2')" title="반려">반려</button>
<button type="button" class="btn-cancel" id="btnCancel" onclick="javascript:fncClose()" title="닫기">닫기</button>
</div>
</form:form>

View File

@ -114,6 +114,22 @@ ${uploadMax }
{ {
// 서비스정보 획득 // 서비스정보 획득
selInServiceCode(); selInServiceCode();
// 2025.12.17 나혁제 신청정보로 오는경우 신청정보 세팅
if( $('#vcReqIncidentNum').val() != '')
{
var strForm = document.getElementById("serviceBody2").value;
drawEditor("serviceBody", strForm, false);
// 조치예정자 세팅
$('#inChargeUser').val('${reqInChargeUser}');
$('#vcChargeUser').val('${reqVcChargeUser}');
// 제목
$('#vcIncidentTitle').val('${reqVcIncidentTitle}');
}
}); });
//---------------------------------------- //----------------------------------------
@ -650,7 +666,7 @@ ${uploadMax }
<td> <td>
<select name="inServiceCode" id="inServiceCode" onchange="selInServiceCode()" style="width: 80%;" > <select name="inServiceCode" id="inServiceCode" onchange="selInServiceCode()" style="width: 80%;" >
<c:forEach items="${serviceList}" var="result" varStatus="status"> <c:forEach items="${serviceList}" var="result" varStatus="status">
<option value="${result.value}" > ${result.label} </option><!-- 분류코드명 --> <option value="${result.value}" <c:if test="${result.value == reqInServiceCode}">selected</c:if> > ${result.label} </option><!-- 분류코드명 -->
</c:forEach> </c:forEach>
</select> </select>
</td> </td>
@ -681,10 +697,26 @@ ${uploadMax }
</td> </td>
</tr> </tr>
<tr> <c:choose>
<c:when test="${reqAtchFileId == ''}">
<th> 진행사항 </th> <th> 진행사항 </th>
<td></td> <td></td>
<th><spring:message code="cop.atchFile" /></th>
<td colspan=3>
<!-- attached file Start -->
<div>
<input type="file" name="file_1" id="egovComFileUploader" onChange="fnImgChange(this)" multiple>
</div>
<div id="egovComFileList"></div>
<!-- attached file End -->
</td>
</c:when>
<c:otherwise>
<tr>
<th rowspan=2 > 진행사항 </th>
<td rowspan=2 ></td>
<th><spring:message code="cop.atchFile" /></th> <th><spring:message code="cop.atchFile" /></th>
<td colspan=3> <td colspan=3>
<!-- attached file Start --> <!-- attached file Start -->
@ -695,6 +727,16 @@ ${uploadMax }
<!-- attached file End --> <!-- attached file End -->
</td> </td>
</tr> </tr>
<tr>
<th>기존첨부파일</th>
<td colspan=3>
<c:import url="/cmm/selectFileInfs.do" charEncoding="utf-8">
<c:param name="param_atchFileId" value="${reqAtchFileId}" />
</c:import>
</td>
</tr>
</c:otherwise>
</c:choose>
<tr> <tr>
<th>서비스 결재 라인 </th> <th>서비스 결재 라인 </th>
@ -749,8 +791,8 @@ ${uploadMax }
</tbody> </tbody>
</table> </table>
<textarea id="serviceBody" name="serviceBody" > <textarea id="serviceBody" name="serviceBody" ></textarea>
</textarea> <textarea id="serviceBody2" name="serviceBody2" style="display:none;">${reqTxIncidentBody}</textarea>
</div> </div>
@ -798,6 +840,12 @@ ${uploadMax }
<input type="hidden" id="txComment" name="txComment" value=""> <input type="hidden" id="txComment" name="txComment" value="">
<input type="hidden" id="reqApprovalYn" name="reqApprovalYn" value=""> <input type="hidden" id="reqApprovalYn" name="reqApprovalYn" value="">
<!-- 2025.12.17 나혁제 신청정보 추가 -->
<input type="hidden" id="vcReqIncidentNum" name="vcReqIncidentNum" value="${vcReqIncidentNum}">
<input type="hidden" id="reqAtchFileId" name="reqAtchFileId" value="${reqAtchFileId}">
<input type="hidden" id="reqRptRejTxComment" name="reqRptRejTxComment" value="${reqRptRejTxComment}">
</form:form> </form:form>

View File

@ -0,0 +1,443 @@
<!DOCTYPE html>
<%
/**
* @Class Name : SvcDeskReqDetail.jsp
* @Description : 서비스데스크 인스턴스 신청 상세조회 화면
* @Modification Information
* @
* @ 수정일 수정자 수정내용
* @ ------- -------- ---------------------------
* @ 2025.12.16 나혁제 최초 생성
*
* @author URP 인프라본부 나혁제
* @since 2025.12.16
* @version 1.0
* @see
*
* Copyright (C) 2009 by MOPAS All right reserved.
*/
%>
<%@ page language="java" 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="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %>
<title> 인스던트 신청 </title>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<script type="text/javascript" src="<c:url value="/validator.do"/>"></script>
<script type="text/javascript" src="<c:url value='/egov/js/showModalDialog.js'/>" ></script>
<!-- tinyMCE Editor -->
<script charset="utf-8" type="text/javascript" src="${pageContext.request.contextPath}/lib/oss/tinymce/tinymce.min.js"></script>
<!-- tinymce setting 2025.05.12 나혁제 tinymce_uritms_setting.js 이관 -->
<script charset="utf-8" type="text/javascript" src="<c:url value='/js/tinymce_uritms_setting.js?ver=1'/>" ></script>
<!-- validation 처리 -->
<validator:javascript formName="svcDeskReqManage" staticJavascript="false" xhtml="true" cdata="false"/>
<!-- 파일처리 -->
<script type="text/javascript" src="<c:url value='/egov/js/EgovMultiFiles.js'/>" ></script>
<!-- 시간처리 -->
<script type="text/javascript" src="${ctx}/js/js-calendar/jquery-ui-timepicker-addon.js"></script>
<link rel="stylesheet" type="text/css" href="${ctx}/css/jquery-ui-timepicker-addon.css">
<!-- itsm 공통 스크립트 -->
<script type="text/javascript" src="${ctx}/js/common_uritms.js"></script>
<script type="text/javaScript" language="javascript">
//----------------------------------------
// 화면 초기화
// ----------------------------------------
$(document).ready(function()
{
drawEditor("serviceBody", "", true);
});
//----------------------------------------
// 화면 초기화(Form 완전 로딩후 )
// ----------------------------------------
$(window).on("load", function()
{
var strForm = document.getElementById("serviceBody2").value;
drawEditor("serviceBody", strForm, true);
});
//----------------------------------------
// 목록 화면으로 이동처리
// ----------------------------------------
function fncSvcDeskReqList()
{
var varFrom = document.getElementById("svcDeskReqManage");
varFrom.action = "<c:url value='/srm/searchReqIncident.do'/>";
varFrom.submit();
}
//----------------------------------------
// 인스던트 신청 수정 화면 이동처리
// ----------------------------------------
function fncSvcDeskReqIncidentUpdate()
{
// 수정화면으로 이동처리
var varFrom = document.getElementById("svcDeskReqManage");
varFrom.action = "<c:url value='/srm/updateViewReqIncident.do'/>";
varFrom.submit();
}
//----------------------------------------
// 인스던트 삭제 처리
// ----------------------------------------
function fncSvcDeskReqIncidentDelete()
{
// 2025.11.18 나혁제 [승인완료/반려] 삭제 불가
if($('#inReqStatus').val() != '-1' )
{
alert("신청상태 이외의 인시던트 신청정보는 삭제가 불가합니다.");
return;
}
var bYes = confirm("인스던트 신청정보 삭제 처리를 하시겠습니까?");
if(bYes==false) return;
proc.fn_ReqIncidentDelete_save();
}
//----------------------------------------
// 접수/반려
// ----------------------------------------
function fncSvcDeskReqIncidentRptRej()
{
var bYes = confirm("인스던트 접수/반려 처리를 하시겠습니까?");
if(bYes==false) return;
// 승인&반려 메세지 팝업 open
PopupOpen("/srm/PopReceiptReject", 400, 550, '');
}
//----------------------------------------
// 인스던트 접수/반려 처리(최종 저장 처리 )
// ----------------------------------------
function fncRptRejLast(strGubun , strMsg)
{
$('#reqRptRejTxComment').val(strMsg) ;
// 접수처리
if(strGubun=='0')
{
// 수정화면으로 이동처리
var varFrom = document.getElementById("svcDeskReqManage");
varFrom.action = "<c:url value='/srm/insertViewIncident.do'/>";
varFrom.submit();
}
// 반려처리
else if(strGubun=='2')
{
proc.fn_Incident_Req_Reject();
}
else
{
alert("알수없는 처리 유형입니다.");
}
}
//----------------------------------------
// 팝업 오픈
// ----------------------------------------
function PopupOpen(strUrl, hei, wid, pagetitle)
{
var page = "/common/PageRedirection.do?Page="+ strUrl
+ "&PopupYn=Y";
var $dialog = $('<div></div>')
.html('<iframe style="border: 0px; " src="' + page + '" width="100%" height="100%"></iframe>')
.dialog({
autoOpen: false
, modal: true
, height: hei
, width: wid
, title: pagetitle
, open: function (event, ui)
{
$(".ui-icon-closethick").remove(); // 닫기 버튼 제거
$('.ui-dialog-titlebar-close').css({
width: '30px' // 닫기 버튼 너비
// , height: '50px' // 닫기 버튼 높이
});
$(this).parent().find(".ui-dialog-titlebar").hide(); // 타이틀바 안보이게 처리
}
, closeText: '닫기'
});
$dialog.dialog('open');
// 팝업 화면 맨앞으로 배치
$(".ui-dialog").css("z-index", "99");
}
//----------------------------------------
// Ajax 서버 통신 모음
// ----------------------------------------
var proc =
{
// 인스던트 삭제
fn_ReqIncidentDelete_save : function ()
{
var form = $('#svcDeskReqManage')[0];
var formData = new FormData(form);
$.ajax({
url: '/srm/deleteReqIncident.do'
, type: 'post'
, enctype:'multipart/form-data'
, data: formData
, dataType: 'json'
, processData:false
, contentType:false
, cache:false
, success: function(data)
{
alert("인스던트 신청정보 삭제 되었습니다.");
fncSvcDeskReqList();
},
error: function(errorThrown)
{
alert("인스던트 신청정보 삭제처리중 오류가 발생하였습니다. \n 시스템 관리자에게 문의해 주시기 바랍니다.");
console.log(JSON.stringify(errorThrown));
}
});
}
// 인스던트 신청정보 반려
, fn_Incident_Req_Reject : function ()
{
var form = $('#svcDeskReqManage')[0];
var formData = new FormData(form);
$.ajax({
url: '/srm/rejectReqIncident.do'
, type: 'post'
, enctype:'multipart/form-data'
, data: formData
, dataType: 'json'
, processData:false
, contentType:false
, cache:false
, success: function(data)
{
alert("인스던트 신청정보 반려 되었습니다.");
fncSvcDeskReqList();
},
error: function(errorThrown)
{
alert("인스던트 신청정보 반려중 오류가 발생하였습니다. \n 시스템 관리자에게 문의해 주시기 바랍니다.");
console.log(JSON.stringify(errorThrown));
}
});
}
}
</script>
<!-- javascript warning tag -->
<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript>
<form:form modelAttribute="svcDeskReqManage" name="svcDeskReqManage" method="post" enctype="multipart/form-data">
<!-- body_wrap :start -->
<div class="body_wrap">
<!-- main title -->
<div class="main_titWrap">
<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="SR관리">SR관리</a></li>
<li>인스던트 신청 상세조회</li>
</ul>
</div>
</div>
</div>
<!--//location :e -->
</div>
<!--//main title -->
<!-- Form 테이블 :start -->
<div class="bbs_view">
<!-- 등록폼 -->
<table class="tbl_form" summary="<spring:message code="common.summary.list" arguments="등록" />">
<caption>인스던트 등록</caption>
<colgroup>
<col style="width: 10%;">
<col style="width: 30%">
<col style="width: 10%">
<col style="width: 20%;">
<col style="width: 10%">
<col style="width: 20%;">
</colgroup>
<tbody>
<tr>
<th> 신청번호 </th>
<td><c:out value="${resultReqIncident.vcReqIncidentNum}"/></td>
<th> 신청자 </th>
<td><c:out value="${resultReqIncident.vcReqUser}"/></td>
<th> 신청일시 </th>
<td><c:out value="${resultReqIncident.dtReqDateTime}"/></td>
</tr>
<tr>
<th> 서비스 </th>
<td><c:out value="${resultReqIncident.vcServiceName}"/></td>
<th> 조치예정자 </th>
<td><c:out value="${resultReqIncident.vcChargeUser}"/></td>
<th> 완료요청일시 </th>
<td><c:out value="${resultReqIncident.dtCompleteReqDateTime}"/></td>
</tr>
<tr>
<th> 제목 </th>
<td colspan=2>
<c:out value="${resultReqIncident.vcIncidentTitle}"/>
</td>
<th><spring:message code="cop.atchFile" /></th>
<td colspan=2>
<c:import url="/cmm/selectFileInfs.do" charEncoding="utf-8">
<c:param name="param_atchFileId" value="${resultReqIncident.atchFileId}" />
</c:import>
</td>
</tr>
</tbody>
</table>
<c:if test="${bRptYn eq 'Y' || resultReqIncident.inReqStatus eq '2' }" >
<h1 style="font-size: 20px;font-weight: bold;">처리정보</h1>
<div class="bbs_view">
<!-- 등록폼 -->
<table class="tbl_form" summary="<spring:message code="common.summary.list" arguments="등록" />">
<caption>인스던트 등록</caption>
<colgroup>
<col style="width: 10%;">
<col style="width: 14%">
<col style="width: 10%">
<col style="width: 13%;">
<col style="width: 10%">
<col style="width: 10%;">
<col style="width: 10%">
<col style="width: *">
</colgroup>
<tbody>
<tr>
<th> 접수번호 </th>
<td><c:out value="${resultIncident.vcIncidentNum}"/></td>
<th> 접수일시 </th>
<td><c:out value="${resultIncident.dtReceiptDatetime}"/></td>
<th> 접수자 </th>
<td><c:out value="${resultIncident.vcRegUser}"/></td>
<th> 접수의견 </th>
<td><textarea style="width: 90%;" readonly >${resultReqIncident.rcvdOpin}
</textarea>
</td>
</tr>
</tbody>
<tbody>
<tr>
<th> 진행상태 </th>
<td><c:out value="${resultIncident.vcIncidentStatus}"/></td>
<th> 처리완료일시 </th>
<td><c:out value="${resultIncident.dtCompleteDatetime}"/></td>
<th> 처리자 </th>
<td><c:out value="${resultIncident.vcDevUser}"/></td>
<th> 처리완료의견 </th>
<td><textarea style="width: 90%;" readonly >${resultReqIncident.txCompletedComment}
</textarea>
</td>
</tr>
</tbody>
</table>
</div>
</c:if>
<textarea id="serviceBody" name="serviceBody" ></textarea>
<textarea id="serviceBody2" name="serviceBody2" style="display:none;">${resultReqIncident.txIncidentBody}</textarea>
</div>
<!-- main btn : start -->
<div class="btn_group">
<!-- 왼쪽영역-->
<div style="text-align: left;position: absolute;">
<!-- 목록 -->
<button type="button" class="btn-function" id="btnList" style="background: blue;" onclick="fncSvcDeskReqList(); return false;" title="<spring:message code="button.list"/>">
<spring:message code="button.list"/>
</button>
</div>
<!--//왼쪽영역-->
<!-- 오른쪽영역-->
<div>
<c:if test="${resultReqIncident.inReqStatus eq '-1'}" >
<c:if test="${bRptAuth eq 'Y'}" >
<button type="button" class="btn-etc" title="접수/반려" onclick="fncSvcDeskReqIncidentRptRej(); return false;">
접수/반려
</button>
</c:if>
<c:if test="${strChangeYn eq 'Y'}" >
<button type="button" class="btn-etc" title="수정" onclick="fncSvcDeskReqIncidentUpdate(); return false;">
수정
</button>
<button type="button" class="btn-etc" title="삭제" onclick="fncSvcDeskReqIncidentDelete(); return false;">
삭제
</button>
</c:if>
</c:if>
</div>
</div>
<!-- main btn : end -->
</div>
<!-- body_wrap :end -->
<!-- 검색조건 유지 -->
<input type="hidden" name="orgnztId" value="" >
<input type="hidden" name="searchCondition" value="<c:out value='${searchVO.searchCondition}'/>" >
<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="vcReqIncidentNum" id="vcReqIncidentNum" value="<c:out value='${resultReqIncident.vcReqIncidentNum}'/>" >
<input type="hidden" name="inReqStatus" id="inReqStatus" value="<c:out value='${resultReqIncident.inReqStatus}'/>" >
<input type="hidden" id="reqRptRejTxComment" name="reqRptRejTxComment" value=""/>
</form:form>

View File

@ -0,0 +1,464 @@
<!DOCTYPE html>
<%
/**
* @Class Name : SvcDeskReqInsert.jsp
* @Description : 서비스데스크 인스턴스 신청 등록화면
* @Modification Information
* @
* @ 수정일 수정자 수정내용
* @ ------- -------- ---------------------------
* @ 2025.12.15 나혁제 최초 생성
*
* @author URP 인프라본부 나혁제
* @since 2025.12.15
* @version 1.0
* @see
*
* Copyright (C) 2009 by MOPAS All right reserved.
*/
%>
<%@ page language="java" 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="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %>
<title> 인스던트 신청 </title>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<script type="text/javascript" src="<c:url value="/validator.do"/>"></script>
<script type="text/javascript" src="<c:url value='/egov/js/showModalDialog.js'/>" ></script>
<!-- tinyMCE Editor -->
<script charset="utf-8" type="text/javascript" src="${pageContext.request.contextPath}/lib/oss/tinymce/tinymce.min.js"></script>
<!-- tinymce setting 2025.05.12 나혁제 tinymce_uritms_setting.js 이관 -->
<script charset="utf-8" type="text/javascript" src="<c:url value='/js/tinymce_uritms_setting.js?ver=1'/>" ></script>
<!-- validation 처리 -->
<validator:javascript formName="svcDeskReqManage" staticJavascript="false" xhtml="true" cdata="false"/>
<!-- 파일처리 -->
<script type="text/javascript" src="<c:url value='/egov/js/EgovMultiFiles.js'/>" ></script>
<!-- 시간처리 -->
<script type="text/javascript" src="${ctx}/js/js-calendar/jquery-ui-timepicker-addon.js"></script>
<link rel="stylesheet" type="text/css" href="${ctx}/css/jquery-ui-timepicker-addon.css">
<script type="text/javaScript" language="javascript">
//----------------------------------------
// 화면 초기화
// ----------------------------------------
$(document).ready(function()
{
// 접수일시, 완료요청일시 시간까지 세팅
$("#dtReceiptDatetime, #dtReqDatetime").datetimepicker({
dateFormat:'yy-mm-dd',
monthNamesShort:[ '1월', '2월', '3월', '4월', '5월', '6월', '7월', '8월', '9월', '10월', '11월', '12월' ],
dayNamesMin:[ '일', '월', '화', '수', '목', '금', '토' ],
changeMonth:true,
changeYear:true,
showMonthAfterYear:true,
// timepicker 설정
timeFormat:'HH:mm',
controlType:'select',
oneLine:true,
});
// 멀티파일 설정
var maxFileNum = 3;
var multi_selector = new MultiSelector( document.getElementById( 'egovComFileList' ), maxFileNum );
multi_selector.addElement( document.getElementById( 'egovComFileUploader' ) );
// drawEditor("");
drawEditor("serviceBody", "", false);
});
//----------------------------------------
// 화면 초기화(Form 완전 로딩후 )
// ----------------------------------------
$(window).on("load", function()
{
// 서비스정보 획득
selInServiceCode();
});
//----------------------------------------
// 목록 화면으로 이동처리
// ----------------------------------------
function fncSvcDeskReqList()
{
var varFrom = document.getElementById("svcDeskReqManage");
varFrom.action = "<c:url value='/srm/searchReqIncident.do'/>";
varFrom.submit();
}
//----------------------------------------
// 사용자 검색 팝업
// ----------------------------------------
function fn_User_Search( strTitle
, frmUniqId
, frmEmplNo
, frmEmplyrNm
, frmOrgnztNm
, multiUserSelectYn
)
{
var arrParam = new Array(6);
arrParam[0] = window;
arrParam[1] = strTitle;
arrParam[2] = frmUniqId;
arrParam[3] = frmEmplNo;
arrParam[4] = frmEmplyrNm;
arrParam[5] = frmOrgnztNm;
var strUrl = "/cmm/selectUserListPopup.do?multiUserSelectYn="+multiUserSelectYn;
window.showModalDialog("<c:url value='"+strUrl+"' />"
, arrParam
,"dialogWidth:900px;dialogHeight:750px;resizable:yes;center:yes");
}
//----------------------------------------
// 서비스 정보 변경시
// ----------------------------------------
function selInServiceCode()
{
var inServiceCode = $('#inServiceCode option:selected').val() ;
var inData = {};
inData = {"inServiceCode":inServiceCode};
proc.fn_get_service_info(inData);
}
//----------------------------------------
// 서비스 등록처리
// ----------------------------------------
function fncSvcDeskReqIncidentInsert()
{
var bYes = confirm("인스던트 신청 처리를 하시겠습니까?");
if(bYes==false) return;
var form = document.svcDeskReqManage;
form.txIncidentBody.value = tinyMCE.get("serviceBody").getContent(); // 평문
//input item Client-Side validate
if (!validateSvcDeskReqManage(form))
{
return false;
}
// 2025.12.02 나혁제 파일체크 로직 추가
if (!fncAttachFileCheck())
{
return false;
}
proc.fn_req_incident_save();
}
//----------------------------------------
// 2025.12.02 나혁제 파일체크 로직 추가
// 첨부파일 체크
// ----------------------------------------
function fncAttachFileCheck()
{
// 결과가 false인경우 허용되지 않음
var resultExtension = EgovMultiFilesChecker.checkExtensions("egovComFileUploader", "<c:out value='${fileUploadExtensions}'/>");
if (!resultExtension)
{
return false;
}
// 파일당 1M까지 허용 (1K=1024), 결과가 false인경우 허용되지 않음
var resultSize = EgovMultiFilesChecker.checkFileSize("egovComFileUploader", <c:out value='${fileUploadMaxSize}'/>);
if (!resultSize)
{
return false;
}
return true;
}
//----------------------------------------
// 팝업 오픈
// ----------------------------------------
function PopupOpen(strUrl, hei, wid, pagetitle)
{
var page = "/common/PageRedirection.do?Page="+ strUrl
+ "&PopupYn=Y";
var $dialog = $('<div></div>')
.html('<iframe style="border: 0px; " src="' + page + '" width="100%" height="100%"></iframe>')
.dialog({
autoOpen: false
, modal: true
, height: hei
, width: wid
, title: pagetitle
, open: function (event, ui)
{
$(".ui-icon-closethick").remove(); // 닫기 버튼 제거
$('.ui-dialog-titlebar-close').css({
width: '30px' // 닫기 버튼 너비
// , height: '50px' // 닫기 버튼 높이
});
$(this).parent().find(".ui-dialog-titlebar").hide(); // 타이틀바 안보이게 처리
}
, closeText: '닫기'
});
$dialog.dialog('open');
// 팝업 화면 맨앞으로 배치
$(".ui-dialog").css("z-index", "99");
}
//----------------------------------------
// Ajax 서버 통신 모음
// ----------------------------------------
var proc =
{
// 인스던트 신청 등록
fn_req_incident_save : function ()
{
var form = $('#svcDeskReqManage')[0];
var formData = new FormData(form);
$.ajax({
url: '/srm/addReqIncident.do'
, type: 'post'
, enctype:'multipart/form-data'
, data: formData
, dataType: 'json'
, processData:false
, contentType:false
, cache:false
, success: function(data)
{
alert("신청 완료 되었습니다.");
fncSvcDeskReqList();
},
error: function(errorThrown)
{
alert("인스던트 신청 등록중 오류가 발생하였습니다. \n 시스템관리자에게 문의해 주시기 바랍니다.");
console.log(JSON.stringify(errorThrown));
}
});
}
,
// 서비스정보 추출
fn_get_service_info : function (inData)
{
$.ajax({
url: '/srm/getIncidentForm.do'
, type: 'post'
, data: JSON.stringify(inData)
, dataType: 'json'
, contentType: 'application/json'
, async: false
, success: function(data)
{
console.log(JSON.stringify(data));
// 제목세팅
$('#vcIncidentTitle').val(data.resultService.vcServiceName);
// 조치예정자 고유번호
$('#inChargeUser').val(data.resultService.inChargeUser);
// 조치예정자명
$('#vcChargeUser').val(data.resultService.vcChargeUser);
// 본문세팅
// drawEditor(data.resultService.txDefaultForm);
drawEditor("serviceBody", data.resultService.txDefaultForm, false);
},
error: function(errorThrown)
{
alert("자산 중분류 조회중 오류가 발생하였습니다. \n 시스템관리자에게 문의해 주시기 바랍니다.");
console.log(JSON.stringify(errorThrown));
}
});
}
}
</script>
<!-- javascript warning tag -->
<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript>
<form:form modelAttribute="svcDeskReqManage" name="svcDeskReqManage" method="post" enctype="multipart/form-data">
<!-- body_wrap :start -->
<div class="body_wrap">
<!-- main title -->
<div class="main_titWrap">
<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="SR관리">SR관리</a></li>
<li>인스던트 신청</li>
</ul>
</div>
</div>
</div>
<!--//location :e -->
</div>
<!--//main title -->
<!-- Form 테이블 :start -->
<div class="bbs_view">
<!-- 등록폼 -->
<table class="tbl_form" summary="<spring:message code="common.summary.list" arguments="등록" />">
<caption>인스던트 등록</caption>
<colgroup>
<col style="width: 10%;">
<col style="width: 30%">
<col style="width: 10%">
<col style="width: 20%;">
<col style="width: 10%">
<col style="width: 20%;">
</colgroup>
<tbody>
<tr>
<th> 신청번호 </th>
<td></td>
<th> 신청자 </th>
<td>
<input type="text" name="vcReqUser" id="vcReqUser" value="${vcReqUser}"/>
<a href="<c:url value='/cmm/selectUserListPopup.do' />" target="_blank" title="새 창으로 이동" onclick="fn_User_Search('조치예정', 'inRegUser', '', 'vcRegUser', '', '');return false;">
<img src="<c:url value='/egov/images/egovframework/com/cmm/btn/btn_search.gif' />" alt="조치예정자 검색" title="조치예정자 검색">
</a>
<input type="hidden" name="inReqUser" id="inReqUser" value="${inReqUser}" >
</td>
<th> 신청일시 </th>
<td>
<input type="text" class="btn_calendar" name="dtReqDateTime" id="dtReqDateTime" value="${dtReqDateTime}" readonly style="width:80%;"/>
</td>
</tr>
<tr>
<th> 서비스 </th>
<td>
<select name="inServiceCode" id="inServiceCode" onchange="selInServiceCode()" style="width: 80%;" >
<c:forEach items="${serviceList}" var="result" varStatus="status">
<option value="${result.value}" > ${result.label} </option><!-- 분류코드명 -->
</c:forEach>
</select>
</td>
<th> 조치예정자 </th>
<td>
<input type="text" name="vcChargeUser" id="vcChargeUser" value=""/>
<a href="<c:url value='/cmm/selectUserListPopup.do' />" target="_blank" title="새 창으로 이동" onclick="fn_User_Search('조치예정', 'inChargeUser', '', 'vcChargeUser', '', '');return false;">
<img src="<c:url value='/egov/images/egovframework/com/cmm/btn/btn_search.gif' />" alt="조치예정자 검색" title="조치예정자 검색">
</a>
<input type="hidden" name="inChargeUser" id="inChargeUser" value="" >
</td>
<th> 완료요청일시 </th>
<td>
<input type="text" class="btn_calendar" name="dtCompleteReqDateTime" id="dtCompleteReqDateTime" value="${dtCompleteReqDateTime}" readonly style="width:80%;"/>
</td>
</tr>
<tr>
<th> 제목 </th>
<td colspan=2>
<input type="text" name="vcIncidentTitle" id="vcIncidentTitle" value="" style="width:90%;"/>
</td>
<th><spring:message code="cop.atchFile" /></th>
<td colspan=2>
<!-- attached file Start -->
<div>
<input type="file" name="file_1" id="egovComFileUploader" onChange="fnImgChange(this)" multiple>
</div>
<div id="egovComFileList"></div>
<!-- attached file End -->
</td>
</tr>
</tbody>
</table>
<textarea id="serviceBody" name="serviceBody" >
</textarea>
</div>
<!-- main btn : start -->
<div class="btn_group">
<!-- 왼쪽영역-->
<div style="text-align: left;position: absolute;">
<!-- 목록 -->
<button type="button" class="btn-function" id="btnList" style="background: blue;" onclick="fncSvcDeskReqList(); return false;" title="<spring:message code="button.list"/>">
<spring:message code="button.list"/>
</button>
</div>
<!--//왼쪽영역-->
<!-- 오른쪽영역-->
<div>
<button type="button" class="btn-etc" title="신청" onclick="fncSvcDeskReqIncidentInsert(); return false;">
<spring:message code="button.create" />
</button>
</div>
</div>
<!-- main btn : end -->
</div>
<!-- body_wrap :end -->
<!-- 검색조건 유지 -->
<input type="hidden" name="orgnztId" value="" >
<input type="hidden" name="searchCondition" value="<c:out value='${searchVO.searchCondition}'/>" >
<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="" >
<!-- 입력정보 -->
<input type="hidden" id="txIncidentBody" name="txIncidentBody" value="" >
<input type="hidden" id="approvalsId" name="approvalsId" value="" >
<input type="hidden" id="approvalsName" name="approvalsName" value="" >
<!-- 승인요청 인자 -->
<input type="hidden" id="txComment" name="txComment" value="">
<input type="hidden" id="reqApprovalYn" name="reqApprovalYn" value="">
</form:form>

View File

@ -0,0 +1,243 @@
<!DOCTYPE html>
<%
/**
* @Class Name : SvcDeskReqList.java
* @Description : 서비스데스크 신청 목록 화면
* @Modification Information
* @
* @ 수정일 수정자 수정내용
* @ ------- -------- ---------------------------
* @ 2025.12.15 나혁제 최초 생성
*
* @author URP 인프라본부 나혁제
* @since 2025.12.15
* @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" %>
<title>서비스데스크 신청정보</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<script type="text/javaScript" language="javascript" defer="defer">
//----------------------------------------
// 화면 초기화
// ----------------------------------------
$(document).ready(function()
{
});
//----------------------------------------
// 검색
// ----------------------------------------
function fncSearchSvcDeskList()
{
linkPage(1);
}
//----------------------------------------
// 신청 등록 화면 이동
// ----------------------------------------
function fncAddSvcDeskReqInsert()
{
// 2025.11.19 나혁제 호출방식 변경
// location.replace("<c:url value='/srm/insertViewIncident.do'/>");
document.listForm.action = "<c:url value='/srm/insertViewReqIncident.do'/>";
document.listForm.submit();
}
//----------------------------------------
// 상세조회
// ----------------------------------------
function fncSelectReqIncident(vcReqIncidentNum)
{
document.listForm.vcReqIncidentNum.value = vcReqIncidentNum;
document.listForm.action = "<c:url value='/srm/getReqIncidentBySeq.do'/>";
document.listForm.submit();
}
//----------------------------------------
// 검색(페이지)
// ----------------------------------------
function linkPage(pageIndex)
{
var arComplete = []; // 처리상태
var arStatus = []; // 승인상태
if($("#chk2_1").is(":checked")) arComplete.push("0");
if($("#chk2_2").is(":checked")) arComplete.push("1");
if($("#chk1_1").is(":checked")) arStatus.push("0");
if($("#chk1_2").is(":checked")) arStatus.push("1");
if($("#chk1_3").is(":checked")) arStatus.push("2");
if($("#chk1_4").is(":checked")) arStatus.push("3");
console.log("arComplete =>" + arComplete);
console.log("arStatus =>" + arStatus);
$("#complete").val(arComplete.join(","));
$("#status" ).val(arStatus.join(","));
console.log("complete =>" + complete);
console.log("status =>" + status);
document.listForm.pageIndex.value = pageIndex;
// 2025.12.04 나혁제 한페이지당 목록건수 추가
document.listForm.pageUnit.value = document.listForm.selPageSize.value;
document.listForm.action = "<c:url value='/srm/searchReqIncident.do'/>";
document.listForm.submit();
}
</script>
<!-- javascript warning tag -->
<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript>
<form:form name="listForm" action="${pageContext.request.contextPath}/srm/searchReqIncident.do" method="post">
<!-- body_wrap :start -->
<div class="body_wrap">
<div id="navTitle">
</div>
<!-- 검색 :s -->
<div class="searchArea single-row">
<table>
<colgroup>
<col width="10%">
<col width="30%">
<col width="10%">
<col width="50%">
</colgroup>
<tbody>
<tr>
<td colspan=5>
<label>신청번호:</label>
<input class="s_input" name="incidentReqNum" type="text" size="35" maxlength="155" style="width: 200px;"
value='<c:out value="${searchVO.incidentReqNum}"/>' title="<spring:message code="title.search" /> <spring:message code="input.input" />" >
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<label>신청자:</label>
<input class="s_input" name="reqUser" type="text" size="35" maxlength="155" style="width: 200px;"
value='<c:out value="${searchVO.reqUser}"/>' title="<spring:message code="title.search" /> <spring:message code="input.input" />" >
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<label>제목:</label>
<input class="s_input" name="incidentTitle" type="text" size="35" maxlength="155" style="width: 200px;"
value='<c:out value="${searchVO.incidentTitle}"/>' title="<spring:message code="title.search" /> <spring:message code="input.input" />" >
</td>
</tr>
</tbody>
</table>
<div class="btnArea">
<button type="button" class="btn-search" onclick="fncSearchSvcDeskList(); return false;" title="조회">조회</button>
</div>
</div>
<!--//검색 :e -->
<!-- tbl list : start -->
<div class="tbl_list" >
<!-- 목록영역 -->
<table class="table" summary="<spring:message code="common.summary.list" arguments="자산관리" />">
<caption> 서비스데스크 인스던트 관리 <spring:message code="title.list" /></caption>
<colgroup>
<col style="width: 16%;">
<col style="width: 16%;">
<col style="width: 8%;">
<col style="width: 8%;">
<col style="width: 8%;">
<col style="width: 8%;">
<col style="width: 6%;">
<col style="width: 8%;">
<col style="width: *;">
</colgroup>
<thead>
<tr>
<th>신청번호</th>
<th>접수번호</th>
<th>서비스</th>
<th>조치(예정)담당자</th>
<th>신청일시</th>
<th>신청자</th>
<th>진행상태</th>
<th>완료(예정)일시</th>
<th>제목</th>
</tr>
</thead>
<tbody class="ov">
<c:if test="${fn:length(resultList) == 0}">
<tr>
<td colspan="8"><spring:message code="common.nodata.msg" /></td>
</tr>
</c:if>
<c:forEach var="incidentReqList" items="${resultList}" varStatus="status">
<tr>
<td> <a href="javascript:fncSelectReqIncident('${incidentReqList.vcReqIncidentNum}')" style="text-align: center;">${incidentReqList.vcReqIncidentNum}</a>
<td><c:out value="${incidentReqList.vcIncidentNum}"/></td>
<td><c:out value="${incidentReqList.vcServiceName}"/></td>
<td><c:out value="${incidentReqList.vcChargeUser}"/></td>
<td><c:out value="${incidentReqList.dtReqDateTime}"/></td>
<td><c:out value="${incidentReqList.vcReqUser}"/></td>
<td><c:out value="${incidentReqList.vcReqStatus}"/></td>
<td><c:out value="${incidentReqList.dtCompleteReqDateTime}"/></td>
<td><c:out value="${incidentReqList.vcIncidentTitle}"/></td>
</tr>
</c:forEach>
</tbody>
</table>
</div>
<!-- tbl list : end -->
<c:if test="${!empty searchVO.pageIndex }">
<!-- paging navigation -->
<div class="pagination">
<ul><ui:pagination paginationInfo="${paginationInfo}" type="image" jsFunction="linkPage"/></ul>
</div>
</c:if>
<!-- main btn : start -->
<div class="btn_group">
<div>
<button type="button" class="btn-function" title="등록" onclick="fncAddSvcDeskReqInsert(); return false;" ><spring:message code="button.create" /> <!-- 등록 -->
</div>
</div>
<!-- main btn : end -->
</div>
<!-- body_wrap :start -->
<input type="hidden" name="pageIndex" value="<c:out value='${searchVO.pageIndex}'/>"/>
<input type="hidden" name="pageUnit" value="<c:out value='${searchVO.pageSize}'/>"/> <!-- 2025.12.04 나혁제 페이지당건수 -->
<!-- 입력조건 -->
<input type="hidden" name="complete" id="complete" value=""/>
<input type="hidden" name="status" id="status" value=""/>
<!-- 상세조회 입력조건 -->
<input type="hidden" name="vcReqIncidentNum" id="vcReqIncidentNum" value=""/>
</form:form>

View File

@ -0,0 +1,481 @@
<!DOCTYPE html>
<%
/**
* @Class Name : SvcDeskReqUpdate.jsp
* @Description : 서비스데스크 인스턴스 신청 변경 화면
* @Modification Information
* @
* @ 수정일 수정자 수정내용
* @ ------- -------- ---------------------------
* @ 2025.12.16 나혁제 최초 생성
*
* @author URP 인프라본부 나혁제
* @since 2025.12.16
* @version 1.0
* @see
*
* Copyright (C) 2009 by MOPAS All right reserved.
*/
%>
<%@ page language="java" 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="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %>
<title> 인스던트 신청 수정 </title>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<script type="text/javascript" src="<c:url value="/validator.do"/>"></script>
<script type="text/javascript" src="<c:url value='/egov/js/showModalDialog.js'/>" ></script>
<!-- tinyMCE Editor -->
<script charset="utf-8" type="text/javascript" src="${pageContext.request.contextPath}/lib/oss/tinymce/tinymce.min.js"></script>
<!-- tinymce setting 2025.05.12 나혁제 tinymce_uritms_setting.js 이관 -->
<script charset="utf-8" type="text/javascript" src="<c:url value='/js/tinymce_uritms_setting.js?ver=1'/>" ></script>
<!-- validation 처리 -->
<validator:javascript formName="svcDeskReqManage" staticJavascript="false" xhtml="true" cdata="false"/>
<!-- 파일처리 -->
<script type="text/javascript" src="<c:url value='/egov/js/EgovMultiFiles.js'/>" ></script>
<!-- 시간처리 -->
<script type="text/javascript" src="${ctx}/js/js-calendar/jquery-ui-timepicker-addon.js"></script>
<link rel="stylesheet" type="text/css" href="${ctx}/css/jquery-ui-timepicker-addon.css">
<script type="text/javaScript" language="javascript">
//----------------------------------------
// 화면 초기화
// ----------------------------------------
$(document).ready(function()
{
// 접수일시, 완료요청일시 시간까지 세팅
$("#dtReqDateTime, #dtCompleteReqDateTime").datetimepicker({
dateFormat:'yy-mm-dd',
monthNamesShort:[ '1월', '2월', '3월', '4월', '5월', '6월', '7월', '8월', '9월', '10월', '11월', '12월' ],
dayNamesMin:[ '일', '월', '화', '수', '목', '금', '토' ],
changeMonth:true,
changeYear:true,
showMonthAfterYear:true,
// timepicker 설정
timeFormat:'HH:mm',
controlType:'select',
oneLine:true,
});
// 멀티파일 설정
var maxFileNum = 3;
var multi_selector = new MultiSelector( document.getElementById( 'egovComFileList' ), maxFileNum );
multi_selector.addElement( document.getElementById( 'egovComFileUploader' ) );
// drawEditor("");
drawEditor("serviceBody", "", false);
});
//----------------------------------------
// 화면 초기화(Form 완전 로딩후 )
// ----------------------------------------
$(window).on("load", function()
{
var strForm = document.getElementById("serviceBody2").value;
drawEditor("serviceBody", strForm, true);
});
//----------------------------------------
// 목록 화면으로 이동처리
// ----------------------------------------
function fncSvcDeskReqList()
{
var varFrom = document.getElementById("svcDeskReqManage");
varFrom.action = "<c:url value='/srm/searchReqIncident.do'/>";
varFrom.submit();
}
//----------------------------------------
// 사용자 검색 팝업
// ----------------------------------------
function fn_User_Search( strTitle
, frmUniqId
, frmEmplNo
, frmEmplyrNm
, frmOrgnztNm
, multiUserSelectYn
)
{
var arrParam = new Array(6);
arrParam[0] = window;
arrParam[1] = strTitle;
arrParam[2] = frmUniqId;
arrParam[3] = frmEmplNo;
arrParam[4] = frmEmplyrNm;
arrParam[5] = frmOrgnztNm;
var strUrl = "/cmm/selectUserListPopup.do?multiUserSelectYn="+multiUserSelectYn;
window.showModalDialog("<c:url value='"+strUrl+"' />"
, arrParam
,"dialogWidth:900px;dialogHeight:750px;resizable:yes;center:yes");
}
//----------------------------------------
// 서비스 정보 변경시
// ----------------------------------------
function selInServiceCode()
{
var inServiceCode = $('#inServiceCode option:selected').val() ;
var inData = {};
inData = {"inServiceCode":inServiceCode};
proc.fn_get_service_info(inData);
}
//----------------------------------------
// 인스던트 변경처리
// ----------------------------------------
function fncSvcDeskReqIncidentUpdate()
{
var bYes = confirm("인스던트 신청 변경 처리를 하시겠습니까?");
if(bYes==false) return;
var form = document.svcDeskReqManage;
form.txIncidentBody.value = tinyMCE.get("serviceBody").getContent(); // 평문
//input item Client-Side validate
if (!validateSvcDeskReqManage(form))
{
return false;
}
// 파일체크 로직 추가
if (!fncAttachFileCheck())
{
return false;
}
proc.fn_incident_save();
}
//----------------------------------------
// 2025.12.02 나혁제 파일체크 로직 추가
// 첨부파일 체크
// ----------------------------------------
function fncAttachFileCheck()
{
// 결과가 false인경우 허용되지 않음
var resultExtension = EgovMultiFilesChecker.checkExtensions("egovComFileUploader", "<c:out value='${fileUploadExtensions}'/>");
if (!resultExtension)
{
return false;
}
// 파일당 1M까지 허용 (1K=1024), 결과가 false인경우 허용되지 않음
var resultSize = EgovMultiFilesChecker.checkFileSize("egovComFileUploader", <c:out value='${fileUploadMaxSize}'/>);
if (!resultSize)
{
return false;
}
return true;
}
//----------------------------------------
// 팝업 오픈
// ----------------------------------------
function PopupOpen(strUrl, hei, wid, pagetitle)
{
var page = "/common/PageRedirection.do?Page="+ strUrl
+ "&PopupYn=Y";
var $dialog = $('<div></div>')
.html('<iframe style="border: 0px; " src="' + page + '" width="100%" height="100%"></iframe>')
.dialog({
autoOpen: false
, modal: true
, height: hei
, width: wid
, title: pagetitle
, open: function (event, ui)
{
$(".ui-icon-closethick").remove(); // 닫기 버튼 제거
$('.ui-dialog-titlebar-close').css({
width: '30px' // 닫기 버튼 너비
// , height: '50px' // 닫기 버튼 높이
});
$(this).parent().find(".ui-dialog-titlebar").hide(); // 타이틀바 안보이게 처리
}
, closeText: '닫기'
});
$dialog.dialog('open');
// 팝업 화면 맨앞으로 배치
$(".ui-dialog").css("z-index", "99");
}
//----------------------------------------
// Ajax 서버 통신 모음
// ----------------------------------------
var proc =
{
// 서비스 정보 수정 및 삭제
fn_incident_save : function ()
{
var strUrl = "";
strUrl = "/srm/updateReqIncident.do";
var form = $('#svcDeskReqManage')[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)
{
if(data.resultCd=="0")
{
alert("수정 완료 되었습니다.");
fncSvcDeskReqList();
}
else
{
alert("오류코드["+data.resultCd+"], 오류메세지["+data.resultMsg+"]");
}
},
error: function(errorThrown)
{
alert("인스던트 신청 정보 수정 처리중 오류가 발생 하였습니다. \n 시스템 관리자에게 연락바랍니다.");
console.log(JSON.stringify(errorThrown));
}
});
}
,
// 서비스정보 추출
fn_get_service_info : function (inData)
{
$.ajax({
url: '/srm/getIncidentForm.do'
, type: 'post'
, data: JSON.stringify(inData)
, dataType: 'json'
, contentType: 'application/json'
, async: false
, success: function(data)
{
console.log(JSON.stringify(data));
// 제목세팅
$('#vcIncidentTitle').val(data.resultService.vcServiceName);
// 조치예정자 고유번호
$('#inChargeUser').val(data.resultService.inChargeUser);
// 조치예정자명
$('#vcChargeUser').val(data.resultService.vcChargeUser);
// 본문세팅
// drawEditor(data.resultService.txDefaultForm);
drawEditor("serviceBody", data.resultService.txDefaultForm, false);
},
error: function(errorThrown)
{
alert("자산 중분류 조회중 오류가 발생하였습니다. \n 시스템관리자에게 문의해 주시기 바랍니다.");
console.log(JSON.stringify(errorThrown));
}
});
}
}
</script>
<!-- javascript warning tag -->
<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript>
<form:form modelAttribute="svcDeskReqManage" name="svcDeskReqManage" method="post" enctype="multipart/form-data">
<!-- body_wrap :start -->
<div class="body_wrap">
<!-- main title -->
<div class="main_titWrap">
<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="SR관리">SR관리</a></li>
<li>인스던트 신청</li>
</ul>
</div>
</div>
</div>
<!--//location :e -->
</div>
<!--//main title -->
<!-- Form 테이블 :start -->
<div class="bbs_view">
<!-- 등록폼 -->
<table class="tbl_form" summary="<spring:message code="common.summary.list" arguments="등록" />">
<caption>인스던트 등록</caption>
<colgroup>
<col style="width: 10%;">
<col style="width: 30%">
<col style="width: 10%">
<col style="width: 20%;">
<col style="width: 10%">
<col style="width: 20%;">
</colgroup>
<tbody>
<tr>
<th> 신청번호 </th>
<td> <c:out value="${resultReqIncident.vcReqIncidentNum}"/> </td>
<th> 신청자 </th>
<td>
<input type="text" name="vcReqUser" id="vcReqUser" value="${resultReqIncident.vcReqUser}" readonly />
<a href="<c:url value='/cmm/selectUserListPopup.do' />" target="_blank" title="새 창으로 이동" onclick="fn_User_Search('조치예정', 'inReqUser', '', 'vcReqUser', '', '');return false;">
<img src="<c:url value='/egov/images/egovframework/com/cmm/btn/btn_search.gif' />" alt="조치예정자 검색" title="조치예정자 검색">
</a>
<input type="hidden" name="inReqUser" id="inReqUser" value="${resultReqIncident.inReqUser}" >
</td>
<th> 신청일시 </th>
<td>
<input type="text" class="btn_calendar" name="dtReqDateTime" id="dtReqDateTime" value="${resultReqIncident.dtReqDateTime}" readonly style="width:80%;"/>
</td>
</tr>
<tr>
<th> 서비스 </th>
<td>
<select name="inServiceCode" id="inServiceCode" onchange="selInServiceCode()" style="width: 80%;" >
<c:forEach items="${serviceList}" var="result" varStatus="status">
<option value="${result.value}" <c:if test="${result.value == resultReqIncident.inServiceCode}">selected</c:if> > ${result.label} </option><!-- 분류코드명 -->
</c:forEach>
</select>
</td>
<th> 조치예정자 </th>
<td>
<input type="text" name="vcChargeUser" id="vcChargeUser" value="${resultReqIncident.vcChargeUser}"/>
<a href="<c:url value='/cmm/selectUserListPopup.do' />" target="_blank" title="새 창으로 이동" onclick="fn_User_Search('조치예정', 'inChargeUser', '', 'vcChargeUser', '', '');return false;">
<img src="<c:url value='/egov/images/egovframework/com/cmm/btn/btn_search.gif' />" alt="조치예정자 검색" title="조치예정자 검색">
</a>
<input type="hidden" name="inChargeUser" id="inChargeUser" value="${resultReqIncident.inChargeUser}" >
</td>
<th> 완료요청일시 </th>
<td>
<input type="text" class="btn_calendar" name="dtCompleteReqDateTime" id="dtCompleteReqDateTime" value="${resultReqIncident.dtCompleteReqDateTime}" readonly style="width:80%;"/>
</td>
</tr>
<tr>
<th rowspan=2 > 제목 </th>
<td rowspan=2 colspan=2 >
<input type="text" name="vcIncidentTitle" id="vcIncidentTitle" value="${resultReqIncident.vcIncidentTitle}" style="width:90%;"/>
</td>
<th><spring:message code="cop.atchFile" /></th>
<td colspan=2>
<!-- attached file Start -->
<div>
<input type="file" name="file_1" id="egovComFileUploader" onChange="fnImgChange(this)" multiple>
</div>
<div id="egovComFileList"></div>
</div>
<!-- attached file End -->
</td>
</tr>
<tr>
<th>기본첨부파일</th>
<td colspan=2>
<c:import url="/cmm/selectFileInfs.do" charEncoding="utf-8">
<c:param name="param_atchFileId" value="${resultReqIncident.atchFileId}" />
<c:param name="strItmsYn" value="Y" />
</c:import>
</td>
</tr>
</tbody>
</table>
<textarea id="serviceBody" name="serviceBody" ></textarea>
<textarea id="serviceBody2" name="serviceBody2" style="display:none;">${resultReqIncident.txIncidentBody}</textarea>
</div>
<!-- main btn : start -->
<div class="btn_group">
<!-- 왼쪽영역-->
<div style="text-align: left;position: absolute;">
<!-- 목록 -->
<button type="button" class="btn-function" id="btnList" style="background: blue;" onclick="fncSvcDeskReqList(); return false;" title="<spring:message code="button.list"/>">
<spring:message code="button.list"/>
</button>
</div>
<!--//왼쪽영역-->
<!-- 오른쪽영역-->
<button type="button" class="btn-etc" title="<spring:message code="수정" />" onclick="fncSvcDeskReqIncidentUpdate(); return false;">
수정
</button>
<!-- 오른쪽영역-->
</div>
<!-- main btn : end -->
</div>
<!-- body_wrap :end -->
<!-- 검색조건 유지 -->
<input type="hidden" name="orgnztId" value="" >
<input type="hidden" name="searchCondition" value="<c:out value='${searchVO.searchCondition}'/>" >
<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="" >
<!-- 입력정보 -->
<input type="hidden" id="txIncidentBody" name="txIncidentBody" value="" >
<input type="hidden" id="vcReqIncidentNum" name="vcReqIncidentNum" value="${resultReqIncident.vcReqIncidentNum}" >
</form:form>

View File

@ -105,9 +105,6 @@
$(window).on("load", function() $(window).on("load", function()
{ {
var strForm = document.getElementById("serviceBody2").value; var strForm = document.getElementById("serviceBody2").value;
// drawEditor(strForm);
drawEditor("serviceBody", strForm, false); drawEditor("serviceBody", strForm, false);
}); });

View File

@ -38,8 +38,22 @@
<!-- bootstrap end --> <!-- bootstrap end -->
<link rel="stylesheet" type="text/css" href="${ctx}/css/import.css?ver=1"> <link rel="stylesheet" type="text/css" href="${ctx}/css/import.css?ver=1">
<link rel="stylesheet" href="${ctx}/js/js-calendar/calendar-jquery-ui.css">
<script type="text/javascript" src="${ctx}/js/common_script.js?ver=1"></script> <script type="text/javascript" src="${ctx}/js/common_script.js?ver=1"></script>
<script type="text/javascript" src="${ctx}/js/jquery-2.2.4.min.js"></script>
<script type="text/javascript" src="${ctx}/js/js-calendar/jquery.js"></script>
<script type="text/javascript" src="${ctx}/js/js-calendar/jquery-ui.js"></script>
<script type="text/javascript" src="${ctx}/js/js-calendar/calendar.js"></script>
<script type="text/javascript" src="${ctx}/js/js-calendar/jquery.ui.monthpicker.js"></script>
<!-- Resources -->
<script type="text/javascript" src="${ctx}/js/amcharts5/index.js"></script>
<script type="text/javascript" src="${ctx}/js/amcharts5/xy.js"></script>
<script type="text/javascript" src="${ctx}/js/amcharts5/percent.js"></script>
<script type="text/javascript" src="${ctx}/js/amcharts5/themes/Animated.js"></script>
<title>사용자포틀릿관리2</title> <title>사용자포틀릿관리2</title>
<style> <style>
@ -273,17 +287,21 @@
vEmptyportl = $('.col-lg-4'); vEmptyportl = $('.col-lg-4');
} }
alert(vEmptyportl);
var iChoPort = -1; var iChoPort = -1;
var objChoPort ; var objChoPort ;
for(var i=0; i<vEmptyportl.length; i++) for(var i=0; i<vEmptyportl.length; i++)
{ {
var objPrsnlId = vEmptyportl.eq(i).find('input[name="prsnlId"]').val(); var objPrsnlId = vEmptyportl.eq(i).find('input[name="prsnlId"]').val();
// 빈술롯
if(typeof objPrsnlId == "undefined" || objPrsnlId == "" || objPrsnlId == null) if(typeof objPrsnlId == "undefined" || objPrsnlId == "" || objPrsnlId == null)
{ {
if(potlWidth > 450) if(potlWidth > 450)
{ {
iChoPort = i+4; iChoPort = i+10;
} }
else else
{ {
@ -296,6 +314,8 @@
} }
} }
alert(iChoPort);
$.ajax({ $.ajax({
url :"<c:url value='/potl/insertUserPortlet.do'/>" url :"<c:url value='/potl/insertUserPortlet.do'/>"
, type: "POST" , type: "POST"
@ -491,9 +511,6 @@
<input name="prsnlIdForInsert" type="hidden" > <input name="prsnlIdForInsert" type="hidden" >
<input id="portletCnt" type="hidden" value="${portletCnt}"> <input id="portletCnt" type="hidden" value="${portletCnt}">
<%-- 2025.03.10 나혁제 신디자인 적용
<div class="inner clearfix">
--%>
<div id="container"> <div id="container">
<div class="content"> <div class="content">
@ -517,7 +534,6 @@
<!--//location :e --> <!--//location :e -->
</div> </div>
<span>※포틀릿을 하나도 지정하지 않는 경우 업무게시판, 공지사항 포틀릿은 기본으로 보여집니다.</span> <span>※포틀릿을 하나도 지정하지 않는 경우 업무게시판, 공지사항 포틀릿은 기본으로 보여집니다.</span>
<br><br> <br><br>
<div class="pgmList"> <div class="pgmList">
@ -531,7 +547,9 @@
<div class="row"> <div class="row">
<c:forEach begin="1" end="3" step="1" varStatus="status1"> <!-- 3개슬롯 3라인 , 2개슬롯 10라인 -->
<%-- 라인당 3개 슬롯 --%>
<c:forEach begin="1" end="9" step="1" varStatus="status1">
<c:set var="bPortYn">0</c:set> <c:set var="bPortYn">0</c:set>
<c:forEach var="result" items="${resultList}" varStatus="status2"> <c:forEach var="result" items="${resultList}" varStatus="status2">
@ -572,12 +590,13 @@
</c:forEach> </c:forEach>
<%-- 라인당 2개 슬롯 --%>
<c:set var="iEndIdx">${iMaxSeq}</c:set> <c:set var="iEndIdx">${iMaxSeq}</c:set>
<c:if test="${iMaxSeq < 9}"> <c:if test="${iMaxSeq < 25}">
<c:set var="iEndIdx">9</c:set> <c:set var="iEndIdx">25</c:set>
</c:if> </c:if>
<c:forEach begin="4" end="${iEndIdx}" step="1" varStatus="status1"> <c:forEach begin="10" end="${iEndIdx}" step="1" varStatus="status1">
<c:set var="bPortYn">0</c:set> <c:set var="bPortYn">0</c:set>
@ -642,5 +661,5 @@
--%> --%>
</div> </div>
</div> </div>
</div>
</form:form> </form:form>

View File

@ -348,6 +348,7 @@
</div> </div>
<!--//왼쪽영역--> <!--//왼쪽영역-->
<!-- 오른쪽영역--> <!-- 오른쪽영역-->
<c:if test="${delAuthYn == 'Y'}">
<div> <div>
<!-- 수정 --> <!-- 수정 -->
<button type="button" id="btnUpdate" class="btn-etc" onclick="fn_update_prsnlportlet(); return false;" title="<spring:message code="button.update" />"> <button type="button" id="btnUpdate" class="btn-etc" onclick="fn_update_prsnlportlet(); return false;" title="<spring:message code="button.update" />">
@ -358,6 +359,7 @@
<spring:message code="button.delete" /> <spring:message code="button.delete" />
</button> </button>
</div> </div>
</c:if>
</div> </div>
<!-- main btn : end --> <!-- main btn : end -->

View File

@ -124,6 +124,59 @@
} }
} }
/* ********************************************************
* 2025.12.08 나혁제
* 체크박스에 체크된 개인화메뉴 사용상태변경 처리
******************************************************** */
function fn_update_prsnlportlet()
{
var checkField = document.frm.checkField;
var prsnlId = document.frm.prsnlId;
var useAt = document.frm.useAt;
var checkPrsnlIds = "";
var checkUseAts = "";
var checkedCount = 0;
if(checkField)
{
if(checkField.length > 1)
{
for(var i=0; i < checkField.length; i++)
{
if(checkField[i].checked)
{
checkPrsnlIds += ((checkedCount==0? "" : ",") + prsnlId[i].value);
checkUseAts += ((checkedCount==0? "" : ",") + useAt[i].value);
checkedCount++;
}
}
}
else
{
if(checkField.checked)
{
checkPrsnlIds = prsnlId.value;
}
}
}
if(checkedCount == 0)
{
alert("선택된 메뉴가 없습니다.");
return false;
}
if(confirm("사용상태 변경을 하시겠습니까?"))
{
document.frm.checkedPrsnlIdForDel.value = checkPrsnlIds;
document.frm.checkUseAts.value = checkUseAts;
document.frm.action = "<c:url value='/sys/updateStatusPrsnlPortletMulti.do'/>";
document.frm.submit();
}
}
/* ******************************************************** /* ********************************************************
* 모두선택 처리 함수 * 모두선택 처리 함수
******************************************************** */ ******************************************************** */
@ -175,6 +228,7 @@
<input type="hidden" name="pageIndex" value="<c:out value='${searchVO.pageIndex}'/>"> <input type="hidden" name="pageIndex" value="<c:out value='${searchVO.pageIndex}'/>">
<input name="checkedPrsnlIdForDel" type="hidden" /> <input name="checkedPrsnlIdForDel" type="hidden" />
<input name="checkUseAts" type="hidden" />
<div class="body_wrap"> <div class="body_wrap">
<!-- 2025.03.10 나혁제 신디자인 적용 <!-- 2025.03.10 나혁제 신디자인 적용
@ -236,12 +290,12 @@
<caption></caption> <caption></caption>
<colgroup> <colgroup>
<col style="width:5%" /> <col style="width:3%" />
<col style="width:10%" />
<col style="width:*%" />
<col style="width:20%" />
<col style="width:15%" /> <col style="width:15%" />
<col style="width:15%" /> <col style="width:15%" />
<col style="width:auto" />
<col style="width:20%" />
<col style="width:20%" />
</colgroup> </colgroup>
<thead> <thead>
@ -257,6 +311,8 @@
<th scope="col">포틀릿 URL</th> <th scope="col">포틀릿 URL</th>
<th scope="col">실제 포틀릿 크기(px)</th> <th scope="col">실제 포틀릿 크기(px)</th>
<th scope="col">포틀릿 미리보기</th> <th scope="col">포틀릿 미리보기</th>
<th scope="col">사용여부</th>
</tr> </tr>
</thead> </thead>
@ -281,6 +337,15 @@
<img src="${result.portletImgPath}" name="IMG_VIEW" id="IMG_VIEW" align="middle" alt="<spring:message code='comUssOlpQtm.title.image'/><spring:message code='button.preview'/>" title="<spring:message code='comUssOlpQtm.title.image'/><spring:message code='button.preview'/>"><!-- alt="이미지미리보기" title="이미지미리보기" --> <img src="${result.portletImgPath}" name="IMG_VIEW" id="IMG_VIEW" align="middle" alt="<spring:message code='comUssOlpQtm.title.image'/><spring:message code='button.preview'/>" title="<spring:message code='comUssOlpQtm.title.image'/><spring:message code='button.preview'/>"><!-- alt="이미지미리보기" title="이미지미리보기" -->
</div> </div>
</td> </td>
<!-- 2025.12.08 나혁제 사용여부 추가 -->
<td>
<select name="useAt" style="width: 80%;" title="사용여부"> <!-- 권한선택 -->
<option value="Y" <c:if test="${result.useAt == 'Y'}">selected</c:if> >사용</option>
<option value="N" <c:if test="${result.useAt == 'N'}">selected</c:if> >미사용</option>
</select>
</td>
</tr> </tr>
</c:forEach> </c:forEach>
</tbody> </tbody>
@ -300,8 +365,12 @@
<!-- main btn : start --> <!-- main btn : start -->
<div class="btn_group"> <div class="btn_group">
<div> <div>
<c:if test="${delAuthYn == 'Y'}">
<button type="button" class="btn-function" title="등록" onclick="fn_insert_prsnlportlet(); return false;" ><spring:message code="button.create" /> <!-- 등록 --> <button type="button" class="btn-function" title="등록" onclick="fn_insert_prsnlportlet(); return false;" ><spring:message code="button.create" /> <!-- 등록 -->
<button type="button" class="btn-function" title="삭제" onclick="fn_delete_prsnlportlet(); return false;" ><spring:message code="title.delete" /> <!-- 삭제 --> <button type="button" class="btn-function" title="삭제" onclick="fn_delete_prsnlportlet(); return false;" ><spring:message code="title.delete" /> <!-- 삭제 -->
</c:if>
<button type="button" class="btn-function" title="상태변경" onclick="fn_update_prsnlportlet(); return false;" > 사용상태변경<!-- 사용상태변경 -->
</div> </div>
</div> </div>

View File

@ -208,7 +208,7 @@
<!-- 포틀릿 영역 --> <!-- 포틀릿 영역 -->
<div class="week_news_wrap"> <div class="week_news_wrap">
<div class="row"> <div class="row">
<c:forEach begin="1" end="3" step="1" varStatus="status1"> <c:forEach begin="1" end="9" step="1" varStatus="status1">
<c:set var="bPortYn">0</c:set> <c:set var="bPortYn">0</c:set>
<c:forEach var="result" items="${resultList}" varStatus="status2"> <c:forEach var="result" items="${resultList}" varStatus="status2">
@ -248,7 +248,7 @@
</c:forEach> </c:forEach>
<c:forEach begin="4" end="9" step="1" varStatus="status1"> <c:forEach begin="10" end="25" step="1" varStatus="status1">
<c:set var="bPortYn">0</c:set> <c:set var="bPortYn">0</c:set>