새로만들기, ID/PASS/회원가입 기능추가
This commit is contained in:
parent
7334350e98
commit
cbf698b4af
@ -12,7 +12,11 @@
|
||||
<attribute name="gradle_used_by_scope" value="main,test"/>
|
||||
</attributes>
|
||||
</classpathentry>
|
||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-16/"/>
|
||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/openJDK16">
|
||||
<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.buildship.core.gradleclasspathcontainer">
|
||||
<attributes>
|
||||
|
||||
@ -87,6 +87,38 @@ public class CommonService
|
||||
return uniqId;
|
||||
}
|
||||
|
||||
/**
|
||||
* 각 기능에 대한 고유ID 획득(미인증)
|
||||
* @author urp 인프라본부 나혁제
|
||||
* 작성일 : 2025.01.17
|
||||
*/
|
||||
public String noAuthGetIdGen(String strIdName) throws Exception
|
||||
{
|
||||
log.info(">>>>>>>>>> noAuthGetIdGen <<<<<<<<<<");
|
||||
|
||||
log.info("strIdName [{}]", strIdName);
|
||||
|
||||
Map<String, Object> bodyMap = new LinkedHashMap();
|
||||
Map<String, Object> returnMap = new LinkedHashMap();
|
||||
|
||||
// Body Setting Start ---------------------------------
|
||||
bodyMap.put("IdName", strIdName);
|
||||
// Body Setting End ---------------------------------
|
||||
|
||||
// RestApi Call Start ---------------------------------
|
||||
returnMap = restApiCallUtil.RestApiCallNoAuth(bodyMap, "/main/noAuthGetIdGen.do");
|
||||
// RestApi Call End ---------------------------------
|
||||
|
||||
// Return Data Setting Start --------------------------
|
||||
String uniqId = (String)returnMap.get("strGenId");
|
||||
// Return Data Setting End --------------------------
|
||||
|
||||
log.info("<<<<<<<<<< noAuthGetIdGen >>>>>>>>>>");
|
||||
|
||||
return uniqId;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 코드정보 추출
|
||||
* @author urp 인프라본부 나혁제
|
||||
|
||||
@ -55,6 +55,7 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter
|
||||
public void configure(HttpSecurity http) throws Exception
|
||||
{
|
||||
// 2026.01.14 나혁제 공통팝업 허용처리
|
||||
// 2026.01.19 나혁제 id 체크 컨트롤러 추가
|
||||
http.csrf().disable()
|
||||
.authorizeRequests()
|
||||
.requestMatchers(PathRequest.toStaticResources().atCommonLocations()).permitAll()
|
||||
@ -62,9 +63,16 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter
|
||||
.antMatchers("/logout*.do" ).permitAll()
|
||||
.antMatchers("/main/logout.do" ).permitAll()
|
||||
.antMatchers("/common/PageRedirection.do" ).permitAll()
|
||||
.antMatchers("/main/searchIdFind.do" ).permitAll()
|
||||
.antMatchers("/main/UserPasswordResetExt.do" ).permitAll()
|
||||
.antMatchers("/egov/js/**" ).permitAll()
|
||||
.antMatchers("/egov/css/**" ).permitAll()
|
||||
.antMatchers("/egov/images/**" ).permitAll()
|
||||
.antMatchers("/EgovModal.do" ).permitAll()
|
||||
.antMatchers("/main/noAuth*.do" ).permitAll()
|
||||
.antMatchers("//validator*" ).permitAll()
|
||||
|
||||
// .antMatchers("/main/searchIdFind.do" ).permitAll()
|
||||
// .antMatchers("/main/UserPasswordResetExt.do" ).permitAll()
|
||||
|
||||
.antMatchers("/").permitAll()
|
||||
.and()
|
||||
.headers().frameOptions().disable()
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package com.urpsys.basefront.controller;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
@ -12,26 +13,33 @@ import javax.servlet.http.HttpSession;
|
||||
|
||||
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.beans.factory.annotation.Value;
|
||||
import org.springframework.security.core.context.SecurityContextHolder;
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.ui.Model;
|
||||
import org.springframework.ui.ModelMap;
|
||||
import org.springframework.validation.BindingResult;
|
||||
import org.springframework.web.bind.annotation.ModelAttribute;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
import org.springframework.web.bind.annotation.ResponseBody;
|
||||
import org.springframework.web.servlet.ModelAndView;
|
||||
|
||||
import com.google.gson.FieldNamingPolicy;
|
||||
import com.google.gson.Gson;
|
||||
import com.google.gson.GsonBuilder;
|
||||
import com.urpsys.basefront.common.egov.util.EgovStringUtil;
|
||||
import com.urpsys.basefront.common.service.CommonService;
|
||||
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.domain.MemberVO;
|
||||
import com.urpsys.basefront.domain.TokenInfo;
|
||||
import com.urpsys.itmsfront.cmm.domain.ComDefaultCodeVO;
|
||||
import com.urpsys.itmsfront.sys.domain.PrsnlPortletCreateVO;
|
||||
import com.urpsys.itmsfront.sys.domain.PrsnlPortletManageVO;
|
||||
import com.urpsys.itmsfront.sys.domain.UserDefaultVO;
|
||||
import com.urpsys.itmsfront.sys.domain.UserManageVO;
|
||||
|
||||
import kong.unirest.HttpResponse;
|
||||
@ -75,6 +83,9 @@ public class MainController
|
||||
@Resource(name = "propertiesService")
|
||||
protected EgovPropertyService propertyService;
|
||||
|
||||
@Autowired
|
||||
private CommonService commonService;
|
||||
|
||||
// @Autowired
|
||||
// HtmlEmailUtil htmlEmailUtil;
|
||||
|
||||
@ -425,11 +436,11 @@ public class MainController
|
||||
* 작성일 : 2026.01.14
|
||||
*/
|
||||
@ResponseBody
|
||||
@RequestMapping(value="/main/searchIdFind.do")
|
||||
@RequestMapping(value="/main/noAuthSearchIdFind.do")
|
||||
public LinkedHashMap<String, Object> searchIdFind( HttpServletRequest request
|
||||
, HttpServletResponse response ) throws Exception
|
||||
{
|
||||
log.info(">>>>>>>>>>>>>>> /main/searchIdFind.do <<<<<<<<<<<<<<<");
|
||||
log.info(">>>>>>>>>>>>>>> /main/noAuthSearchIdFind.do <<<<<<<<<<<<<<<");
|
||||
|
||||
LinkedHashMap<String, Object> resBody = new LinkedHashMap<String, Object>(); // Response Map
|
||||
|
||||
@ -441,14 +452,14 @@ public class MainController
|
||||
bodyMap.put("userEmail" , CommonUtil.getData(request, "userEmail"));
|
||||
|
||||
// RestApi Call Start ---------------------------------
|
||||
returnMap = restApiCallUtil.RestApiCallNoAuth(bodyMap, "/main/searchIdFind.do");
|
||||
returnMap = restApiCallUtil.RestApiCallNoAuth(bodyMap, "/main/noAuthSearchIdFind.do");
|
||||
// RestApi Call End ---------------------------------
|
||||
|
||||
String userId = (String)returnMap.get("userId");
|
||||
|
||||
resBody.put("userId", userId );
|
||||
|
||||
log.info("<<<<<<<<<<<<<<< /main/searchIdFind.do >>>>>>>>>>>>>>>");
|
||||
log.info("<<<<<<<<<<<<<<< /main/noAuthSearchIdFind.do >>>>>>>>>>>>>>>");
|
||||
|
||||
return resBody;
|
||||
}
|
||||
@ -459,11 +470,11 @@ public class MainController
|
||||
* 작성일 : 2026.01.14
|
||||
*/
|
||||
@ResponseBody
|
||||
@RequestMapping(value="/main/UserPasswordResetExt.do")
|
||||
@RequestMapping(value="/main/noAuthUserPasswordResetExt.do")
|
||||
public LinkedHashMap<String, Object> UserPasswordResetExt( HttpServletRequest request
|
||||
, HttpServletResponse response ) throws Exception
|
||||
{
|
||||
log.info(">>>>>>>>>>>>>>> /main/UserPasswordResetExt.do <<<<<<<<<<<<<<<");
|
||||
log.info(">>>>>>>>>>>>>>> /main/noAuthUserPasswordResetExt.do <<<<<<<<<<<<<<<");
|
||||
|
||||
LinkedHashMap<String, Object> resBody = new LinkedHashMap<String, Object>(); // Response Map
|
||||
|
||||
@ -476,7 +487,7 @@ public class MainController
|
||||
bodyMap.put("userEmail" , CommonUtil.getData(request, "userEmail"));
|
||||
|
||||
// RestApi Call Start ---------------------------------
|
||||
returnMap = restApiCallUtil.RestApiCallNoAuth(bodyMap, "/main/UserPasswordResetExt.do");
|
||||
returnMap = restApiCallUtil.RestApiCallNoAuth(bodyMap, "/main/noAuthUserPasswordResetExt.do");
|
||||
// RestApi Call End ---------------------------------
|
||||
|
||||
int resultCd = (int)returnMap.get("resultCd");
|
||||
@ -485,11 +496,178 @@ public class MainController
|
||||
resBody.put("resultCd" , resultCd );
|
||||
resBody.put("resultMsg" , resultMsg );
|
||||
|
||||
log.info("<<<<<<<<<<<<<<< /main/UserPasswordResetExt.do >>>>>>>>>>>>>>>");
|
||||
log.info("<<<<<<<<<<<<<<< /main/noAuthUserPasswordResetExt.do >>>>>>>>>>>>>>>");
|
||||
|
||||
return resBody;
|
||||
}
|
||||
|
||||
/**
|
||||
* 사용자 등록 화면으로 이동한다.
|
||||
* @author urp 인프라본부 나혁제
|
||||
* 작성일 : 2026.01.20
|
||||
*/
|
||||
@RequestMapping("/main/noAuthUserInsertView.do")
|
||||
public String noAuthUserInsertView( @ModelAttribute("userSearchVO" ) UserDefaultVO userSearchVO
|
||||
, @ModelAttribute("userManageExtVO") UserManageVO userManageVO
|
||||
, Model model) throws Exception
|
||||
{
|
||||
log.info(" >>>>>>>>>>>>>>> /main/noAuthUserInsertView.do <<<<<<<<<<<<<<< ");
|
||||
|
||||
Map<String, Object> bodyMap = new LinkedHashMap();
|
||||
Map<String, Object> returnMap = new LinkedHashMap();
|
||||
|
||||
ComDefaultCodeVO voComCode = new ComDefaultCodeVO();
|
||||
|
||||
List<Map<String, Object>> listComCode = new ArrayList();
|
||||
List<?> chglistComCode = new ArrayList();
|
||||
|
||||
// 조직정보 추출
|
||||
voComCode = new ComDefaultCodeVO();
|
||||
voComCode.setTableNm("COMTNORGNZTINFO");
|
||||
|
||||
// Body Setting Start ---------------------------------
|
||||
bodyMap = ConvertUtils.convertToMap(voComCode);
|
||||
// Body Setting End ---------------------------------
|
||||
|
||||
// RestApi Call Start ---------------------------------
|
||||
returnMap = restApiCallUtil.RestApiCallNoAuth(bodyMap, "/main/noAuthSelectOgrnztIdDetail.do");
|
||||
// RestApi Call End ---------------------------------
|
||||
|
||||
listComCode = (List<Map<String, Object>>)returnMap.get("resultList");
|
||||
chglistComCode = ConvertUtils.convertToValueObjects(listComCode, ComDefaultCodeVO.class);
|
||||
model.addAttribute("orgnztId_result", chglistComCode);
|
||||
|
||||
// 그룹정보 추출
|
||||
voComCode = new ComDefaultCodeVO();
|
||||
voComCode.setTableNm("COMTNORGNZTINFO");
|
||||
|
||||
// Body Setting Start ---------------------------------
|
||||
bodyMap = ConvertUtils.convertToMap(voComCode);
|
||||
// Body Setting End ---------------------------------
|
||||
|
||||
// RestApi Call Start ---------------------------------
|
||||
returnMap = restApiCallUtil.RestApiCallNoAuth(bodyMap, "/main/noAuthSelectGroupIdDetail.do");
|
||||
// RestApi Call End ---------------------------------
|
||||
|
||||
listComCode = (List<Map<String, Object>>)returnMap.get("resultList");
|
||||
chglistComCode = ConvertUtils.convertToValueObjects(listComCode, ComDefaultCodeVO.class);
|
||||
model.addAttribute("groupId_result", chglistComCode); // 소속기관코드를 코드정보로부터 조회 - COM025
|
||||
|
||||
log.info(" <<<<<<<<<<<<<<< /main/noAuthUserInsertView.do >>>>>>>>>>>>>>> ");
|
||||
|
||||
return "uritms-base-popup1/main/PopUserRegist";
|
||||
}
|
||||
|
||||
/**
|
||||
* 입력한 사용자아이디의 중복여부를 체크하여 사용가능여부를 확인(미인증)
|
||||
* @author urp 인프라본부 나혁제
|
||||
* 작성일 : 2026.01.20
|
||||
*/
|
||||
@RequestMapping(value = "/main/noAuthIdDplctCnfirmAjax.do")
|
||||
public ModelAndView noAuthIdDplctCnfirmAjax(@RequestParam Map<String, Object> commandMap) throws Exception
|
||||
{
|
||||
log.info(">>>>>>>>>>>>>>> /main/noAuthIdDplctCnfirmAjax.do <<<<<<<<<<<<<<<");
|
||||
|
||||
Map<String, Object> bodyMap = new LinkedHashMap();
|
||||
Map<String, Object> returnMap = new LinkedHashMap();
|
||||
|
||||
ModelAndView modelAndView = new ModelAndView();
|
||||
modelAndView.setViewName("jsonView");
|
||||
|
||||
String checkId = (String) commandMap.get("checkId");
|
||||
|
||||
// Body Setting Start ---------------------------------
|
||||
// bodyMap = ConvertUtils.convertToMap(commandMap);
|
||||
bodyMap.put("checkId", checkId);
|
||||
// Body Setting End ---------------------------------
|
||||
|
||||
// RestApi Call Start ---------------------------------
|
||||
returnMap = restApiCallUtil.RestApiCallNoAuth(bodyMap, "/main/noAuthIdDplctCnfirmAjax.do");
|
||||
// RestApi Call End ---------------------------------
|
||||
|
||||
// Return Data Setting Start --------------------------
|
||||
int usedCnt = (int)returnMap.get("usedCnt");
|
||||
// Return Data Setting End --------------------------
|
||||
|
||||
modelAndView.addObject("usedCnt", usedCnt);
|
||||
modelAndView.addObject("checkId", checkId);
|
||||
|
||||
log.info("<<<<<<<<<<<<<<< /main/noAuthIdDplctCnfirmAjax.do >>>>>>>>>>>>>>>");
|
||||
|
||||
return modelAndView;
|
||||
}
|
||||
|
||||
/**
|
||||
* 회원가입(미인증)
|
||||
* @author urp 인프라본부 나혁제
|
||||
* 작성일 : 2026.01.21
|
||||
*/
|
||||
@ResponseBody
|
||||
@RequestMapping("/main/noAuthUserInsertExt.do")
|
||||
public LinkedHashMap<String, Object> noAuthUserInsertExt( @ModelAttribute("userManageExtVO") UserManageVO userManageVO
|
||||
, Model model) throws Exception
|
||||
{
|
||||
log.info(">>>>>>>>>>>>>>> /main/noAuthUserInsertExt.do <<<<<<<<<<<<<<<");
|
||||
|
||||
Map<String, Object> bodyMap = new LinkedHashMap();
|
||||
Map<String, Object> returnMap = new LinkedHashMap();
|
||||
|
||||
LinkedHashMap<String, Object> resBody = new LinkedHashMap<String, Object>(); // Response Map
|
||||
|
||||
String strReturnUrl="";
|
||||
|
||||
String uniqId = commonService.noAuthGetIdGen("egovUsrCnfrmIdGnrService");
|
||||
|
||||
if(uniqId==null || uniqId.equals(""))
|
||||
{
|
||||
resBody.put("resultCd" , -1 );
|
||||
resBody.put("resultMsg" , "사용자 고유번호 획득시 오류가 발생했습니다. " );
|
||||
}
|
||||
|
||||
userManageVO.setUniqId(uniqId);
|
||||
|
||||
// KISA 보안약점 조치
|
||||
if ("".equals(userManageVO.getOrgnztId()))
|
||||
{
|
||||
userManageVO.setOrgnztId(null);
|
||||
}
|
||||
|
||||
//KISA 보안약점 조치
|
||||
if ("".equals(userManageVO.getGroupId()))
|
||||
{
|
||||
userManageVO.setGroupId(null);
|
||||
}
|
||||
|
||||
// 기본정보 세팅
|
||||
userManageVO.setPasswordHint ("P01");
|
||||
userManageVO.setPasswordCnsr ("없음");
|
||||
userManageVO.setAreaNo ("0000");
|
||||
userManageVO.setHomemiddleTelno("0000");
|
||||
userManageVO.setHomeendTelno ("0000");
|
||||
userManageVO.setHomeadres ("주소없음");
|
||||
userManageVO.setZip ("");
|
||||
userManageVO.setEmplyrSttusCode("A");
|
||||
|
||||
// Body Setting Start ---------------------------------
|
||||
bodyMap = ConvertUtils.convertToMapAll(userManageVO);
|
||||
// Body Setting End ---------------------------------
|
||||
|
||||
// RestApi Call Start ---------------------------------
|
||||
returnMap = restApiCallUtil.RestApiCallNoAuth(bodyMap, "/main/noAuthUserInsertExt.do");
|
||||
// RestApi Call End ---------------------------------
|
||||
|
||||
resBody = (LinkedHashMap<String, Object>)returnMap;
|
||||
|
||||
log.info(">>>>>>>>>>>>>>> /main/noAuthUserInsertExt.do <<<<<<<<<<<<<<<");
|
||||
|
||||
return resBody;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -316,7 +316,7 @@ public class ReportCheckController
|
||||
model.addAttribute("resultForm" , resultForm ); // 보고서 양식 정보
|
||||
model.addAttribute("resultAsset" , resultAsset ); // 보고서 양식 정보
|
||||
|
||||
// 인스던트 정보가 없는경우 0 으로 세팅
|
||||
// 인스던트 정보가 없는경우 0 으로 세팅
|
||||
if(resultIncident.get("inIncidentSeq") == null)
|
||||
{
|
||||
model.addAttribute("inIncidentSeq", 0 );
|
||||
@ -436,6 +436,108 @@ public class ReportCheckController
|
||||
return "uritms-tiles2/srm/ReportCheckUpdate";
|
||||
}
|
||||
|
||||
/**
|
||||
* 보고서 새로만들기 화면으로 이동한다.
|
||||
* @author urp 인프라본부 나혁제
|
||||
* 작성일 : 2026.01.22
|
||||
*/
|
||||
@RequestMapping(value = "/srm/insertCopyViewReportCheck.do")
|
||||
public String insertCopyViewReportCheck( @ModelAttribute("ReportCheckListVo") ReportCheckListVo reportCheckListVo
|
||||
, @ModelAttribute("searchVO") ReportCheckListVo searchVO
|
||||
, HttpServletRequest request
|
||||
, HttpServletResponse response
|
||||
, ModelMap model) throws Exception
|
||||
{
|
||||
log.info(">>>>>>>>>>>>>>> /srm/insertCopyViewReportCheck.do <<<<<<<<<<<<<<<");
|
||||
|
||||
// api in/out map 정의
|
||||
Map<String, Object> bodyMap = new LinkedHashMap();
|
||||
Map<String, Object> returnMap = new LinkedHashMap();
|
||||
|
||||
int inReportSeq = CommonUtil.zeroConvert(reportCheckListVo.getInReportSeq());
|
||||
|
||||
// Body Setting Start ---------------------------------
|
||||
bodyMap.put("inReportSeq", inReportSeq);
|
||||
// Body Setting End ---------------------------------
|
||||
|
||||
// RestApi Call Start ---------------------------------
|
||||
returnMap = restApiCallUtil.RestApiCall(bodyMap, "/srm/getReportWithBodyCheck.do");
|
||||
// RestApi Call End ---------------------------------
|
||||
|
||||
// 결과값 추출 Start ---------------------------------
|
||||
Map<String, Object> resultReportCheck = (Map<String, Object>)returnMap.get("resultReportCheck");
|
||||
List<Map<String, Object>> resultSharings = (List<Map<String, Object>>)returnMap.get("resultSharings");
|
||||
List<Map<String, Object>> resultAssets = (List<Map<String, Object>>)returnMap.get("resultAssets");
|
||||
List<Map<String, Object>> resultApprovals = (List<Map<String, Object>>)returnMap.get("resultApprovals");
|
||||
|
||||
String sharingTxt = (String)returnMap.get("sharingTxt");
|
||||
String privType = (String)returnMap.get("privType");
|
||||
String incidentId = (String)returnMap.get("incidentId");
|
||||
int approvalReq = (int)returnMap.get("approvalReq");
|
||||
|
||||
log.info("sharingTxt [{}]", sharingTxt);
|
||||
log.info("privType [{}]", privType);
|
||||
log.info("approvalReq [{}]", approvalReq);
|
||||
// 결과값 추출 End ---------------------------------
|
||||
|
||||
// 보고서 본문 복호화처리
|
||||
String strReportBody = (String)resultReportCheck.get("txReportBody");
|
||||
String strReportBodyDec = CommonUtil.base64decode(strReportBody);
|
||||
|
||||
resultReportCheck.put("txReportBody", strReportBodyDec);
|
||||
model.addAttribute("sharingTxt" , sharingTxt ); // String
|
||||
model.addAttribute("privType" , privType ); // String
|
||||
model.addAttribute("incidentId" , incidentId ); // String
|
||||
model.addAttribute("approvalReq" , approvalReq ); // int
|
||||
|
||||
model.addAttribute("resultReport" , resultReportCheck ); // Map
|
||||
model.addAttribute("resultSharings" , resultSharings ); // List
|
||||
model.addAttribute("resultAssets" , resultAssets ); // List
|
||||
model.addAttribute("resultApprovals" , resultApprovals ); // List
|
||||
|
||||
// 서비스 정보 추출
|
||||
// RestApi Call Start ---------------------------------
|
||||
returnMap = restApiCallUtil.RestApiCall(bodyMap, "/srm/getInitReportCheck.do");
|
||||
// RestApi Call End ---------------------------------
|
||||
List<Map<String, Object>> resultService = (List<Map<String, Object>>)returnMap.get("resultService");
|
||||
List<Map<String, Object>> resultForm = (List<Map<String, Object>>)returnMap.get("resultForm");
|
||||
|
||||
model.addAttribute("resultService" , resultService ); // 서비스 정보
|
||||
model.addAttribute("resultForm" , resultForm ); // 보고서 양식 정보
|
||||
|
||||
model.addAttribute("dtDownstartDatetime" , CommonUtil.getKST("yyyy-MM-dd HH:mm")); // 시작일시
|
||||
model.addAttribute("dtDownfinishDatetime" , CommonUtil.getKST("yyyy-MM-dd HH:mm")); // 종료일시
|
||||
model.addAttribute("dtStartDatetime" , CommonUtil.getKST("yyyy-MM-dd HH:mm")); // 서비스다운시작일시
|
||||
model.addAttribute("dtFinishDatetime" , CommonUtil.getKST("yyyy-MM-dd HH:mm")); // 서비스다운종료일시
|
||||
|
||||
TokenInfo tokenInfo = CommonUtil.getTokenInfo();
|
||||
|
||||
model.addAttribute("inRegUser", tokenInfo.getUniqId ()); // 접속자ID
|
||||
model.addAttribute("vcRegUser", 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);
|
||||
|
||||
model.addAttribute("inIncidentSeq", 0 );
|
||||
|
||||
log.info("<<<<<<<<<<<<<<< /srm/insertCopyViewReportCheck.do >>>>>>>>>>>>>>>");
|
||||
|
||||
return "uritms-tiles2/srm/ReportCheckCopyInsert";
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 보고서 등록 처리를 한다.
|
||||
* @author urp 인프라본부 나혁제
|
||||
|
||||
@ -422,6 +422,101 @@ public class ReportErrorController
|
||||
return "uritms-tiles2/srm/ReportErrorUpdate";
|
||||
}
|
||||
|
||||
/**
|
||||
* 보고서 새로만들기 화면으로 이동한다.
|
||||
* @author urp 인프라본부 나혁제
|
||||
* 작성일 : 2026.01.22
|
||||
*/
|
||||
@RequestMapping(value = "/srm/insertCopyViewReportError.do")
|
||||
public String insertCopyViewReportError( @ModelAttribute("ReportErrorListVo") ReportErrorListVo reportErrorListVo
|
||||
, @ModelAttribute("searchVO") ReportErrorListVo searchVO
|
||||
, HttpServletRequest request
|
||||
, HttpServletResponse response
|
||||
, ModelMap model) throws Exception
|
||||
{
|
||||
log.info(">>>>>>>>>>>>>>> /srm/insertCopyViewReportError.do <<<<<<<<<<<<<<<");
|
||||
|
||||
// api in/out map 정의
|
||||
Map<String, Object> bodyMap = new LinkedHashMap();
|
||||
Map<String, Object> returnMap = new LinkedHashMap();
|
||||
|
||||
int inReportSeq = CommonUtil.zeroConvert(reportErrorListVo.getInReportSeq());
|
||||
|
||||
// Body Setting Start ---------------------------------
|
||||
bodyMap.put("inReportSeq", inReportSeq);
|
||||
// Body Setting End ---------------------------------
|
||||
|
||||
// RestApi Call Start ---------------------------------
|
||||
returnMap = restApiCallUtil.RestApiCall(bodyMap, "/srm/getReportWithBodyError.do");
|
||||
// RestApi Call End ---------------------------------
|
||||
|
||||
// 결과값 추출 Start ---------------------------------
|
||||
Map<String, Object> resultReportError = (Map<String, Object>)returnMap.get("resultReportError");
|
||||
List<Map<String, Object>> resultSharings = (List<Map<String, Object>>)returnMap.get("resultSharings");
|
||||
List<Map<String, Object>> resultAssets = (List<Map<String, Object>>)returnMap.get("resultAssets");
|
||||
List<Map<String, Object>> resultApprovals = (List<Map<String, Object>>)returnMap.get("resultApprovals");
|
||||
|
||||
String sharingTxt = (String)returnMap.get("sharingTxt");
|
||||
String privType = (String)returnMap.get("privType");
|
||||
String incidentId = (String)returnMap.get("incidentId");
|
||||
int approvalReq = (int)returnMap.get("approvalReq");
|
||||
|
||||
log.info("sharingTxt [{}]", sharingTxt);
|
||||
log.info("privType [{}]", privType);
|
||||
log.info("approvalReq [{}]", approvalReq);
|
||||
// 결과값 추출 End ---------------------------------
|
||||
|
||||
// 보고서 본문 복호화처리
|
||||
String strReportBody = (String)resultReportError.get("txReportBody");
|
||||
String strReportBodyDec = CommonUtil.base64decode(strReportBody);
|
||||
|
||||
resultReportError.put("txReportBody", strReportBodyDec);
|
||||
model.addAttribute("sharingTxt" , sharingTxt ); // String
|
||||
model.addAttribute("privType" , privType ); // String
|
||||
model.addAttribute("incidentId" , incidentId ); // String
|
||||
model.addAttribute("approvalReq" , approvalReq ); // int
|
||||
|
||||
model.addAttribute("resultReport" , resultReportError ); // Map
|
||||
model.addAttribute("resultSharings" , resultSharings ); // List
|
||||
model.addAttribute("resultAssets" , resultAssets ); // List
|
||||
model.addAttribute("resultApprovals" , resultApprovals ); // List
|
||||
|
||||
// 서비스 정보 추출
|
||||
// RestApi Call Start ---------------------------------
|
||||
returnMap = restApiCallUtil.RestApiCall(bodyMap, "/srm/getInitReportError.do");
|
||||
// RestApi Call End ---------------------------------
|
||||
List<Map<String, Object>> resultService = (List<Map<String, Object>>)returnMap.get("resultService");
|
||||
List<Map<String, Object>> resultForm = (List<Map<String, Object>>)returnMap.get("resultForm");
|
||||
|
||||
model.addAttribute("resultService" , resultService ); // 서비스 정보
|
||||
model.addAttribute("resultForm" , resultForm ); // 보고서 양식 정보
|
||||
|
||||
model.addAttribute("dtDownstartDatetime" , CommonUtil.getKST("yyyy-MM-dd HH:mm")); // 시작일시
|
||||
model.addAttribute("dtDownfinishDatetime" , CommonUtil.getKST("yyyy-MM-dd HH:mm")); // 종료일시
|
||||
model.addAttribute("dtStartDatetime" , CommonUtil.getKST("yyyy-MM-dd HH:mm")); // 서비스다운시작일시
|
||||
model.addAttribute("dtFinishDatetime" , CommonUtil.getKST("yyyy-MM-dd HH:mm")); // 서비스다운종료일시
|
||||
|
||||
TokenInfo tokenInfo = CommonUtil.getTokenInfo();
|
||||
|
||||
model.addAttribute("inRegUser", tokenInfo.getUniqId ()); // 접속자ID
|
||||
model.addAttribute("vcRegUser", 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);
|
||||
|
||||
model.addAttribute("inIncidentSeq", 0 );
|
||||
|
||||
log.info("<<<<<<<<<<<<<<< /srm/insertCopyViewReportError.do >>>>>>>>>>>>>>>");
|
||||
|
||||
return "uritms-tiles2/srm/ReportErrorCopyInsert";
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 장애보고서 등록 처리를 한다.
|
||||
* @author urp 인프라본부 나혁제
|
||||
|
||||
@ -423,6 +423,106 @@ public class ReportIssueController
|
||||
return "uritms-tiles2/srm/ReportIssueUpdate";
|
||||
}
|
||||
|
||||
/**
|
||||
* 보고서 새로만들기 화면으로 이동한다.
|
||||
* @author urp 인프라본부 나혁제
|
||||
* 작성일 : 2026.01.22
|
||||
*/
|
||||
@RequestMapping(value = "/srm/insertCopyViewReportIssue.do")
|
||||
public String insertCopyViewReportIssue( @ModelAttribute("ReportIssueListVo") ReportIssueListVo reportIssueListVo
|
||||
, @ModelAttribute("searchVO") ReportIssueListVo searchVO
|
||||
, HttpServletRequest request
|
||||
, HttpServletResponse response
|
||||
, ModelMap model) throws Exception
|
||||
{
|
||||
log.info(">>>>>>>>>>>>>>> /srm/insertCopyViewReportIssue.do <<<<<<<<<<<<<<<");
|
||||
|
||||
// api in/out map 정의
|
||||
Map<String, Object> bodyMap = new LinkedHashMap();
|
||||
Map<String, Object> returnMap = new LinkedHashMap();
|
||||
|
||||
int inReportSeq = CommonUtil.zeroConvert(reportIssueListVo.getInReportSeq());
|
||||
|
||||
// Body Setting Start ---------------------------------
|
||||
bodyMap.put("inReportSeq", inReportSeq);
|
||||
// Body Setting End ---------------------------------
|
||||
|
||||
// RestApi Call Start ---------------------------------
|
||||
returnMap = restApiCallUtil.RestApiCall(bodyMap, "/srm/getReportWithBodyIssue.do");
|
||||
// RestApi Call End ---------------------------------
|
||||
|
||||
// 결과값 추출 Start ---------------------------------
|
||||
Map<String, Object> resultReportIssue = (Map<String, Object>)returnMap.get("resultReportIssue");
|
||||
List<Map<String, Object>> resultSharings = (List<Map<String, Object>>)returnMap.get("resultSharings");
|
||||
List<Map<String, Object>> resultAssets = (List<Map<String, Object>>)returnMap.get("resultAssets");
|
||||
List<Map<String, Object>> resultApprovals = (List<Map<String, Object>>)returnMap.get("resultApprovals");
|
||||
|
||||
String sharingTxt = (String)returnMap.get("sharingTxt");
|
||||
String privType = (String)returnMap.get("privType");
|
||||
String incidentId = (String)returnMap.get("incidentId");
|
||||
int approvalReq = (int)returnMap.get("approvalReq");
|
||||
|
||||
log.info("sharingTxt [{}]", sharingTxt);
|
||||
log.info("privType [{}]", privType);
|
||||
log.info("approvalReq [{}]", approvalReq);
|
||||
// 결과값 추출 End ---------------------------------
|
||||
|
||||
// 보고서 본문 복호화처리
|
||||
String strReportBody = (String)resultReportIssue.get("txReportBody");
|
||||
String strReportBodyDec = CommonUtil.base64decode(strReportBody);
|
||||
|
||||
resultReportIssue.put("txReportBody", strReportBodyDec);
|
||||
model.addAttribute("sharingTxt" , sharingTxt ); // String
|
||||
model.addAttribute("privType" , privType ); // String
|
||||
model.addAttribute("incidentId" , incidentId ); // String
|
||||
model.addAttribute("approvalReq" , approvalReq ); // int
|
||||
|
||||
model.addAttribute("resultReport" , resultReportIssue ); // Map
|
||||
model.addAttribute("resultSharings" , resultSharings ); // List
|
||||
model.addAttribute("resultAssets" , resultAssets ); // List
|
||||
model.addAttribute("resultApprovals" , resultApprovals ); // List
|
||||
|
||||
// 서비스 정보 추출
|
||||
// RestApi Call Start ---------------------------------
|
||||
returnMap = restApiCallUtil.RestApiCall(bodyMap, "/srm/getInitReportIssue.do");
|
||||
// RestApi Call End ---------------------------------
|
||||
List<Map<String, Object>> resultService = (List<Map<String, Object>>)returnMap.get("resultService");
|
||||
List<Map<String, Object>> resultForm = (List<Map<String, Object>>)returnMap.get("resultForm");
|
||||
|
||||
model.addAttribute("resultService" , resultService ); // 서비스 정보
|
||||
model.addAttribute("resultForm" , resultForm ); // 보고서 양식 정보
|
||||
|
||||
model.addAttribute("dtDownstartDatetime" , CommonUtil.getKST("yyyy-MM-dd HH:mm")); // 시작일시
|
||||
model.addAttribute("dtDownfinishDatetime" , CommonUtil.getKST("yyyy-MM-dd HH:mm")); // 종료일시
|
||||
model.addAttribute("dtStartDatetime" , CommonUtil.getKST("yyyy-MM-dd HH:mm")); // 서비스다운시작일시
|
||||
model.addAttribute("dtFinishDatetime" , CommonUtil.getKST("yyyy-MM-dd HH:mm")); // 서비스다운종료일시
|
||||
|
||||
TokenInfo tokenInfo = CommonUtil.getTokenInfo();
|
||||
|
||||
model.addAttribute("inRegUser", tokenInfo.getUniqId ()); // 접속자ID
|
||||
model.addAttribute("vcRegUser", 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);
|
||||
|
||||
model.addAttribute("inIncidentSeq", 0 );
|
||||
|
||||
log.info("<<<<<<<<<<<<<<< /srm/insertCopyViewReportIssue.do >>>>>>>>>>>>>>>");
|
||||
|
||||
return "uritms-tiles2/srm/ReportIssueCopyInsert";
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 이슈보고서 등록 처리를 한다.
|
||||
* @author urp 인프라본부 나혁제
|
||||
|
||||
@ -430,6 +430,106 @@ public class ReportOtherController
|
||||
return "uritms-tiles2/srm/ReportOtherUpdate";
|
||||
}
|
||||
|
||||
/**
|
||||
* 보고서 새로만들기 화면으로 이동한다.
|
||||
* @author urp 인프라본부 나혁제
|
||||
*Other : 2026.01.22
|
||||
*/
|
||||
@RequestMapping(value = "/srm/insertCopyViewReportOther.do")
|
||||
public String insertCopyViewReportOther( @ModelAttribute("ReportOtherListVo") ReportOtherListVo reportOtherListVo
|
||||
, @ModelAttribute("searchVO") ReportOtherListVo searchVO
|
||||
, HttpServletRequest request
|
||||
, HttpServletResponse response
|
||||
, ModelMap model) throws Exception
|
||||
{
|
||||
log.info(">>>>>>>>>>>>>>> /srm/insertCopyViewReportOther.do <<<<<<<<<<<<<<<");
|
||||
|
||||
// api in/out map 정의
|
||||
Map<String, Object> bodyMap = new LinkedHashMap();
|
||||
Map<String, Object> returnMap = new LinkedHashMap();
|
||||
|
||||
int inReportSeq = CommonUtil.zeroConvert(reportOtherListVo.getInReportSeq());
|
||||
|
||||
// Body Setting Start ---------------------------------
|
||||
bodyMap.put("inReportSeq", inReportSeq);
|
||||
bodyMap.put("inTask", CommonUtil.getData(request, "inTask")); // 보고서 유형 추출
|
||||
// Body Setting End ---------------------------------
|
||||
|
||||
// RestApi Call Start ---------------------------------
|
||||
returnMap = restApiCallUtil.RestApiCall(bodyMap, "/srm/getReportWithBodyOther.do");
|
||||
// RestApi Call End ---------------------------------
|
||||
|
||||
// 결과값 추출 Start ---------------------------------
|
||||
Map<String, Object> resultReportOther = (Map<String, Object>)returnMap.get("resultReportOther");
|
||||
List<Map<String, Object>> resultSharings = (List<Map<String, Object>>)returnMap.get("resultSharings");
|
||||
List<Map<String, Object>> resultAssets = (List<Map<String, Object>>)returnMap.get("resultAssets");
|
||||
List<Map<String, Object>> resultApprovals = (List<Map<String, Object>>)returnMap.get("resultApprovals");
|
||||
|
||||
String sharingTxt = (String)returnMap.get("sharingTxt");
|
||||
String privType = (String)returnMap.get("privType");
|
||||
String incidentId = (String)returnMap.get("incidentId");
|
||||
int approvalReq = (int)returnMap.get("approvalReq");
|
||||
|
||||
log.info("sharingTxt [{}]", sharingTxt);
|
||||
log.info("privType [{}]", privType);
|
||||
log.info("approvalReq [{}]", approvalReq);
|
||||
// 결과값 추출 End ---------------------------------
|
||||
|
||||
// 보고서 본문 복호화처리
|
||||
String strReportBody = (String)resultReportOther.get("txReportBody");
|
||||
String strReportBodyDec = CommonUtil.base64decode(strReportBody);
|
||||
|
||||
resultReportOther.put("txReportBody", strReportBodyDec);
|
||||
model.addAttribute("sharingTxt" , sharingTxt ); // String
|
||||
model.addAttribute("privType" , privType ); // String
|
||||
model.addAttribute("incidentId" , incidentId ); // String
|
||||
model.addAttribute("approvalReq" , approvalReq ); // int
|
||||
|
||||
model.addAttribute("resultReport" , resultReportOther ); // Map
|
||||
model.addAttribute("resultSharings" , resultSharings ); // List
|
||||
model.addAttribute("resultAssets" , resultAssets ); // List
|
||||
model.addAttribute("resultApprovals" , resultApprovals ); // List
|
||||
|
||||
// 서비스 정보 추출
|
||||
// RestApi Call Start ---------------------------------
|
||||
returnMap = restApiCallUtil.RestApiCall(bodyMap, "/srm/getInitReportOther.do");
|
||||
// RestApi Call End ---------------------------------
|
||||
List<Map<String, Object>> resultService = (List<Map<String, Object>>)returnMap.get("resultService");
|
||||
List<Map<String, Object>> resultForm = (List<Map<String, Object>>)returnMap.get("resultForm");
|
||||
|
||||
model.addAttribute("resultService" , resultService ); // 서비스 정보
|
||||
model.addAttribute("resultForm" , resultForm ); // 보고서 양식 정보
|
||||
|
||||
model.addAttribute("dtDownstartDatetime" , CommonUtil.getKST("yyyy-MM-dd HH:mm")); // 시작일시
|
||||
model.addAttribute("dtDownfinishDatetime" , CommonUtil.getKST("yyyy-MM-dd HH:mm")); // 종료일시
|
||||
model.addAttribute("dtStartDatetime" , CommonUtil.getKST("yyyy-MM-dd HH:mm")); // 서비스다운시작일시
|
||||
model.addAttribute("dtFinishDatetime" , CommonUtil.getKST("yyyy-MM-dd HH:mm")); // 서비스다운종료일시
|
||||
|
||||
TokenInfo tokenInfo = CommonUtil.getTokenInfo();
|
||||
|
||||
model.addAttribute("inRegUser", tokenInfo.getUniqId ()); // 접속자ID
|
||||
model.addAttribute("vcRegUser", 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);
|
||||
|
||||
model.addAttribute("inIncidentSeq", 0 );
|
||||
|
||||
log.info("<<<<<<<<<<<<<<< /srm/insertCopyViewReportOther.do >>>>>>>>>>>>>>>");
|
||||
|
||||
return "uritms-tiles2/srm/ReportOtherCopyInsert";
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 기타보고서 등록 처리를 한다.
|
||||
* @author urp 인프라본부 나혁제
|
||||
|
||||
@ -334,7 +334,7 @@ public class SvcDeskController
|
||||
|
||||
// 조치예정일일
|
||||
dtReqDatetime = CommonUtil.nvl(resultReqIncident.get("dtCompleteReqDateTime"));
|
||||
// 조치예정일일
|
||||
// 첨부파일
|
||||
String strRegAtchFileId = CommonUtil.nvl(resultReqIncident.get("atchFileId"));
|
||||
// 서비스코드
|
||||
String strInServiceCode = CommonUtil.nvl(resultReqIncident.get("inServiceCode"));
|
||||
@ -364,7 +364,6 @@ public class SvcDeskController
|
||||
model.addAttribute("dtReqDatetime" , dtReqDatetime); // 완료요청일시는 7일 이후
|
||||
model.addAttribute("vcReqIncidentNum" , strReqIncidentNum); // 신청번호
|
||||
|
||||
|
||||
TokenInfo tokenInfo = CommonUtil.getTokenInfo();
|
||||
|
||||
model.addAttribute("inRegUser", tokenInfo.getUniqId()); // 접수자ID
|
||||
@ -474,6 +473,106 @@ public class SvcDeskController
|
||||
return "uritms-tiles2/srm/SvcDeskUpdate";
|
||||
}
|
||||
|
||||
/**
|
||||
* 서비스 데스크 인스던트 새로만들기 화면으로 이동한다.
|
||||
* @author urp 인프라본부 나혁제
|
||||
* 작성일 : 2026.01.21
|
||||
*/
|
||||
@PostMapping(value = "/srm/insertCopyViewIncident.do")
|
||||
public String insertCopyViewIncident( @ModelAttribute("SvcDeskListVo") SvcDeskListVo svcDeskListVo
|
||||
, @ModelAttribute("searchVO") SvcDeskListVo searchVO
|
||||
, HttpServletRequest request
|
||||
, HttpServletResponse response
|
||||
, ModelMap model) throws Exception
|
||||
{
|
||||
log.info(">>>>>>>>>>>>>>> /srm/insertCopyViewIncident.do <<<<<<<<<<<<<<<");
|
||||
|
||||
// api in/out map 정의
|
||||
Map<String, Object> bodyMap = new LinkedHashMap();
|
||||
Map<String, Object> returnMap = new LinkedHashMap();
|
||||
|
||||
int inIncidentSeq = CommonUtil.zeroConvert(svcDeskListVo.getInIncidentSeq());
|
||||
|
||||
// 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");
|
||||
List<Map<String, Object>> resultSharings = (List<Map<String, Object>>)returnMap.get("resultSharings");
|
||||
List<Map<String, Object>> resultReports = (List<Map<String, Object>>)returnMap.get("resultReports");
|
||||
List<Map<String, Object>> resultApprovals = (List<Map<String, Object>>)returnMap.get("resultApprovals");
|
||||
List<Map<String, Object>> resultTransgers = (List<Map<String, Object>>)returnMap.get("resultTransgers");
|
||||
|
||||
String sharingTxt = (String)returnMap.get("sharingTxt");
|
||||
String privType = (String)returnMap.get("privType");
|
||||
|
||||
int transfer_avail = (int)returnMap.get("transfer_avail");
|
||||
int editDifficulty = (int)returnMap.get("editDifficulty");
|
||||
int approvalReq = (int)returnMap.get("approvalReq");
|
||||
|
||||
log.info("sharingTxt [{}]", sharingTxt);
|
||||
log.info("privType [{}]", privType);
|
||||
log.info("transfer_avail [{}]", transfer_avail);
|
||||
log.info("editDifficulty [{}]", editDifficulty);
|
||||
log.info("approvalReq [{}]", approvalReq);
|
||||
|
||||
// RestApi Call End ---------------------------------
|
||||
|
||||
// 인스던트 본문 복호화처리
|
||||
String strIncidentBody = (String)resultIncident.get("txIncidentBody");
|
||||
String strIncidentBodyDec = CommonUtil.base64decode(strIncidentBody);
|
||||
|
||||
resultIncident.put("txIncidentBody", strIncidentBodyDec);
|
||||
|
||||
model.addAttribute("sharingTxt" , sharingTxt ); // String
|
||||
model.addAttribute("transfer_avail" , transfer_avail ); // int
|
||||
model.addAttribute("editDifficulty" , editDifficulty ); // int
|
||||
model.addAttribute("approvalReq" , approvalReq ); // int
|
||||
model.addAttribute("privType" , privType ); // String
|
||||
|
||||
model.addAttribute("resultIncident" , resultIncident ); // Map
|
||||
model.addAttribute("resultSharings" , resultSharings ); // List
|
||||
model.addAttribute("resultReports" , resultReports ); // List
|
||||
model.addAttribute("resultApprovals" , resultApprovals ); // List
|
||||
model.addAttribute("resultTransgers" , resultTransgers ); // List
|
||||
|
||||
// 서비스 정보 추출
|
||||
// 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 dtReqDatetime = CommonUtil.getDatewithSpan(CommonUtil.getKST("yyyyMMddHHmm"), 7, "D", "yyyy-MM-dd HH:mm");
|
||||
|
||||
model.addAttribute("dtReceiptDatetime" , CommonUtil.getKST("yyyy-MM-dd HH:mm")); // 접수일시
|
||||
model.addAttribute("dtReqDatetime" , dtReqDatetime); // 완료요청일시는 7일 이후
|
||||
|
||||
TokenInfo tokenInfo = CommonUtil.getTokenInfo();
|
||||
|
||||
model.addAttribute("inRegUser", tokenInfo.getUniqId()); // 접수자ID
|
||||
model.addAttribute("vcRegUser", 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/insertCopyViewIncident.do >>>>>>>>>>>>>>>");
|
||||
|
||||
return "uritms-tiles2/srm/SvcDeskCopyInsert";
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -79,7 +79,7 @@ public class SvcDeskReqController
|
||||
/**
|
||||
* 서비스 데스크 인스던트 목록을 조회한다.
|
||||
* @author urp 인프라본부 나혁제
|
||||
* 작성일 : 2025.02.08
|
||||
* 작성일 : 2025.12.15
|
||||
*/
|
||||
@RequestMapping("/srm/searchReqIncident.do")
|
||||
public String searchReqIncident( @ModelAttribute("searchVO") SvcDeskReqListVo searchVO
|
||||
|
||||
@ -51,6 +51,8 @@ public class ReportCheckVo
|
||||
private String inPercallPrice ;
|
||||
private String atchFileId ;
|
||||
private String atchFileInUpGb ;
|
||||
private String oldAtchFileId ; // 2026.01.22 나혁제 이전첨부파일
|
||||
|
||||
|
||||
public String getInReportSeq() {
|
||||
return inReportSeq;
|
||||
@ -238,6 +240,12 @@ public class ReportCheckVo
|
||||
public void setAtchFileInUpGb(String atchFileInUpGb) {
|
||||
this.atchFileInUpGb = atchFileInUpGb;
|
||||
}
|
||||
public String getOldAtchFileId() {
|
||||
return oldAtchFileId;
|
||||
}
|
||||
public void setOldAtchFileId(String oldAtchFileId) {
|
||||
this.oldAtchFileId = oldAtchFileId;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@ -51,6 +51,7 @@ public class ReportErrorVo
|
||||
private String inPercallPrice ;
|
||||
private String atchFileId ;
|
||||
private String atchFileInUpGb ;
|
||||
private String oldAtchFileId ; // 2026.01.22 나혁제 이전첨부파일
|
||||
|
||||
public String getInReportSeq() {
|
||||
return inReportSeq;
|
||||
@ -238,6 +239,12 @@ public class ReportErrorVo
|
||||
public void setAtchFileInUpGb(String atchFileInUpGb) {
|
||||
this.atchFileInUpGb = atchFileInUpGb;
|
||||
}
|
||||
public String getOldAtchFileId() {
|
||||
return oldAtchFileId;
|
||||
}
|
||||
public void setOldAtchFileId(String oldAtchFileId) {
|
||||
this.oldAtchFileId = oldAtchFileId;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@ -51,6 +51,7 @@ public class ReportIssueVo
|
||||
private String inPercallPrice ;
|
||||
private String atchFileId ;
|
||||
private String atchFileInUpGb ;
|
||||
private String oldAtchFileId ; // 2026.01.22 나혁제 이전첨부파일
|
||||
|
||||
public String getInReportSeq() {
|
||||
return inReportSeq;
|
||||
@ -238,6 +239,12 @@ public class ReportIssueVo
|
||||
public void setAtchFileInUpGb(String atchFileInUpGb) {
|
||||
this.atchFileInUpGb = atchFileInUpGb;
|
||||
}
|
||||
public String getOldAtchFileId() {
|
||||
return oldAtchFileId;
|
||||
}
|
||||
public void setOldAtchFileId(String oldAtchFileId) {
|
||||
this.oldAtchFileId = oldAtchFileId;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@ -50,6 +50,7 @@ public class ReportOtherVo
|
||||
private String inPercallPrice ;
|
||||
private String atchFileId ;
|
||||
private String atchFileInUpGb ;
|
||||
private String oldAtchFileId ; // 2026.01.22 나혁제 이전첨부파일
|
||||
|
||||
public String getInReportSeq() {
|
||||
return inReportSeq;
|
||||
@ -237,6 +238,12 @@ public class ReportOtherVo
|
||||
public void setAtchFileInUpGb(String atchFileInUpGb) {
|
||||
this.atchFileInUpGb = atchFileInUpGb;
|
||||
}
|
||||
public String getOldAtchFileId() {
|
||||
return oldAtchFileId;
|
||||
}
|
||||
public void setOldAtchFileId(String oldAtchFileId) {
|
||||
this.oldAtchFileId = oldAtchFileId;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@ -537,12 +537,13 @@ public class UserManageController
|
||||
|
||||
userManageVO.setUniqId(uniqId);
|
||||
|
||||
{//KISA 보안약점 조치 (2018-10-29, 윤창원)
|
||||
// KISA 보안약점 조치
|
||||
if ("".equals(userManageVO.getOrgnztId()))
|
||||
{
|
||||
userManageVO.setOrgnztId(null);
|
||||
}
|
||||
|
||||
//KISA 보안약점 조치 (2018-10-29, 윤창원)
|
||||
//KISA 보안약점 조치
|
||||
if ("".equals(userManageVO.getGroupId()))
|
||||
{
|
||||
userManageVO.setGroupId(null);
|
||||
|
||||
@ -50,6 +50,6 @@
|
||||
senderName: 나혁제
|
||||
socketFactory-class: javax.net.ssl.SSLSocketFactory
|
||||
supplier: gmail.com
|
||||
client : local
|
||||
client : kic
|
||||
|
||||
|
||||
@ -677,7 +677,6 @@
|
||||
|
||||
for (x in oRequired)
|
||||
{
|
||||
|
||||
var field = form[oRequired[x][0]];
|
||||
|
||||
if ((field.type == 'hidden' ||
|
||||
|
||||
@ -4277,6 +4277,54 @@
|
||||
|
||||
</form>
|
||||
|
||||
<!-- 2026.01.20 나혁제 회원가입 신설 -->
|
||||
<form name="userManageExtVO">
|
||||
|
||||
<field property="emplyrId" depends="required, maxlength">
|
||||
<arg0 key="사용자아이디" resource="true"/>
|
||||
<arg1 key="20" resource="true"/>
|
||||
<var>
|
||||
<var-name>maxlength</var-name>
|
||||
<var-value>20</var-value>
|
||||
</var>
|
||||
</field>
|
||||
|
||||
<field property="emplyrNm" depends="required, maxlength">
|
||||
<arg0 key="사용자이름" resource="true"/>
|
||||
<arg1 key="50" resource="true"/>
|
||||
<var>
|
||||
<var-name>maxlength</var-name>
|
||||
<var-value>50</var-value>
|
||||
</var>
|
||||
</field>
|
||||
|
||||
<field property="password" depends="required, password1, pwdCheckSeries, pwdCheckRepeat, pwdCheckComb3">
|
||||
<arg0 key="비밀번호" resource="true"/>
|
||||
</field>
|
||||
|
||||
<field property="moblphonNo" depends="maxlength">
|
||||
<arg0 key="핸드폰번호" resource="true"/>
|
||||
<arg1 key="15" resource="true"/>
|
||||
<var>
|
||||
<var-name>maxlength</var-name>
|
||||
<var-value>15</var-value>
|
||||
</var>
|
||||
</field>
|
||||
|
||||
<field property="emailAdres" depends="required, email, maxlength">
|
||||
<arg0 key="이메일주소" resource="true"/>
|
||||
<arg1 key="50" resource="true"/>
|
||||
<var>
|
||||
<var-name>maxlength</var-name>
|
||||
<var-value>50</var-value>
|
||||
</var>
|
||||
</field>
|
||||
|
||||
<field property="groupId" depends="required">
|
||||
<arg0 key="그룹아이디" resource="true"/>
|
||||
</field>
|
||||
</form>
|
||||
|
||||
<form name="sysForm3">
|
||||
<field property="memory" depends="required, integer">
|
||||
<arg0 key="메모리" resource="true"/>
|
||||
|
||||
965
src/main/webapp/WEB-INF/jsp/itms/srm/ReportCheckCopyInsert.jsp
Normal file
965
src/main/webapp/WEB-INF/jsp/itms/srm/ReportCheckCopyInsert.jsp
Normal file
@ -0,0 +1,965 @@
|
||||
<!DOCTYPE html>
|
||||
|
||||
<%
|
||||
/**
|
||||
* @Class Name : ReportCheckCopyInsert.jsp
|
||||
* @Description : 점검보고서 새로 만들기
|
||||
* @Modification Information
|
||||
* @
|
||||
* @ 수정일 수정자 수정내용
|
||||
* @ ------- -------- ---------------------------
|
||||
* @ 2026.01.22 나혁제 최초 생성
|
||||
*
|
||||
* @author urp 인프라본부 나혁제
|
||||
* @since 2026.01.22
|
||||
* @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">
|
||||
|
||||
<!-- 2025.11.19 나혁제 선택된 Row 처리 -->
|
||||
<style>
|
||||
.selected {background-color:#e8eff7;}
|
||||
</style>
|
||||
|
||||
<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?ver=1" ></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="reportCheckManage" 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()
|
||||
{
|
||||
// 결재라인 높이 조정
|
||||
// $("#table_appr tbody td").css("height", "10px");
|
||||
|
||||
// 시작일시, 종료일시, 서비스다운시작일시, 서비스다운종료일시 시간까지 세팅
|
||||
$("#dtDownstartDatetime, #dtDownfinishDatetime, #dtStartDatetime, #dtFinishDatetime").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);
|
||||
|
||||
// 2025.11.18 나혁제 결재라인 클릭 자료 표시
|
||||
$(document).on("click", "#table_appr tbody td", function(){
|
||||
$("#table_appr tbody tr").removeClass('selected');
|
||||
$(this).parent().addClass('selected');
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
//----------------------------------------
|
||||
// 화면 초기화(Form 완전 로딩후 )
|
||||
// ----------------------------------------
|
||||
$(window).on("load", function()
|
||||
{
|
||||
var strForm = document.getElementById("serviceBody2").value;
|
||||
// drawEditor(strForm);
|
||||
drawEditor("serviceBody", strForm, false);
|
||||
});
|
||||
|
||||
//----------------------------------------
|
||||
// 목록 화면으로 이동처리
|
||||
// ----------------------------------------
|
||||
function fncReportCheckList()
|
||||
{
|
||||
var varFrom = document.getElementById("reportCheckManage");
|
||||
varFrom.action = "<c:url value='/srm/searchReportCheck.do'/>";
|
||||
varFrom.submit();
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
// 자산 조회 팝업
|
||||
// ----------------------------------------
|
||||
function fn_Asset_Search()
|
||||
{
|
||||
var strUrl = "/rem/SelectResourcePopup.do";
|
||||
|
||||
var arrParam = new Array(6);
|
||||
arrParam[0] = window;
|
||||
|
||||
window.showModalDialog("<c:url value='"+strUrl+"' />"
|
||||
, arrParam
|
||||
,"dialogWidth:950px;dialogHeight:850px;resizable:yes;center:yes");
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
// 팝업창에서 결재자 선택 확인시
|
||||
// ----------------------------------------
|
||||
function fn_Asset_Multi_Selected(strReturnData)
|
||||
{
|
||||
var aReturnData = strReturnData.split(","); // split에 '-'를 넣었습니다.
|
||||
|
||||
console.log(aReturnData);
|
||||
|
||||
var inAssetSeq = $("input[name='inAssetSeq']").map(function () {
|
||||
return $(this).val();
|
||||
}).get();
|
||||
|
||||
console.log(inAssetSeq);
|
||||
|
||||
for(var i=0; i<aReturnData.length-1; i++)
|
||||
{
|
||||
var aOptData = aReturnData[i].split("|");
|
||||
|
||||
// 기존에 존재하는경우 skip
|
||||
var iExistYn = inAssetSeq.indexOf(aOptData[0]);
|
||||
|
||||
if(iExistYn>-1) continue;
|
||||
|
||||
fn_table_asset_tr_add(aOptData[0], aOptData[1], aOptData[2]);
|
||||
}
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
// 자산정보 Row 추가 처리
|
||||
// ----------------------------------------
|
||||
function fn_table_asset_tr_add(inAssetSeq, vcAssetName, vcCate3)
|
||||
{
|
||||
var strTrTag = " <tr> "
|
||||
+ " <td > "
|
||||
+ " <label><input type='checkbox' style='display: inline-block;' name='chkAsset' /> </label> "
|
||||
+ " </td> "
|
||||
+ " <td >"+vcCate3+"</td> "
|
||||
+ " <td >"+vcAssetName+"</td> "
|
||||
+ " <td > "
|
||||
+ " <input type='text' name='txCommentAsset' id='txCommentAsset' value='' style='width:80%;'/> "
|
||||
+ " </td> "
|
||||
+ " <input type='hidden' name='inAssetSeq' id='inAssetSeq' value='"+inAssetSeq+"' > "
|
||||
+ " </tr> "
|
||||
|
||||
$("#table_asset tbody").append(strTrTag)
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
// 자산정보 선택한 자산 삭제
|
||||
// ----------------------------------------
|
||||
function fn_Asset_Delete()
|
||||
{
|
||||
|
||||
$("input:checkbox[name='chkAsset']:checked").each(function(k,kVal)
|
||||
{
|
||||
// 로우 삭제
|
||||
let chkRow = kVal.parentElement.parentElement.parentElement;
|
||||
$(chkRow).remove();
|
||||
});
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
// 서비스 정보 변경시
|
||||
// ----------------------------------------
|
||||
function selInServiceCode()
|
||||
{
|
||||
var inServiceCode = $('#inServiceCode option:selected').val() ;
|
||||
|
||||
var inData = {};
|
||||
inData = {"inServiceCode":inServiceCode};
|
||||
|
||||
proc.fn_get_service_info(inData);
|
||||
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
// 보고양식 변경시
|
||||
// ----------------------------------------
|
||||
function selReportForm()
|
||||
{
|
||||
var inSeq = $('#reportForm option:selected').val() ;
|
||||
|
||||
var inData = {};
|
||||
inData = {"seq":inSeq};
|
||||
|
||||
proc.fn_get_report_form_info(inData);
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
// 점검보고서 등록처리
|
||||
// ----------------------------------------
|
||||
function fncReportCheckInsert()
|
||||
{
|
||||
var bYes = confirm("점검보고서 등록 처리를 하시겠습니까?");
|
||||
if(bYes==false) return;
|
||||
|
||||
fncReportSaveSetting();
|
||||
|
||||
//input item Client-Side validate
|
||||
if (!validateReportCheckManage(document.reportCheckManage))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if($("#approvalsId").val() == '')
|
||||
{
|
||||
alert("결재라인을 입력해 주세요.");
|
||||
return;
|
||||
}
|
||||
|
||||
// 2025.12.02 나혁제 파일체크 로직 추가
|
||||
if (!fncAttachFileCheck())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
proc.fn_ReportCheck_save();
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
// 점검보고서 등록/승인요청
|
||||
// ----------------------------------------
|
||||
function fncReportCheckInsertApp()
|
||||
{
|
||||
var bYes = confirm("점검보고서 등록/승인요청 처리를 하시겠습니까?");
|
||||
if(bYes==false) return;
|
||||
|
||||
fncReportSaveSetting();
|
||||
|
||||
|
||||
//input item Client-Side validate
|
||||
if (!validateReportCheckManage(document.reportCheckManage))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// 2025.12.02 나혁제 파일체크 로직 추가
|
||||
if (!fncAttachFileCheck())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if($("#approvalsId").val() == '')
|
||||
{
|
||||
alert("결재라인을 입력해 주세요.");
|
||||
return;
|
||||
}
|
||||
|
||||
// 승인요청 메세지 팝업 open
|
||||
PopupOpen("/srm/PopReqApproval", 340, 450, '');
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
// 보고서 변경/승인처리 처리(최종 저장 처리 )
|
||||
// ----------------------------------------
|
||||
function fncAppLast(strMsg)
|
||||
{
|
||||
$('#reqTxComment' ).val(strMsg) ;
|
||||
$('#reqApprovalYn' ).val("Y" ) ;
|
||||
|
||||
proc.fn_ReportCheck_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 fncReportSaveSetting()
|
||||
{
|
||||
var form = document.reportCheckManage;
|
||||
|
||||
// 결재라인
|
||||
var strExistUser = $("input[name='approvalUserId']").map(function () { return $(this).val();}).get();
|
||||
var strExistUserText = $("input[name='approvalUserNm']").map(function () { return $(this).val();}).get();
|
||||
|
||||
strExistUser.join(',');
|
||||
strExistUserText.join(',');
|
||||
|
||||
form.approvalsId .value = strExistUser;
|
||||
form.approvalsName.value = strExistUserText;
|
||||
|
||||
// 보고서 자산 구조
|
||||
var strAssetSeq = $("input[name='inAssetSeq']").map(function () { return $(this).val();}).get();
|
||||
var strCommentAsset = $("input[name='txCommentAsset']").map(function () { return $(this).val();}).get();
|
||||
|
||||
strAssetSeq.join(',');
|
||||
strCommentAsset.join(',');
|
||||
|
||||
form.assetSeqs .value = strAssetSeq;
|
||||
form.assetCommnets.value = strCommentAsset;
|
||||
|
||||
form.txReportBody.value = tinyMCE.get("serviceBody").getContent(); // 평문
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
// 사용자 검색 팝업
|
||||
// ----------------------------------------
|
||||
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 fn_User_Multi_Selected(strReturnData)
|
||||
{
|
||||
var aReturnData = strReturnData.split(","); // split에 '-'를 넣었습니다.
|
||||
|
||||
console.log(aReturnData);
|
||||
|
||||
var strExistUser = $("input[name='approvalUserId']").map(function () {
|
||||
return $(this).val();
|
||||
}).get();
|
||||
|
||||
console.log(strExistUser);
|
||||
|
||||
for(var i=0; i<aReturnData.length-1; i++)
|
||||
{
|
||||
var aOptData = aReturnData[i].split("|");
|
||||
|
||||
// 기존에 존재하는경우 skip
|
||||
var iExistYn = strExistUser.indexOf(aOptData[0]);
|
||||
|
||||
if(iExistYn>-1) continue;
|
||||
|
||||
fn_table_appr_tr_add(aOptData[0], aOptData[1]);
|
||||
}
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
// 결재라인 Row 추가 처리
|
||||
// ----------------------------------------
|
||||
function fn_table_appr_tr_add(strId, strName)
|
||||
{
|
||||
// 2025.11.18 나혁제 결재순서 표시
|
||||
var trApprCnt = $('#table_appr >tbody tr').length+1;
|
||||
|
||||
var strTrTag = " <tr> "
|
||||
+" <td > "
|
||||
+" <label><input type='checkbox' style='display: inline-block;' id='chkAppUser' name='chkAppUser' /> </label> "
|
||||
+" </td> "
|
||||
+" <td >"+trApprCnt+"</td> "
|
||||
+" <td >"+strName+"</td> "
|
||||
+" <td ></td> "
|
||||
+" <td ></td> "
|
||||
+" <input type='hidden' name='approvalUserId' id='approvalUserId' value='"+strId+"' > "
|
||||
+" <input type='hidden' name='approvalUserNm' id='approvalUserNm' value='"+strName+"' > "
|
||||
+" </tr> "
|
||||
;
|
||||
|
||||
$("#table_appr tbody").append(strTrTag)
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
// 결재라인 선택한 사용자 삭제
|
||||
// ----------------------------------------
|
||||
function fn_User_Delete()
|
||||
{
|
||||
$("input:checkbox[name='chkAppUser']:checked").each(function(k,kVal)
|
||||
{
|
||||
// 로우 삭제
|
||||
let chkRow = kVal.parentElement.parentElement.parentElement;
|
||||
$(chkRow).remove();
|
||||
});
|
||||
|
||||
// 2025.10.20 나혁제 결재순서 재조정
|
||||
reorderApprSeq();
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
// 2025.11.19 나혁제
|
||||
// 결재순서 위로 이동처리
|
||||
// ----------------------------------------
|
||||
function fnMoveUpTR()
|
||||
{
|
||||
var $selected = $("#table_appr tbody tr.selected");
|
||||
|
||||
if ($selected.length === 0)
|
||||
{
|
||||
alert("이동할 행을 선택하세요.");
|
||||
return;
|
||||
}
|
||||
|
||||
var $prev = $selected.prev();
|
||||
|
||||
if ($prev.length > 0)
|
||||
{
|
||||
$selected.insertBefore($prev);
|
||||
reorderApprSeq();
|
||||
}
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
// 2025.11.19 나혁제
|
||||
// 결재순서 아래로 이동처리
|
||||
// ----------------------------------------
|
||||
function fnMoveDownTR()
|
||||
{
|
||||
var $selected = $("#table_appr tbody tr.selected");
|
||||
|
||||
if ($selected.length === 0)
|
||||
{
|
||||
alert("이동할 행을 선택하세요.");
|
||||
return;
|
||||
}
|
||||
|
||||
let $next = $selected.next();
|
||||
|
||||
if ($next.length > 0)
|
||||
{
|
||||
$selected.insertAfter($next);
|
||||
reorderApprSeq();
|
||||
}
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
// 2025.11.19 나혁제
|
||||
// 결재순서 재설정
|
||||
// ----------------------------------------
|
||||
function reorderApprSeq()
|
||||
{
|
||||
$("#table_appr tbody tr").each(function(index){
|
||||
// index는 0부터 시작하므로 1을 더해줌
|
||||
$(this).find("td:eq(1)").text(index + 1);
|
||||
});
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
// 팝업 오픈
|
||||
// ----------------------------------------
|
||||
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_ReportCheck_save : function ()
|
||||
{
|
||||
var form = $('#reportCheckManage')[0];
|
||||
var formData = new FormData(form);
|
||||
|
||||
$.ajax({
|
||||
url: '/srm/addReportCheck.do'
|
||||
, type: 'post'
|
||||
, enctype:'multipart/form-data'
|
||||
, data: formData
|
||||
, dataType: 'json'
|
||||
, processData:false
|
||||
, contentType:false
|
||||
, cache:false
|
||||
, success: function(data)
|
||||
{
|
||||
alert("등록 완료 되었습니다.");
|
||||
fncReportCheckList();
|
||||
|
||||
},
|
||||
error: function(errorThrown)
|
||||
{
|
||||
alert("보고서 등록중 오류가 발생하였습니다. \n 시스템관리자에게 문의해 주시기 바랍니다.");
|
||||
console.log(JSON.stringify(errorThrown));
|
||||
}
|
||||
});
|
||||
}
|
||||
,
|
||||
// 서비스 결재라인 정보 추출
|
||||
fn_get_service_info : function (inData)
|
||||
{
|
||||
$.ajax({
|
||||
url: '/srm/getSvcApprovalListCheck.do'
|
||||
, type: 'post'
|
||||
, data: JSON.stringify(inData)
|
||||
, dataType: 'json'
|
||||
, contentType: 'application/json'
|
||||
, async: false
|
||||
, success: function(data)
|
||||
{
|
||||
console.log(JSON.stringify(data));
|
||||
|
||||
$('#table_appr tbody tr').remove();
|
||||
|
||||
// 결재라인 세팅
|
||||
for(var i=0; i<data.resultApprovals.length; i++)
|
||||
{
|
||||
fn_table_appr_tr_add(data.resultApprovals[i].inUserSeq, data.resultApprovals[i].vcUserName);
|
||||
}
|
||||
},
|
||||
error: function(errorThrown)
|
||||
{
|
||||
alert("서비스 정보 조회중 오류가 발생하였습니다. \n 시스템 관리자에게 문의해 주시기 바랍니다.");
|
||||
console.log(JSON.stringify(errorThrown));
|
||||
}
|
||||
});
|
||||
}
|
||||
,
|
||||
// 보고양식 추출
|
||||
fn_get_report_form_info : function (inData)
|
||||
{
|
||||
$.ajax({
|
||||
url: '/srm/getReportFormCheck.do'
|
||||
, type: 'post'
|
||||
, data: JSON.stringify(inData)
|
||||
, dataType: 'json'
|
||||
, contentType: 'application/json'
|
||||
, async: false
|
||||
, success: function(data)
|
||||
{
|
||||
console.log(JSON.stringify(data));
|
||||
|
||||
// 본문세팅
|
||||
// drawEditor(data.strTxDefaultFormDec);
|
||||
drawEditor("serviceBody", data.strTxDefaultFormDec, false);
|
||||
|
||||
// 2025.05.21 나혁제 작업자정보 세팅
|
||||
$('#vcTaskUser').val(data.strVcTaskUser);
|
||||
$('#inTaskUser').val(data.strInTaskUser);
|
||||
},
|
||||
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="reportCheckManage" name="reportCheckManage" 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="유지보수 관리" >유지보수 관리</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: 12%;">
|
||||
<col style="width: 20%">
|
||||
<col style="width: 8%">
|
||||
<col style="width: 22%;">
|
||||
<col style="width: 10%">
|
||||
<col style="width: 30%;">
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<th> 보고서ID </th>
|
||||
<td> </td>
|
||||
<th> 서비스 </th>
|
||||
<td>
|
||||
<select name="inServiceCode" id="inServiceCode" onchange="selInServiceCode()" style="width: 90%;" >
|
||||
<c:forEach items="${resultService}" var="result" varStatus="status">
|
||||
<option value="${result.value}" <c:if test="${result.value == resultReport.inServiceCode}"> selected </c:if> > ${result.label} </option><!-- 분류코드명 -->
|
||||
</c:forEach>
|
||||
</select>
|
||||
</td>
|
||||
<th> 작성자 </th>
|
||||
<td>
|
||||
<input type="text" name="vcRegUser" id="vcRegUser" value="${vcRegUser}" style="width: 90%;" readonly />
|
||||
<input type="hidden" name="inRegUser" id="inRegUser" value="${inRegUser}" />
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th> 인스던트 접수번호 </th>
|
||||
<td> </td>
|
||||
<th> 작업분류 </th>
|
||||
<td>
|
||||
<input type="text" name="vcTask" id="vcTask" value="${resultReport.vcTask}" readonly style="width: 90%;" />
|
||||
<input type="hidden" name="inTask" id="inTask" value="${resultReport.inTask}" >
|
||||
|
||||
</td>
|
||||
<th> 작업자 </th>
|
||||
<td>
|
||||
<input type="text" name="vcTaskUser" id="vcTaskUser" value="${resultReport.vcTaskUser}" style="width: 90%;" readonly />
|
||||
|
||||
<a href="<c:url value='/cmm/selectUserListPopup.do' />" target="_blank" title="새 창으로 이동" onclick="fn_User_Search('조치예정', 'inTaskUser', '', 'vcTaskUser', '', '');return false;">
|
||||
<img src="<c:url value='/egov/images/egovframework/com/cmm/btn/btn_search.gif' />" alt="작업자 검색" title="작업자 검색">
|
||||
</a>
|
||||
|
||||
<input type="hidden" name="inTaskUser" id="inTaskUser" value="${resultReport.inTaskUser}" >
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<%-- 2025.09.01 나혁제 불필요한 항목 사젝 --%>
|
||||
<th style="display:none" > 서비스다운 </th>
|
||||
<td style="display:none" >
|
||||
<input type="text" class="btn_calendar" name="dtDownstartDatetime" id="dtDownstartDatetime" value="${resultReport.dtDownstartDatetime}" readonly style="width:47%;"/>
|
||||
~<input type="text" class="btn_calendar" name="dtDownfinishDatetime" id="dtDownfinishDatetime" value="${resultReport.dtDownstartDatetime}" readonly style="width:47%;"/>
|
||||
</td>
|
||||
|
||||
<th> 보고서양식 </th>
|
||||
<td >
|
||||
<select name="reportForm" id="reportForm" onchange="selReportForm()" style="width: 90%;" >
|
||||
<c:forEach items="${resultForm}" var="result" varStatus="status">
|
||||
<option value="${result.inReportForm}" > ${result.vcFormName} </option><!-- 분류코드명 -->
|
||||
</c:forEach>
|
||||
</select>
|
||||
</td>
|
||||
|
||||
<th> 시작일시 </th>
|
||||
<td>
|
||||
<input type="text" class="btn_calendar" name="dtStartDatetime" id="dtStartDatetime" value="${dtStartDatetime}" readonly style="width:90%;"/>
|
||||
|
||||
</td>
|
||||
<th> 종료일시 </th>
|
||||
<td>
|
||||
<input type="text" class="btn_calendar" name="dtFinishDatetime" id="dtFinishDatetime" value="${dtFinishDatetime}" readonly style="width:90%;"/>
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<th rowspan=2 > 제목 </th>
|
||||
<td rowspan=2 colspan=3>
|
||||
<input type="text" name="vcReportTitle" id="vcReportTitle" value="${resultReport.vcReportTitle}" style="width:90%;"/>
|
||||
</td>
|
||||
|
||||
<th><spring:message code="cop.atchFile" /></th>
|
||||
<td>
|
||||
<!-- 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>
|
||||
<c:import url="/cmm/selectFileInfs.do" charEncoding="utf-8">
|
||||
<c:param name="param_atchFileId" value="${resultReport.atchFileId}" />
|
||||
<c:param name="strItmsYn" value="Y" />
|
||||
</c:import>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<!-- 2025.11.20 나혁제 결재라인 레이아웃 변경 및 결재순서 추가 -->
|
||||
<tr>
|
||||
<th >서비스 결재 라인 </th>
|
||||
<td colspan=5 style="vertical-align: top;">
|
||||
|
||||
<div class="btn_group" >
|
||||
<button type="button" class="btn-function" onclick="fn_User_Search('조치예정', '', '', '', '', 'Y');return false;" style="margin-top: -30px;"> 조회 </button>
|
||||
<button type="button" class="btn-function" onclick="fn_User_Delete(); return false;" style="margin-top: -30px;"> 삭제 </button>
|
||||
</div>
|
||||
|
||||
<div style="display: flex;align-items: flex-start;">
|
||||
|
||||
<div class="tbl_list">
|
||||
<!-- 목록영역 -->
|
||||
<table class="table" summary="" id="table_appr" >
|
||||
<caption>결재라인 <spring:message code="title.list" /></caption>
|
||||
<colgroup>
|
||||
<col style="width: 8%;">
|
||||
<col style="width: 8%;">
|
||||
<col style="width: 15%;">
|
||||
<col style="width: 10%;">
|
||||
<col style="width: *;">
|
||||
</colgroup>
|
||||
|
||||
<thead>
|
||||
<tr>
|
||||
<th></th>
|
||||
<th>결재순서</th>
|
||||
<th>결재자</th>
|
||||
<th>상태</th>
|
||||
<th>Comment</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
<tbody>
|
||||
<c:forEach var="approvals" items="${resultApprovals}" varStatus="status">
|
||||
<tr>
|
||||
<td >
|
||||
<label><input type="checkbox" style="display: inline-block;" name="chkAppUser" /> </label>
|
||||
</td>
|
||||
<td ><c:out value="${approvals.inOrder+1}"/></td>
|
||||
<td ><c:out value="${approvals.vcUserName}"/></td>
|
||||
<td ></td>
|
||||
<td ></td>
|
||||
|
||||
<input type='hidden' name="approvalUserId" id="approvalUserId" value="${approvals.inUserSeq}" >
|
||||
<input type='hidden' name="approvalUserNm" id="approvalUserNm" value="${approvals.vcUserName}" >
|
||||
</tr>
|
||||
</c:forEach>
|
||||
</tbody>
|
||||
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<div style="width:3%;text-align:center;padding-left: 5px;align-self: center;">
|
||||
<a href="#" onclick="fnMoveUpTR(this); return false;" style="font-size: x-large;" >▲</a>
|
||||
<a href="#" onclick="fnMoveDownTR(this); return false;" style="font-size: x-large;" >▼</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
|
||||
<tr>
|
||||
<th> 자산</th>
|
||||
<td colspan=5>
|
||||
|
||||
<div class="btn_group" >
|
||||
<button type="button" class="btn-function" onclick="fn_Asset_Search();return false;" style="margin-top: -30px;"> 조회 </button>
|
||||
<button type="button" class="btn-function" onclick="fn_Asset_Delete(); return false;" style="margin-top: -30px;"> 삭제 </button>
|
||||
</div>
|
||||
|
||||
<div class="tbl_list">
|
||||
<!-- 목록영역 -->
|
||||
<table class="table" summary="" id="table_asset" >
|
||||
<caption>연결자산정보 <spring:message code="title.list" /></caption>
|
||||
<colgroup>
|
||||
<col style="width: 10%;">
|
||||
<col style="width: 25%;">
|
||||
<col style="width: 20%;">
|
||||
<col style="width: *;">
|
||||
</colgroup>
|
||||
|
||||
<thead>
|
||||
<tr>
|
||||
<th></th>
|
||||
<th>소분류</th>
|
||||
<th>자산명</th>
|
||||
<th>비고</th>
|
||||
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
<tbody>
|
||||
<c:forEach var="assets" items="${resultAssets}" varStatus="status">
|
||||
<tr>
|
||||
<td>
|
||||
<label><input type='checkbox' style='display: inline-block;' name='chkAsset' /> </label>
|
||||
</td>
|
||||
<td ><c:out value="${assets.vcCate3}"/></td>
|
||||
<td ><c:out value="${assets.vcAssetName}"/></td>
|
||||
<td >
|
||||
<input type="text" name="txCommentAsset" id="txCommentAsset" value="" style="width:90%;"/>
|
||||
</td>
|
||||
<input type="hidden" name="inAssetSeq" id="inAssetSeq" value="${assets.inAssetSeq}" >
|
||||
|
||||
</tr>
|
||||
</c:forEach>
|
||||
</tbody>
|
||||
|
||||
</table>
|
||||
</div>
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
|
||||
|
||||
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<textarea id="serviceBody" name="serviceBody" ></textarea>
|
||||
<textarea id="serviceBody2" name="serviceBody2" style="display:none;">${resultReport.txReportBody}</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="fncReportCheckList(); return false;" title="<spring:message code="button.list"/>">
|
||||
<spring:message code="button.list"/>
|
||||
</button>
|
||||
</div>
|
||||
<!--//왼쪽영역-->
|
||||
<!-- 오른쪽영역-->
|
||||
<div>
|
||||
<button type="button" class="btn-etc" onclick="fncReportCheckInsertApp(); return false;" title="등록/승인요청" >
|
||||
등록/승인요청
|
||||
</button>
|
||||
<button type="button" class="btn-etc" onclick="fncReportCheckInsert(); return false;" title="<spring:message code="button.create" />">
|
||||
<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="txReportBody" name="txReportBody" value="" >
|
||||
|
||||
<input type="hidden" id="assetSeqs" name="assetSeqs" value="" >
|
||||
<input type="hidden" id="assetCommnets" name="assetCommnets" value="" >
|
||||
|
||||
<input type="hidden" id="approvalsId" name="approvalsId" value="" >
|
||||
<input type="hidden" id="approvalsName" name="approvalsName" value="" >
|
||||
|
||||
<input type="hidden" id="inIncidentSeq" name="inIncidentSeq" value="${inIncidentSeq}" >
|
||||
<input type="hidden" id="inReportSeq" name="inReportSeq" value="0">
|
||||
<input type="hidden" id="inReportStatus" name="inReportStatus" value="0">
|
||||
<input type="hidden" id="inDowntime" name="inDowntime" value="0">
|
||||
|
||||
<input type="hidden" id="reqTxComment" name="reqTxComment" value=""/> <!-- 승인요청메세지 -->
|
||||
<input type="hidden" id="reqApprovalYn" name="reqApprovalYn" value=""/> <!-- 승인요청여부 -->
|
||||
|
||||
<input type="hidden" id="oldAtchFileId" name="oldAtchFileId" value="${resultReport.atchFileId}">
|
||||
|
||||
|
||||
</form:form>
|
||||
|
||||
@ -84,6 +84,25 @@
|
||||
varFrom.submit();
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
// 2026.01.22 나혁제
|
||||
// 새로만들기 기능확장
|
||||
// ----------------------------------------
|
||||
function fncReportCheckCopyInsert()
|
||||
{
|
||||
|
||||
if($('#inReportStatus').val()!='2' && $('#inReportStatus').val()!='3' )
|
||||
{
|
||||
alert("[승인완료/반려]된 보고서을 이용하야 새로만들기가 가능합니다.");
|
||||
return;
|
||||
}
|
||||
|
||||
// 수정화면으로 이동처리
|
||||
var varFrom = document.getElementById("reportCheckManage");
|
||||
varFrom.action = "<c:url value='/srm/insertCopyViewReportCheck.do'/>";
|
||||
varFrom.submit();
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
// 보고서 수정 화면 이동처리
|
||||
// ----------------------------------------
|
||||
@ -105,7 +124,7 @@
|
||||
{
|
||||
// 2025.11.18 나혁제 승인완료된 자료 수정불가
|
||||
// if(confirm("승인완료된 보고서입니다. \n수정하면 모든 승인 정보는 초기화 됩니다.\n수정하시겠습니까?") == false) return;
|
||||
alert("승인완료된 보고ㅓ입니다.\n 재작성하시길 바랍니다.");
|
||||
alert("승인완료된 보고서입니다.\n 재작성하시길 바랍니다.");
|
||||
return;
|
||||
|
||||
}
|
||||
@ -669,6 +688,10 @@
|
||||
</c:if>
|
||||
|
||||
<c:if test="${(privType eq 'mine' && report.inReportStatus ne 3) || privType eq 'super'}">
|
||||
<!-- 2026.01.22 나혁제 새로만들기 기능 추가 -->
|
||||
<button type="button" class="btn-etc" title="새로만들기" onclick="fncReportCheckCopyInsert(); return false;">
|
||||
새로만들기
|
||||
</button>
|
||||
<button type="button" class="btn-etc" title="수정" onclick="fncReportCheckUpdate(); return false;">
|
||||
수정
|
||||
</button>
|
||||
|
||||
@ -256,6 +256,12 @@
|
||||
return false;
|
||||
}
|
||||
|
||||
if($("#approvalsId").val() == '')
|
||||
{
|
||||
alert("결재라인을 입력해 주세요.");
|
||||
return;
|
||||
}
|
||||
|
||||
// 2025.12.02 나혁제 파일체크 로직 추가
|
||||
if (!fncAttachFileCheck())
|
||||
{
|
||||
@ -290,7 +296,7 @@
|
||||
|
||||
if($("#approvalsId").val() == '')
|
||||
{
|
||||
alert("승인요청시에는 결재라인이 필요합니다.");
|
||||
alert("결재라인을 입력해 주세요.");
|
||||
return;
|
||||
}
|
||||
|
||||
@ -800,9 +806,8 @@
|
||||
</td>
|
||||
<th> 작성자 </th>
|
||||
<td>
|
||||
<input type="text" name="vcRegUser" id="vcRegUser" value="${vcRegUser}" readonly />
|
||||
<input type="text" name="vcRegUser" id="vcRegUser" value="${vcRegUser}" style="width: 90%;" readonly />
|
||||
<input type="hidden" name="inRegUser" id="inRegUser" value="${inRegUser}" />
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
@ -816,7 +821,7 @@
|
||||
</td>
|
||||
<th> 작업자 </th>
|
||||
<td>
|
||||
<input type="text" name="vcTaskUser" id="vcTaskUser" value="${vcRegUser}" readonly />
|
||||
<input type="text" name="vcTaskUser" id="vcTaskUser" value="${vcRegUser}" style="width: 90%;" readonly />
|
||||
|
||||
<a href="<c:url value='/cmm/selectUserListPopup.do' />" target="_blank" title="새 창으로 이동" onclick="fn_User_Search('조치예정', 'inTaskUser', '', 'vcTaskUser', '', '');return false;">
|
||||
<img src="<c:url value='/egov/images/egovframework/com/cmm/btn/btn_search.gif' />" alt="작업자 검색" title="작업자 검색">
|
||||
@ -991,6 +996,7 @@
|
||||
<spring:message code="button.create" />
|
||||
</button>
|
||||
</div>
|
||||
<!-- // 오른쪽영역-->
|
||||
</div>
|
||||
<!-- main btn : end -->
|
||||
|
||||
|
||||
@ -142,19 +142,19 @@
|
||||
<tr>
|
||||
<td colspan=2>
|
||||
<label>문서번호:</label>
|
||||
<input class="s_input" id="reportId" name="reportId" type="text" size="35" maxlength="155" style="width: 170px;"
|
||||
<input class="s_input" id="reportId" name="reportId" type="text" size="35" maxlength="155" style="width: 155px;"
|
||||
value='<c:out value="${searchVO.reportId}"/>' title="<spring:message code="title.search" /> <spring:message code="input.input" />" >
|
||||
|
||||
<label>요청번호:</label>
|
||||
<input class="s_input" id="incidentNum" name="incidentNum" type="text" size="35" maxlength="155" style="width: 170px;"
|
||||
<label>인스던트 접수번호:</label>
|
||||
<input class="s_input" id="incidentNum" name="incidentNum" type="text" size="35" maxlength="155" style="width: 155px;"
|
||||
value='<c:out value="${searchVO.incidentNum}"/>' title="<spring:message code="title.search" /> <spring:message code="input.input" />" >
|
||||
|
||||
<label>작성자:</label>
|
||||
<input class="s_input" id="regUser" name="regUser" type="text" size="35" maxlength="155" style="width: 170px;"
|
||||
<input class="s_input" id="regUser" name="regUser" type="text" size="35" maxlength="155" style="width: 155px;"
|
||||
value='<c:out value="${searchVO.regUser}"/>' title="<spring:message code="title.search" /> <spring:message code="input.input" />" >
|
||||
|
||||
<label>제목:</label>
|
||||
<input class="s_input" id="reportTitle" name="reportTitle" type="text" size="35" maxlength="155" style="width: 170px;"
|
||||
<input class="s_input" id="reportTitle" name="reportTitle" type="text" size="35" maxlength="155" style="width: 155px;"
|
||||
value='<c:out value="${searchVO.reportTitle}"/>' title="<spring:message code="title.search" /> <spring:message code="input.input" />" >
|
||||
</td>
|
||||
</tr>
|
||||
@ -207,7 +207,7 @@
|
||||
<thead>
|
||||
<tr>
|
||||
<th>문서번호</th>
|
||||
<th>요청번호</th>
|
||||
<th>인스던트 접수번호</th>
|
||||
<th>서비스</th>
|
||||
<th>승인상태</th>
|
||||
<th>제목</th>
|
||||
|
||||
968
src/main/webapp/WEB-INF/jsp/itms/srm/ReportErrorCopyInsert.jsp
Normal file
968
src/main/webapp/WEB-INF/jsp/itms/srm/ReportErrorCopyInsert.jsp
Normal file
@ -0,0 +1,968 @@
|
||||
<!DOCTYPE html>
|
||||
|
||||
<%
|
||||
/**
|
||||
* @Class Name : ReportErrorCopyInsert.jsp
|
||||
* @Description : 장애보고서 새로 만들기
|
||||
* @Modification Information
|
||||
* @
|
||||
* @ 수정일 수정자 수정내용
|
||||
* @ ------- -------- ---------------------------
|
||||
* @ 2026.01.22 나혁제 최초 생성
|
||||
*
|
||||
* @author urp 인프라본부 나혁제
|
||||
* @since 2026.01.22
|
||||
* @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">
|
||||
|
||||
<!-- 2025.11.19 나혁제 선택된 Row 처리 -->
|
||||
<style>
|
||||
.selected {background-color:#e8eff7;}
|
||||
</style>
|
||||
|
||||
<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?ver=1" ></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="reportErrorManage" 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()
|
||||
{
|
||||
// 결재라인 높이 조정
|
||||
// $("#table_appr tbody td").css("height", "10px");
|
||||
|
||||
// 시작일시, 종료일시, 서비스다운시작일시, 서비스다운종료일시 시간까지 세팅
|
||||
$("#dtDownstartDatetime, #dtDownfinishDatetime, #dtStartDatetime, #dtFinishDatetime").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);
|
||||
|
||||
// 2025.11.18 나혁제 결재라인 클릭 자료 표시
|
||||
$(document).on("click", "#table_appr tbody td", function(){
|
||||
$("#table_appr tbody tr").removeClass('selected');
|
||||
$(this).parent().addClass('selected');
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
//----------------------------------------
|
||||
// 화면 초기화(Form 완전 로딩후 )
|
||||
// ----------------------------------------
|
||||
$(window).on("load", function()
|
||||
{
|
||||
var strForm = document.getElementById("serviceBody2").value;
|
||||
// drawEditor(strForm);
|
||||
drawEditor("serviceBody", strForm, false);
|
||||
});
|
||||
|
||||
//----------------------------------------
|
||||
// 목록 화면으로 이동처리
|
||||
// ----------------------------------------
|
||||
function fncReportErrorList()
|
||||
{
|
||||
var varFrom = document.getElementById("reportErrorManage");
|
||||
varFrom.action = "<c:url value='/srm/searchReportError.do'/>";
|
||||
varFrom.submit();
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
// 자산 조회 팝업
|
||||
// ----------------------------------------
|
||||
function fn_Asset_Search()
|
||||
{
|
||||
var strUrl = "/rem/SelectResourcePopup.do";
|
||||
|
||||
var arrParam = new Array(6);
|
||||
arrParam[0] = window;
|
||||
|
||||
window.showModalDialog("<c:url value='"+strUrl+"' />"
|
||||
, arrParam
|
||||
,"dialogWidth:950px;dialogHeight:850px;resizable:yes;center:yes");
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
// 팝업창에서 결재자 선택 확인시
|
||||
// ----------------------------------------
|
||||
function fn_Asset_Multi_Selected(strReturnData)
|
||||
{
|
||||
var aReturnData = strReturnData.split(","); // split에 '-'를 넣었습니다.
|
||||
|
||||
console.log(aReturnData);
|
||||
|
||||
var inAssetSeq = $("input[name='inAssetSeq']").map(function () {
|
||||
return $(this).val();
|
||||
}).get();
|
||||
|
||||
console.log(inAssetSeq);
|
||||
|
||||
for(var i=0; i<aReturnData.length-1; i++)
|
||||
{
|
||||
var aOptData = aReturnData[i].split("|");
|
||||
|
||||
// 기존에 존재하는경우 skip
|
||||
var iExistYn = inAssetSeq.indexOf(aOptData[0]);
|
||||
|
||||
if(iExistYn>-1) continue;
|
||||
|
||||
fn_table_asset_tr_add(aOptData[0], aOptData[1], aOptData[2]);
|
||||
}
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
// 자산정보 Row 추가 처리
|
||||
// ----------------------------------------
|
||||
function fn_table_asset_tr_add(inAssetSeq, vcAssetName, vcCate3)
|
||||
{
|
||||
var strTrTag = " <tr> "
|
||||
+ " <td > "
|
||||
+ " <label><input type='checkbox' style='display: inline-block;' name='chkAsset' /> </label> "
|
||||
+ " </td> "
|
||||
+ " <td >"+vcCate3+"</td> "
|
||||
+ " <td >"+vcAssetName+"</td> "
|
||||
+ " <td > "
|
||||
+ " <input type='text' name='txCommentAsset' id='txCommentAsset' value='' style='width:80%;'/> "
|
||||
+ " </td> "
|
||||
+ " <input type='hidden' name='inAssetSeq' id='inAssetSeq' value='"+inAssetSeq+"' > "
|
||||
+ " </tr> "
|
||||
|
||||
$("#table_asset tbody").append(strTrTag)
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
// 자산정보 선택한 자산 삭제
|
||||
// ----------------------------------------
|
||||
function fn_Asset_Delete()
|
||||
{
|
||||
|
||||
$("input:checkbox[name='chkAsset']:checked").each(function(k,kVal)
|
||||
{
|
||||
// 로우 삭제
|
||||
let chkRow = kVal.parentElement.parentElement.parentElement;
|
||||
$(chkRow).remove();
|
||||
});
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
// 서비스 정보 변경시
|
||||
// ----------------------------------------
|
||||
function selInServiceCode()
|
||||
{
|
||||
var inServiceCode = $('#inServiceCode option:selected').val() ;
|
||||
|
||||
var inData = {};
|
||||
inData = {"inServiceCode":inServiceCode};
|
||||
|
||||
proc.fn_get_service_info(inData);
|
||||
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
// 보고양식 변경시
|
||||
// ----------------------------------------
|
||||
function selReportForm()
|
||||
{
|
||||
var inSeq = $('#reportForm option:selected').val() ;
|
||||
|
||||
var inData = {};
|
||||
inData = {"seq":inSeq};
|
||||
|
||||
proc.fn_get_report_form_info(inData);
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
// 장애보고서 등록처리
|
||||
// ----------------------------------------
|
||||
function fncReportErrorInsert()
|
||||
{
|
||||
var bYes = confirm("장애보고서 등록 처리를 하시겠습니까?");
|
||||
if(bYes==false) return;
|
||||
|
||||
fncReportSaveSetting();
|
||||
|
||||
//input item Client-Side validate
|
||||
if (!validateReportErrorManage(document.reportErrorManage))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if($("#approvalsId").val() == '')
|
||||
{
|
||||
alert("결재라인을 입력해 주세요.");
|
||||
return;
|
||||
}
|
||||
|
||||
// 2025.12.02 나혁제 파일체크 로직 추가
|
||||
if (!fncAttachFileError())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
proc.fn_ReportError_save();
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
// 장애보고서 등록/승인요청
|
||||
// ----------------------------------------
|
||||
function fncReportErrorInsertApp()
|
||||
{
|
||||
var bYes = confirm("장애보고서 등록/승인요청 처리를 하시겠습니까?");
|
||||
if(bYes==false) return;
|
||||
|
||||
fncReportSaveSetting();
|
||||
|
||||
|
||||
//input item Client-Side validate
|
||||
if (!validateReportErrorManage(document.reportErrorManage))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// 2025.12.02 나혁제 파일체크 로직 추가
|
||||
if (!fncAttachFileError())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if($("#approvalsId").val() == '')
|
||||
{
|
||||
alert("결재라인을 입력해 주세요.");
|
||||
return;
|
||||
}
|
||||
|
||||
// 승인요청 메세지 팝업 open
|
||||
PopupOpen("/srm/PopReqApproval", 340, 450, '');
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
// 보고서 변경/승인처리 처리(최종 저장 처리 )
|
||||
// ----------------------------------------
|
||||
function fncAppLast(strMsg)
|
||||
{
|
||||
$('#reqTxComment' ).val(strMsg) ;
|
||||
$('#reqApprovalYn' ).val("Y" ) ;
|
||||
|
||||
proc.fn_ReportError_save();
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
// 2025.12.02 나혁제 파일체크 로직 추가
|
||||
// 첨부파일 체크
|
||||
// ----------------------------------------
|
||||
function fncAttachFileError()
|
||||
{
|
||||
// 결과가 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 fncReportSaveSetting()
|
||||
{
|
||||
var form = document.reportErrorManage;
|
||||
|
||||
// 결재라인
|
||||
var strExistUser = $("input[name='approvalUserId']").map(function () { return $(this).val();}).get();
|
||||
var strExistUserText = $("input[name='approvalUserNm']").map(function () { return $(this).val();}).get();
|
||||
|
||||
strExistUser.join(',');
|
||||
strExistUserText.join(',');
|
||||
|
||||
form.approvalsId .value = strExistUser;
|
||||
form.approvalsName.value = strExistUserText;
|
||||
|
||||
// 보고서 자산 구조
|
||||
var strAssetSeq = $("input[name='inAssetSeq']").map(function () { return $(this).val();}).get();
|
||||
var strCommentAsset = $("input[name='txCommentAsset']").map(function () { return $(this).val();}).get();
|
||||
|
||||
strAssetSeq.join(',');
|
||||
strCommentAsset.join(',');
|
||||
|
||||
form.assetSeqs .value = strAssetSeq;
|
||||
form.assetCommnets.value = strCommentAsset;
|
||||
|
||||
form.txReportBody.value = tinyMCE.get("serviceBody").getContent(); // 평문
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
// 사용자 검색 팝업
|
||||
// ----------------------------------------
|
||||
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 fn_User_Multi_Selected(strReturnData)
|
||||
{
|
||||
var aReturnData = strReturnData.split(","); // split에 '-'를 넣었습니다.
|
||||
|
||||
console.log(aReturnData);
|
||||
|
||||
var strExistUser = $("input[name='approvalUserId']").map(function () {
|
||||
return $(this).val();
|
||||
}).get();
|
||||
|
||||
console.log(strExistUser);
|
||||
|
||||
for(var i=0; i<aReturnData.length-1; i++)
|
||||
{
|
||||
var aOptData = aReturnData[i].split("|");
|
||||
|
||||
// 기존에 존재하는경우 skip
|
||||
var iExistYn = strExistUser.indexOf(aOptData[0]);
|
||||
|
||||
if(iExistYn>-1) continue;
|
||||
|
||||
fn_table_appr_tr_add(aOptData[0], aOptData[1]);
|
||||
}
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
// 결재라인 Row 추가 처리
|
||||
// ----------------------------------------
|
||||
function fn_table_appr_tr_add(strId, strName)
|
||||
{
|
||||
// 2025.11.18 나혁제 결재순서 표시
|
||||
var trApprCnt = $('#table_appr >tbody tr').length+1;
|
||||
|
||||
var strTrTag = " <tr> "
|
||||
+" <td > "
|
||||
+" <label><input type='checkbox' style='display: inline-block;' id='chkAppUser' name='chkAppUser' /> </label> "
|
||||
+" </td> "
|
||||
+" <td >"+trApprCnt+"</td> "
|
||||
+" <td >"+strName+"</td> "
|
||||
+" <td ></td> "
|
||||
+" <td ></td> "
|
||||
+" <input type='hidden' name='approvalUserId' id='approvalUserId' value='"+strId+"' > "
|
||||
+" <input type='hidden' name='approvalUserNm' id='approvalUserNm' value='"+strName+"' > "
|
||||
+" </tr> "
|
||||
;
|
||||
|
||||
$("#table_appr tbody").append(strTrTag)
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
// 결재라인 선택한 사용자 삭제
|
||||
// ----------------------------------------
|
||||
function fn_User_Delete()
|
||||
{
|
||||
$("input:checkbox[name='chkAppUser']:checked").each(function(k,kVal)
|
||||
{
|
||||
// 로우 삭제
|
||||
let chkRow = kVal.parentElement.parentElement.parentElement;
|
||||
$(chkRow).remove();
|
||||
});
|
||||
|
||||
// 2025.10.20 나혁제 결재순서 재조정
|
||||
reorderApprSeq();
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
// 2025.11.19 나혁제
|
||||
// 결재순서 위로 이동처리
|
||||
// ----------------------------------------
|
||||
function fnMoveUpTR()
|
||||
{
|
||||
var $selected = $("#table_appr tbody tr.selected");
|
||||
|
||||
if ($selected.length === 0)
|
||||
{
|
||||
alert("이동할 행을 선택하세요.");
|
||||
return;
|
||||
}
|
||||
|
||||
var $prev = $selected.prev();
|
||||
|
||||
if ($prev.length > 0)
|
||||
{
|
||||
$selected.insertBefore($prev);
|
||||
reorderApprSeq();
|
||||
}
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
// 2025.11.19 나혁제
|
||||
// 결재순서 아래로 이동처리
|
||||
// ----------------------------------------
|
||||
function fnMoveDownTR()
|
||||
{
|
||||
var $selected = $("#table_appr tbody tr.selected");
|
||||
|
||||
if ($selected.length === 0)
|
||||
{
|
||||
alert("이동할 행을 선택하세요.");
|
||||
return;
|
||||
}
|
||||
|
||||
let $next = $selected.next();
|
||||
|
||||
if ($next.length > 0)
|
||||
{
|
||||
$selected.insertAfter($next);
|
||||
reorderApprSeq();
|
||||
}
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
// 2025.11.19 나혁제
|
||||
// 결재순서 재설정
|
||||
// ----------------------------------------
|
||||
function reorderApprSeq()
|
||||
{
|
||||
$("#table_appr tbody tr").each(function(index){
|
||||
// index는 0부터 시작하므로 1을 더해줌
|
||||
$(this).find("td:eq(1)").text(index + 1);
|
||||
});
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
// 팝업 오픈
|
||||
// ----------------------------------------
|
||||
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_ReportError_save : function ()
|
||||
{
|
||||
var form = $('#reportErrorManage')[0];
|
||||
var formData = new FormData(form);
|
||||
|
||||
$.ajax({
|
||||
url: '/srm/addReportError.do'
|
||||
, type: 'post'
|
||||
, enctype:'multipart/form-data'
|
||||
, data: formData
|
||||
, dataType: 'json'
|
||||
, processData:false
|
||||
, contentType:false
|
||||
, cache:false
|
||||
, success: function(data)
|
||||
{
|
||||
alert("등록 완료 되었습니다.");
|
||||
fncReportErrorList();
|
||||
|
||||
},
|
||||
error: function(errorThrown)
|
||||
{
|
||||
alert("보고서 등록중 오류가 발생하였습니다. \n 시스템관리자에게 문의해 주시기 바랍니다.");
|
||||
console.log(JSON.stringify(errorThrown));
|
||||
}
|
||||
});
|
||||
}
|
||||
,
|
||||
// 서비스 결재라인 정보 추출
|
||||
fn_get_service_info : function (inData)
|
||||
{
|
||||
$.ajax({
|
||||
url: '/srm/getSvcApprovalListError.do'
|
||||
, type: 'post'
|
||||
, data: JSON.stringify(inData)
|
||||
, dataType: 'json'
|
||||
, contentType: 'application/json'
|
||||
, async: false
|
||||
, success: function(data)
|
||||
{
|
||||
console.log(JSON.stringify(data));
|
||||
|
||||
$('#table_appr tbody tr').remove();
|
||||
|
||||
// 결재라인 세팅
|
||||
for(var i=0; i<data.resultApprovals.length; i++)
|
||||
{
|
||||
fn_table_appr_tr_add(data.resultApprovals[i].inUserSeq, data.resultApprovals[i].vcUserName);
|
||||
}
|
||||
},
|
||||
error: function(errorThrown)
|
||||
{
|
||||
alert("서비스 정보 조회중 오류가 발생하였습니다. \n 시스템 관리자에게 문의해 주시기 바랍니다.");
|
||||
console.log(JSON.stringify(errorThrown));
|
||||
}
|
||||
});
|
||||
}
|
||||
,
|
||||
// 보고양식 추출
|
||||
fn_get_report_form_info : function (inData)
|
||||
{
|
||||
$.ajax({
|
||||
url: '/srm/getReportFormError.do'
|
||||
, type: 'post'
|
||||
, data: JSON.stringify(inData)
|
||||
, dataType: 'json'
|
||||
, contentType: 'application/json'
|
||||
, async: false
|
||||
, success: function(data)
|
||||
{
|
||||
console.log(JSON.stringify(data));
|
||||
|
||||
// 본문세팅
|
||||
// drawEditor(data.strTxDefaultFormDec);
|
||||
drawEditor("serviceBody", data.strTxDefaultFormDec, false);
|
||||
|
||||
// 2025.05.21 나혁제 작업자정보 세팅
|
||||
$('#vcTaskUser').val(data.strVcTaskUser);
|
||||
$('#inTaskUser').val(data.strInTaskUser);
|
||||
},
|
||||
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="reportErrorManage" name="reportErrorManage" 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="유지보수 관리" >유지보수 관리</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: 12%;">
|
||||
<col style="width: 32%">
|
||||
<col style="width: 9%">
|
||||
<col style="width: 19%;">
|
||||
<col style="width: 9%">
|
||||
<col style="width: 21%;">
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<th> 보고서ID </th>
|
||||
<td> </td>
|
||||
<th> 서비스 </th>
|
||||
<td>
|
||||
<select name="inServiceCode" id="inServiceCode" onchange="selInServiceCode()" style="width: 90%;" >
|
||||
<c:forEach items="${resultService}" var="result" varStatus="status">
|
||||
<option value="${result.value}" <c:if test="${result.value == resultReport.inServiceCode}"> selected </c:if> > ${result.label} </option><!-- 분류코드명 -->
|
||||
</c:forEach>
|
||||
</select>
|
||||
</td>
|
||||
<th> 작성자 </th>
|
||||
<td>
|
||||
<input type="text" name="vcRegUser" id="vcRegUser" value="${vcRegUser}" readonly style="width: 90%;" />
|
||||
<input type="hidden" name="inRegUser" id="inRegUser" value="${inRegUser}" />
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th> 인스던트 접수번호 </th>
|
||||
<td> </td>
|
||||
<th> 작업분류 </th>
|
||||
<td>
|
||||
<input type="text" name="vcTask" id="vcTask" value="${resultReport.vcTask}" readonly style="width: 90%;" />
|
||||
<input type="hidden" name="inTask" id="inTask" value="${resultReport.inTask}" >
|
||||
|
||||
</td>
|
||||
<th> 작업자 </th>
|
||||
<td>
|
||||
<input type="text" name="vcTaskUser" id="vcTaskUser" value="${resultReport.vcTaskUser}" readonly style="width: 90%;" />
|
||||
|
||||
<a href="<c:url value='/cmm/selectUserListPopup.do' />" target="_blank" title="새 창으로 이동" onclick="fn_User_Search('조치예정', 'inTaskUser', '', 'vcTaskUser', '', '');return false;">
|
||||
<img src="<c:url value='/egov/images/egovframework/com/cmm/btn/btn_search.gif' />" alt="작업자 검색" title="작업자 검색">
|
||||
</a>
|
||||
|
||||
<input type="hidden" name="inTaskUser" id="inTaskUser" value="${resultReport.inTaskUser}" >
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<th> 서비스다운 </th>
|
||||
<td >
|
||||
<input type="text" class="btn_calendar" name="dtDownstartDatetime" id="dtDownstartDatetime" value="${dtDownstartDatetime}" readonly style="width:47%;"/>
|
||||
~<input type="text" class="btn_calendar" name="dtDownfinishDatetime" id="dtDownfinishDatetime" value="${dtDownfinishDatetime}" readonly style="width:47%;"/>
|
||||
</td>
|
||||
|
||||
<th> 시작일시 </th>
|
||||
<td>
|
||||
<input type="text" class="btn_calendar" name="dtStartDatetime" id="dtStartDatetime" value="${dtStartDatetime}" readonly style="width:90%;"/>
|
||||
|
||||
</td>
|
||||
<th> 종료일시 </th>
|
||||
<td>
|
||||
<input type="text" class="btn_calendar" name="dtFinishDatetime" id="dtFinishDatetime" value="${dtFinishDatetime}" readonly style="width:90%;"/>
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<th rowspan=2 > 보고서양식 </th>
|
||||
<td rowspan=2 >
|
||||
<select name="reportForm" id="reportForm" onchange="selReportForm()" style="width: 90%;" >
|
||||
<c:forEach items="${resultForm}" var="result" varStatus="status">
|
||||
<option value="${result.inReportForm}" > ${result.vcFormName} </option><!-- 분류코드명 -->
|
||||
</c:forEach>
|
||||
</select>
|
||||
</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>
|
||||
</div>
|
||||
<!-- attached file End -->
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>기존첨부파일</th>
|
||||
<td colspan=3>
|
||||
<c:import url="/cmm/selectFileInfs.do" charEncoding="utf-8">
|
||||
<c:param name="param_atchFileId" value="${resultReport.atchFileId}" />
|
||||
<c:param name="strItmsYn" value="Y" />
|
||||
</c:import>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<th> 제목 </th>
|
||||
<td colspan=5>
|
||||
<input type="text" name="vcReportTitle" id="vcReportTitle" value="${resultReport.vcReportTitle}" style="width:90%;"/>
|
||||
</td>
|
||||
|
||||
</tr>
|
||||
|
||||
|
||||
|
||||
<!-- 2025.11.20 나혁제 결재라인 레이아웃 변경 및 결재순서 추가 -->
|
||||
<tr>
|
||||
<th >서비스 결재 라인 </th>
|
||||
<td colspan=5 style="vertical-align: top;">
|
||||
|
||||
<div class="btn_group" >
|
||||
<button type="button" class="btn-function" onclick="fn_User_Search('조치예정', '', '', '', '', 'Y');return false;" style="margin-top: -30px;"> 조회 </button>
|
||||
<button type="button" class="btn-function" onclick="fn_User_Delete(); return false;" style="margin-top: -30px;"> 삭제 </button>
|
||||
</div>
|
||||
|
||||
<div style="display: flex;align-items: flex-start;">
|
||||
|
||||
<div class="tbl_list">
|
||||
<!-- 목록영역 -->
|
||||
<table class="table" summary="" id="table_appr" >
|
||||
<caption>결재라인 <spring:message code="title.list" /></caption>
|
||||
<colgroup>
|
||||
<col style="width: 8%;">
|
||||
<col style="width: 8%;">
|
||||
<col style="width: 15%;">
|
||||
<col style="width: 10%;">
|
||||
<col style="width: *;">
|
||||
</colgroup>
|
||||
|
||||
<thead>
|
||||
<tr>
|
||||
<th></th>
|
||||
<th>결재순서</th>
|
||||
<th>결재자</th>
|
||||
<th>상태</th>
|
||||
<th>Comment</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
<tbody>
|
||||
<c:forEach var="approvals" items="${resultApprovals}" varStatus="status">
|
||||
<tr>
|
||||
<td >
|
||||
<label><input type="checkbox" style="display: inline-block;" name="chkAppUser" /> </label>
|
||||
</td>
|
||||
<td ><c:out value="${approvals.inOrder+1}"/></td>
|
||||
<td ><c:out value="${approvals.vcUserName}"/></td>
|
||||
<td ></td>
|
||||
<td ></td>
|
||||
|
||||
<input type='hidden' name="approvalUserId" id="approvalUserId" value="${approvals.inUserSeq}" >
|
||||
<input type='hidden' name="approvalUserNm" id="approvalUserNm" value="${approvals.vcUserName}" >
|
||||
</tr>
|
||||
</c:forEach>
|
||||
</tbody>
|
||||
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<div style="width:3%;text-align:center;padding-left: 5px;align-self: center;">
|
||||
<a href="#" onclick="fnMoveUpTR(this); return false;" style="font-size: x-large;" >▲</a>
|
||||
<a href="#" onclick="fnMoveDownTR(this); return false;" style="font-size: x-large;" >▼</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
|
||||
<tr>
|
||||
<th> 자산</th>
|
||||
<td colspan=5>
|
||||
|
||||
<div class="btn_group" >
|
||||
<button type="button" class="btn-function" onclick="fn_Asset_Search();return false;" style="margin-top: -30px;"> 조회 </button>
|
||||
<button type="button" class="btn-function" onclick="fn_Asset_Delete(); return false;" style="margin-top: -30px;"> 삭제 </button>
|
||||
</div>
|
||||
|
||||
<div class="tbl_list">
|
||||
<!-- 목록영역 -->
|
||||
<table class="table" summary="" id="table_asset" >
|
||||
<caption>연결자산정보 <spring:message code="title.list" /></caption>
|
||||
<colgroup>
|
||||
<col style="width: 10%;">
|
||||
<col style="width: 25%;">
|
||||
<col style="width: 20%;">
|
||||
<col style="width: *;">
|
||||
</colgroup>
|
||||
|
||||
<thead>
|
||||
<tr>
|
||||
<th></th>
|
||||
<th>소분류</th>
|
||||
<th>자산명</th>
|
||||
<th>비고</th>
|
||||
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
<tbody>
|
||||
<c:forEach var="assets" items="${resultAssets}" varStatus="status">
|
||||
<tr>
|
||||
<td>
|
||||
<label><input type='checkbox' style='display: inline-block;' name='chkAsset' /> </label>
|
||||
</td>
|
||||
<td ><c:out value="${assets.vcCate3}"/></td>
|
||||
<td ><c:out value="${assets.vcAssetName}"/></td>
|
||||
<td >
|
||||
<input type="text" name="txCommentAsset" id="txCommentAsset" value="${assets.txComment}" style="width:80%;"/>
|
||||
</td>
|
||||
<input type="hidden" name="inAssetSeq" id="inAssetSeq" value="${assets.inAssetSeq}" >
|
||||
|
||||
</tr>
|
||||
</c:forEach>
|
||||
</tbody>
|
||||
|
||||
</table>
|
||||
</div>
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
|
||||
|
||||
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<textarea id="serviceBody" name="serviceBody" ></textarea>
|
||||
<textarea id="serviceBody2" name="serviceBody2" style="display:none;">${resultReport.txReportBody}</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="fncReportErrorList(); return false;" title="<spring:message code="button.list"/>">
|
||||
<spring:message code="button.list"/>
|
||||
</button>
|
||||
</div>
|
||||
<!--//왼쪽영역-->
|
||||
<!-- 오른쪽영역-->
|
||||
<div>
|
||||
<button type="button" class="btn-etc" onclick="fncReportErrorInsertApp(); return false;" title="등록/승인요청" >
|
||||
등록/승인요청
|
||||
</button>
|
||||
<button type="button" class="btn-etc" onclick="fncReportErrorInsert(); return false;" title="<spring:message code="button.create" />">
|
||||
<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="txReportBody" name="txReportBody" value="" >
|
||||
|
||||
<input type="hidden" id="assetSeqs" name="assetSeqs" value="" >
|
||||
<input type="hidden" id="assetCommnets" name="assetCommnets" value="" >
|
||||
|
||||
<input type="hidden" id="approvalsId" name="approvalsId" value="" >
|
||||
<input type="hidden" id="approvalsName" name="approvalsName" value="" >
|
||||
|
||||
<input type="hidden" id="inIncidentSeq" name="inIncidentSeq" value="${inIncidentSeq}" >
|
||||
<input type="hidden" id="inReportSeq" name="inReportSeq" value="0">
|
||||
<input type="hidden" id="inReportStatus" name="inReportStatus" value="0">
|
||||
<input type="hidden" id="inDowntime" name="inDowntime" value="0">
|
||||
|
||||
<input type="hidden" id="reqTxComment" name="reqTxComment" value=""/> <!-- 승인요청메세지 -->
|
||||
<input type="hidden" id="reqApprovalYn" name="reqApprovalYn" value=""/> <!-- 승인요청여부 -->
|
||||
|
||||
<input type="hidden" id="oldAtchFileId" name="oldAtchFileId" value="${resultReport.atchFileId}">
|
||||
|
||||
|
||||
</form:form>
|
||||
|
||||
@ -84,6 +84,25 @@
|
||||
varFrom.submit();
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
// 2026.01.22 나혁제
|
||||
// 새로만들기 기능확장
|
||||
// ----------------------------------------
|
||||
function fncReportErrorCopyInsert()
|
||||
{
|
||||
|
||||
if($('#inReportStatus').val()!='2' && $('#inReportStatus').val()!='3' )
|
||||
{
|
||||
alert("[승인완료/반려]된 보고서을 이용하야 새로만들기가 가능합니다.");
|
||||
return;
|
||||
}
|
||||
|
||||
// 수정화면으로 이동처리
|
||||
var varFrom = document.getElementById("reportErrorManage");
|
||||
varFrom.action = "<c:url value='/srm/insertCopyViewReportError.do'/>";
|
||||
varFrom.submit();
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
// 보고서 수정 화면 이동처리
|
||||
// ----------------------------------------
|
||||
@ -105,7 +124,7 @@
|
||||
{
|
||||
// 2025.11.18 나혁제 승인완료된 자료 수정불가
|
||||
// if(confirm("승인완료된 보고서입니다. \n수정하면 모든 승인 정보는 초기화 됩니다.\n수정하시겠습니까?") == false) return;
|
||||
alert("승인완료된 보고ㅓ입니다.\n 신규 재작성하시길 바랍니다.");
|
||||
alert("승인완료된 보고서입니다.\n 신규 재작성하시길 바랍니다.");
|
||||
return;
|
||||
|
||||
}
|
||||
@ -642,6 +661,10 @@
|
||||
</c:if>
|
||||
|
||||
<c:if test="${(privType eq 'mine' && report.inReportStatus ne 3) || privType eq 'super'}">
|
||||
<!-- 2026.01.22 나혁제 새로만들기 기능 추가 -->
|
||||
<button type="button" class="btn-etc" title="새로만들기" onclick="fncReportErrorCopyInsert(); return false;">
|
||||
새로만들기
|
||||
</button>
|
||||
<button type="button" class="btn-etc" title="수정" onclick="fncReportErrorUpdate(); return false;">
|
||||
수정
|
||||
</button>
|
||||
|
||||
@ -251,6 +251,13 @@
|
||||
return false;
|
||||
}
|
||||
|
||||
// 2026.01.23 나혁제 결재라인 체크 추가
|
||||
if($("#approvalsId").val() == '')
|
||||
{
|
||||
alert("결재라인을 입력해 주세요.");
|
||||
return;
|
||||
}
|
||||
|
||||
// 2025.12.02 나혁제 파일체크 로직 추가
|
||||
if (!fncAttachFileCheck())
|
||||
{
|
||||
@ -279,7 +286,7 @@
|
||||
|
||||
if($("#approvalsId").val() == '')
|
||||
{
|
||||
alert("승인요청시에는 결재라인이 필요합니다.");
|
||||
alert("결재라인을 입력해 주세요.");
|
||||
return;
|
||||
}
|
||||
|
||||
@ -811,7 +818,7 @@
|
||||
</td>
|
||||
<th> 작업자 </th>
|
||||
<td>
|
||||
<input type="text" name="vcTaskUser" id="vcTaskUser" value="${vcRegUser}"/>
|
||||
<input type="text" name="vcTaskUser" id="vcTaskUser" value="${vcRegUser}" readonly/>
|
||||
|
||||
<a href="<c:url value='/cmm/selectUserListPopup.do' />" target="_blank" title="새 창으로 이동" onclick="fn_User_Search('조치예정', 'inTaskUser', '', 'vcTaskUser', '', '');return false;">
|
||||
<img src="<c:url value='/egov/images/egovframework/com/cmm/btn/btn_search.gif' />" alt="작업자 검색" title="작업자 검색">
|
||||
|
||||
@ -52,23 +52,6 @@
|
||||
function fncSearchReportErrorList()
|
||||
{
|
||||
linkPage(1);
|
||||
|
||||
/*
|
||||
var arStatus = []; // 승인상태
|
||||
|
||||
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");
|
||||
|
||||
$("#status" ).val(arStatus.join(","));
|
||||
|
||||
alert($("#status").val());
|
||||
|
||||
document.listForm.pageIndex.value = "1";
|
||||
document.listForm.action = "<c:url value='/srm/searchReportError.do'/>";
|
||||
document.listForm.submit();
|
||||
*/
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
@ -112,9 +95,6 @@
|
||||
document.listForm.submit();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
</script>
|
||||
|
||||
|
||||
@ -162,19 +142,19 @@
|
||||
<tr>
|
||||
<td colspan=2>
|
||||
<label>문서번호:</label>
|
||||
<input class="s_input" id="reportId" name="reportId" type="text" size="35" maxlength="155" style="width: 170px;"
|
||||
<input class="s_input" id="reportId" name="reportId" type="text" size="35" maxlength="155" style="width: 155px;"
|
||||
value='<c:out value="${searchVO.reportId}"/>' title="<spring:message code="title.search" /> <spring:message code="input.input" />" >
|
||||
|
||||
<label>요청번호:</label>
|
||||
<input class="s_input" id="incidentNum" name="incidentNum" type="text" size="35" maxlength="155" style="width: 170px;"
|
||||
<label>인스던트 접수번호:</label>
|
||||
<input class="s_input" id="incidentNum" name="incidentNum" type="text" size="35" maxlength="155" style="width: 155px;"
|
||||
value='<c:out value="${searchVO.incidentNum}"/>' title="<spring:message code="title.search" /> <spring:message code="input.input" />" >
|
||||
|
||||
<label>작성자:</label>
|
||||
<input class="s_input" id="regUser" name="regUser" type="text" size="35" maxlength="155" style="width: 170px;"
|
||||
<input class="s_input" id="regUser" name="regUser" type="text" size="35" maxlength="155" style="width: 155px;"
|
||||
value='<c:out value="${searchVO.regUser}"/>' title="<spring:message code="title.search" /> <spring:message code="input.input" />" >
|
||||
|
||||
<label>제목:</label>
|
||||
<input class="s_input" id="reportTitle" name="reportTitle" type="text" size="35" maxlength="155" style="width: 170px;"
|
||||
<input class="s_input" id="reportTitle" name="reportTitle" type="text" size="35" maxlength="155" style="width: 155px;"
|
||||
value='<c:out value="${searchVO.reportTitle}"/>' title="<spring:message code="title.search" /> <spring:message code="input.input" />" >
|
||||
</td>
|
||||
</tr>
|
||||
@ -227,7 +207,7 @@
|
||||
<thead>
|
||||
<tr>
|
||||
<th>문서번호</th>
|
||||
<th>요청번호</th>
|
||||
<th>인스던트 접수번호</th>
|
||||
<th>서비스</th>
|
||||
<th>승인상태</th>
|
||||
<th>제목</th>
|
||||
|
||||
963
src/main/webapp/WEB-INF/jsp/itms/srm/ReportIssueCopyInsert.jsp
Normal file
963
src/main/webapp/WEB-INF/jsp/itms/srm/ReportIssueCopyInsert.jsp
Normal file
@ -0,0 +1,963 @@
|
||||
<!DOCTYPE html>
|
||||
|
||||
<%
|
||||
/**
|
||||
* @Class Name : ReportIssueCopyInsert.jsp
|
||||
* @Description : 이슈보고서 새로 만들기
|
||||
* @Modification Information
|
||||
* @
|
||||
* @ 수정일 수정자 수정내용
|
||||
* @ ------- -------- ---------------------------
|
||||
* @ 2026.01.22 나혁제 최초 생성
|
||||
*
|
||||
* @author urp 인프라본부 나혁제
|
||||
* @since 2026.01.22
|
||||
* @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">
|
||||
|
||||
<!-- 2025.11.19 나혁제 선택된 Row 처리 -->
|
||||
<style>
|
||||
.selected {background-color:#e8eff7;}
|
||||
</style>
|
||||
|
||||
<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?ver=1" ></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="reportIssueManage" 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()
|
||||
{
|
||||
// 결재라인 높이 조정
|
||||
// $("#table_appr tbody td").css("height", "10px");
|
||||
|
||||
// 시작일시, 종료일시, 서비스다운시작일시, 서비스다운종료일시 시간까지 세팅
|
||||
$("#dtDownstartDatetime, #dtDownfinishDatetime, #dtStartDatetime, #dtFinishDatetime").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);
|
||||
|
||||
// 2025.11.18 나혁제 결재라인 클릭 자료 표시
|
||||
$(document).on("click", "#table_appr tbody td", function(){
|
||||
$("#table_appr tbody tr").removeClass('selected');
|
||||
$(this).parent().addClass('selected');
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
//----------------------------------------
|
||||
// 화면 초기화(Form 완전 로딩후 )
|
||||
// ----------------------------------------
|
||||
$(window).on("load", function()
|
||||
{
|
||||
var strForm = document.getElementById("serviceBody2").value;
|
||||
// drawEditor(strForm);
|
||||
drawEditor("serviceBody", strForm, false);
|
||||
});
|
||||
|
||||
//----------------------------------------
|
||||
// 목록 화면으로 이동처리
|
||||
// ----------------------------------------
|
||||
function fncReportIssueList()
|
||||
{
|
||||
var varFrom = document.getElementById("reportIssueManage");
|
||||
varFrom.action = "<c:url value='/srm/searchReportIssue.do'/>";
|
||||
varFrom.submit();
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
// 자산 조회 팝업
|
||||
// ----------------------------------------
|
||||
function fn_Asset_Search()
|
||||
{
|
||||
var strUrl = "/rem/SelectResourcePopup.do";
|
||||
|
||||
var arrParam = new Array(6);
|
||||
arrParam[0] = window;
|
||||
|
||||
window.showModalDialog("<c:url value='"+strUrl+"' />"
|
||||
, arrParam
|
||||
,"dialogWidth:950px;dialogHeight:850px;resizable:yes;center:yes");
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
// 팝업창에서 결재자 선택 확인시
|
||||
// ----------------------------------------
|
||||
function fn_Asset_Multi_Selected(strReturnData)
|
||||
{
|
||||
var aReturnData = strReturnData.split(","); // split에 '-'를 넣었습니다.
|
||||
|
||||
console.log(aReturnData);
|
||||
|
||||
var inAssetSeq = $("input[name='inAssetSeq']").map(function () {
|
||||
return $(this).val();
|
||||
}).get();
|
||||
|
||||
console.log(inAssetSeq);
|
||||
|
||||
for(var i=0; i<aReturnData.length-1; i++)
|
||||
{
|
||||
var aOptData = aReturnData[i].split("|");
|
||||
|
||||
// 기존에 존재하는경우 skip
|
||||
var iExistYn = inAssetSeq.indexOf(aOptData[0]);
|
||||
|
||||
if(iExistYn>-1) continue;
|
||||
|
||||
fn_table_asset_tr_add(aOptData[0], aOptData[1], aOptData[2]);
|
||||
}
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
// 자산정보 Row 추가 처리
|
||||
// ----------------------------------------
|
||||
function fn_table_asset_tr_add(inAssetSeq, vcAssetName, vcCate3)
|
||||
{
|
||||
var strTrTag = " <tr> "
|
||||
+ " <td > "
|
||||
+ " <label><input type='checkbox' style='display: inline-block;' name='chkAsset' /> </label> "
|
||||
+ " </td> "
|
||||
+ " <td >"+vcCate3+"</td> "
|
||||
+ " <td >"+vcAssetName+"</td> "
|
||||
+ " <td > "
|
||||
+ " <input type='text' name='txCommentAsset' id='txCommentAsset' value='' style='width:80%;'/> "
|
||||
+ " </td> "
|
||||
+ " <input type='hidden' name='inAssetSeq' id='inAssetSeq' value='"+inAssetSeq+"' > "
|
||||
+ " </tr> "
|
||||
|
||||
$("#table_asset tbody").append(strTrTag)
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
// 자산정보 선택한 자산 삭제
|
||||
// ----------------------------------------
|
||||
function fn_Asset_Delete()
|
||||
{
|
||||
|
||||
$("input:checkbox[name='chkAsset']:checked").each(function(k,kVal)
|
||||
{
|
||||
// 로우 삭제
|
||||
let chkRow = kVal.parentElement.parentElement.parentElement;
|
||||
$(chkRow).remove();
|
||||
});
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
// 서비스 정보 변경시
|
||||
// ----------------------------------------
|
||||
function selInServiceCode()
|
||||
{
|
||||
var inServiceCode = $('#inServiceCode option:selected').val() ;
|
||||
|
||||
var inData = {};
|
||||
inData = {"inServiceCode":inServiceCode};
|
||||
|
||||
proc.fn_get_service_info(inData);
|
||||
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
// 보고양식 변경시
|
||||
// ----------------------------------------
|
||||
function selReportForm()
|
||||
{
|
||||
var inSeq = $('#reportForm option:selected').val() ;
|
||||
|
||||
var inData = {};
|
||||
inData = {"seq":inSeq};
|
||||
|
||||
proc.fn_get_report_form_info(inData);
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
// 아슈보고서 등록처리
|
||||
// ----------------------------------------
|
||||
function fncReportIssueInsert()
|
||||
{
|
||||
var bYes = confirm("아슈보고서 등록 처리를 하시겠습니까?");
|
||||
if(bYes==false) return;
|
||||
|
||||
fncReportSaveSetting();
|
||||
|
||||
//input item Client-Side validate
|
||||
if (!validateReportIssueManage(document.reportIssueManage))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if($("#approvalsId").val() == '')
|
||||
{
|
||||
alert("결재라인을 입력해 주세요.");
|
||||
return;
|
||||
}
|
||||
|
||||
// 2025.12.02 나혁제 파일체크 로직 추가
|
||||
if (!fncAttachFileIssue())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
proc.fn_ReportIssue_save();
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
// 아슈보고서 등록/승인요청
|
||||
// ----------------------------------------
|
||||
function fncReportIssueInsertApp()
|
||||
{
|
||||
var bYes = confirm("아슈보고서 등록/승인요청 처리를 하시겠습니까?");
|
||||
if(bYes==false) return;
|
||||
|
||||
fncReportSaveSetting();
|
||||
|
||||
|
||||
//input item Client-Side validate
|
||||
if (!validateReportIssueManage(document.reportIssueManage))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// 2025.12.02 나혁제 파일체크 로직 추가
|
||||
if (!fncAttachFileIssue())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if($("#approvalsId").val() == '')
|
||||
{
|
||||
alert("결재라인을 입력해 주세요.");
|
||||
return;
|
||||
}
|
||||
|
||||
// 승인요청 메세지 팝업 open
|
||||
PopupOpen("/srm/PopReqApproval", 340, 450, '');
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
// 보고서 변경/승인처리 처리(최종 저장 처리 )
|
||||
// ----------------------------------------
|
||||
function fncAppLast(strMsg)
|
||||
{
|
||||
$('#reqTxComment' ).val(strMsg) ;
|
||||
$('#reqApprovalYn' ).val("Y" ) ;
|
||||
|
||||
proc.fn_ReportIssue_save();
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
// 2025.12.02 나혁제 파일체크 로직 추가
|
||||
// 첨부파일 체크
|
||||
// ----------------------------------------
|
||||
function fncAttachFileIssue()
|
||||
{
|
||||
// 결과가 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 fncReportSaveSetting()
|
||||
{
|
||||
var form = document.reportIssueManage;
|
||||
|
||||
// 결재라인
|
||||
var strExistUser = $("input[name='approvalUserId']").map(function () { return $(this).val();}).get();
|
||||
var strExistUserText = $("input[name='approvalUserNm']").map(function () { return $(this).val();}).get();
|
||||
|
||||
strExistUser.join(',');
|
||||
strExistUserText.join(',');
|
||||
|
||||
form.approvalsId .value = strExistUser;
|
||||
form.approvalsName.value = strExistUserText;
|
||||
|
||||
// 보고서 자산 구조
|
||||
var strAssetSeq = $("input[name='inAssetSeq']").map(function () { return $(this).val();}).get();
|
||||
var strCommentAsset = $("input[name='txCommentAsset']").map(function () { return $(this).val();}).get();
|
||||
|
||||
strAssetSeq.join(',');
|
||||
strCommentAsset.join(',');
|
||||
|
||||
form.assetSeqs .value = strAssetSeq;
|
||||
form.assetCommnets.value = strCommentAsset;
|
||||
|
||||
form.txReportBody.value = tinyMCE.get("serviceBody").getContent(); // 평문
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
// 사용자 검색 팝업
|
||||
// ----------------------------------------
|
||||
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 fn_User_Multi_Selected(strReturnData)
|
||||
{
|
||||
var aReturnData = strReturnData.split(","); // split에 '-'를 넣었습니다.
|
||||
|
||||
console.log(aReturnData);
|
||||
|
||||
var strExistUser = $("input[name='approvalUserId']").map(function () {
|
||||
return $(this).val();
|
||||
}).get();
|
||||
|
||||
console.log(strExistUser);
|
||||
|
||||
for(var i=0; i<aReturnData.length-1; i++)
|
||||
{
|
||||
var aOptData = aReturnData[i].split("|");
|
||||
|
||||
// 기존에 존재하는경우 skip
|
||||
var iExistYn = strExistUser.indexOf(aOptData[0]);
|
||||
|
||||
if(iExistYn>-1) continue;
|
||||
|
||||
fn_table_appr_tr_add(aOptData[0], aOptData[1]);
|
||||
}
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
// 결재라인 Row 추가 처리
|
||||
// ----------------------------------------
|
||||
function fn_table_appr_tr_add(strId, strName)
|
||||
{
|
||||
// 2025.11.18 나혁제 결재순서 표시
|
||||
var trApprCnt = $('#table_appr >tbody tr').length+1;
|
||||
|
||||
var strTrTag = " <tr> "
|
||||
+" <td > "
|
||||
+" <label><input type='checkbox' style='display: inline-block;' id='chkAppUser' name='chkAppUser' /> </label> "
|
||||
+" </td> "
|
||||
+" <td >"+trApprCnt+"</td> "
|
||||
+" <td >"+strName+"</td> "
|
||||
+" <td ></td> "
|
||||
+" <td ></td> "
|
||||
+" <input type='hidden' name='approvalUserId' id='approvalUserId' value='"+strId+"' > "
|
||||
+" <input type='hidden' name='approvalUserNm' id='approvalUserNm' value='"+strName+"' > "
|
||||
+" </tr> "
|
||||
;
|
||||
|
||||
$("#table_appr tbody").append(strTrTag)
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
// 결재라인 선택한 사용자 삭제
|
||||
// ----------------------------------------
|
||||
function fn_User_Delete()
|
||||
{
|
||||
$("input:checkbox[name='chkAppUser']:checked").each(function(k,kVal)
|
||||
{
|
||||
// 로우 삭제
|
||||
let chkRow = kVal.parentElement.parentElement.parentElement;
|
||||
$(chkRow).remove();
|
||||
});
|
||||
|
||||
// 2025.10.20 나혁제 결재순서 재조정
|
||||
reorderApprSeq();
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
// 2025.11.19 나혁제
|
||||
// 결재순서 위로 이동처리
|
||||
// ----------------------------------------
|
||||
function fnMoveUpTR()
|
||||
{
|
||||
var $selected = $("#table_appr tbody tr.selected");
|
||||
|
||||
if ($selected.length === 0)
|
||||
{
|
||||
alert("이동할 행을 선택하세요.");
|
||||
return;
|
||||
}
|
||||
|
||||
var $prev = $selected.prev();
|
||||
|
||||
if ($prev.length > 0)
|
||||
{
|
||||
$selected.insertBefore($prev);
|
||||
reorderApprSeq();
|
||||
}
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
// 2025.11.19 나혁제
|
||||
// 결재순서 아래로 이동처리
|
||||
// ----------------------------------------
|
||||
function fnMoveDownTR()
|
||||
{
|
||||
var $selected = $("#table_appr tbody tr.selected");
|
||||
|
||||
if ($selected.length === 0)
|
||||
{
|
||||
alert("이동할 행을 선택하세요.");
|
||||
return;
|
||||
}
|
||||
|
||||
let $next = $selected.next();
|
||||
|
||||
if ($next.length > 0)
|
||||
{
|
||||
$selected.insertAfter($next);
|
||||
reorderApprSeq();
|
||||
}
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
// 2025.11.19 나혁제
|
||||
// 결재순서 재설정
|
||||
// ----------------------------------------
|
||||
function reorderApprSeq()
|
||||
{
|
||||
$("#table_appr tbody tr").each(function(index){
|
||||
// index는 0부터 시작하므로 1을 더해줌
|
||||
$(this).find("td:eq(1)").text(index + 1);
|
||||
});
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
// 팝업 오픈
|
||||
// ----------------------------------------
|
||||
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_ReportIssue_save : function ()
|
||||
{
|
||||
var form = $('#reportIssueManage')[0];
|
||||
var formData = new FormData(form);
|
||||
|
||||
$.ajax({
|
||||
url: '/srm/addReportIssue.do'
|
||||
, type: 'post'
|
||||
, enctype:'multipart/form-data'
|
||||
, data: formData
|
||||
, dataType: 'json'
|
||||
, processData:false
|
||||
, contentType:false
|
||||
, cache:false
|
||||
, success: function(data)
|
||||
{
|
||||
alert("등록 완료 되었습니다.");
|
||||
fncReportIssueList();
|
||||
|
||||
},
|
||||
error: function(errorThrown)
|
||||
{
|
||||
alert("보고서 등록중 오류가 발생하였습니다. \n 시스템관리자에게 문의해 주시기 바랍니다.");
|
||||
console.log(JSON.stringify(errorThrown));
|
||||
}
|
||||
});
|
||||
}
|
||||
,
|
||||
// 서비스 결재라인 정보 추출
|
||||
fn_get_service_info : function (inData)
|
||||
{
|
||||
$.ajax({
|
||||
url: '/srm/getSvcApprovalListIssue.do'
|
||||
, type: 'post'
|
||||
, data: JSON.stringify(inData)
|
||||
, dataType: 'json'
|
||||
, contentType: 'application/json'
|
||||
, async: false
|
||||
, success: function(data)
|
||||
{
|
||||
console.log(JSON.stringify(data));
|
||||
|
||||
$('#table_appr tbody tr').remove();
|
||||
|
||||
// 결재라인 세팅
|
||||
for(var i=0; i<data.resultApprovals.length; i++)
|
||||
{
|
||||
fn_table_appr_tr_add(data.resultApprovals[i].inUserSeq, data.resultApprovals[i].vcUserName);
|
||||
}
|
||||
},
|
||||
error: function(errorThrown)
|
||||
{
|
||||
alert("서비스 정보 조회중 오류가 발생하였습니다. \n 시스템 관리자에게 문의해 주시기 바랍니다.");
|
||||
console.log(JSON.stringify(errorThrown));
|
||||
}
|
||||
});
|
||||
}
|
||||
,
|
||||
// 보고양식 추출
|
||||
fn_get_report_form_info : function (inData)
|
||||
{
|
||||
$.ajax({
|
||||
url: '/srm/getReportFormIssue.do'
|
||||
, type: 'post'
|
||||
, data: JSON.stringify(inData)
|
||||
, dataType: 'json'
|
||||
, contentType: 'application/json'
|
||||
, async: false
|
||||
, success: function(data)
|
||||
{
|
||||
console.log(JSON.stringify(data));
|
||||
|
||||
// 본문세팅
|
||||
// drawEditor(data.strTxDefaultFormDec);
|
||||
drawEditor("serviceBody", data.strTxDefaultFormDec, false);
|
||||
|
||||
// 2025.05.21 나혁제 작업자정보 세팅
|
||||
$('#vcTaskUser').val(data.strVcTaskUser);
|
||||
$('#inTaskUser').val(data.strInTaskUser);
|
||||
},
|
||||
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="reportIssueManage" name="reportIssueManage" 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="유지보수 관리" >유지보수 관리</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: 12%;">
|
||||
<col style="width: 32%">
|
||||
<col style="width: 9%">
|
||||
<col style="width: 19%;">
|
||||
<col style="width: 9%">
|
||||
<col style="width: 21%;">
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<th> 보고서ID </th>
|
||||
<td> </td>
|
||||
<th> 서비스 </th>
|
||||
<td>
|
||||
<select name="inServiceCode" id="inServiceCode" onchange="selInServiceCode()" style="width: 90%;" >
|
||||
<c:forEach items="${resultService}" var="result" varStatus="status">
|
||||
<option value="${result.value}" <c:if test="${result.value == resultReport.inServiceCode}"> selected </c:if> > ${result.label} </option><!-- 분류코드명 -->
|
||||
</c:forEach>
|
||||
</select>
|
||||
</td>
|
||||
<th> 작성자 </th>
|
||||
<td>
|
||||
<input type="text" name="vcRegUser" id="vcRegUser" value="${vcRegUser}" readonly style="width: 90%;" />
|
||||
<input type="hidden" name="inRegUser" id="inRegUser" value="${inRegUser}" />
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th> 인스던트 접수번호 </th>
|
||||
<td> </td>
|
||||
<th> 작업분류 </th>
|
||||
<td>
|
||||
<input type="text" name="vcTask" id="vcTask" value="${resultReport.vcTask}" readonly style="width: 90%;" />
|
||||
<input type="hidden" name="inTask" id="inTask" value="${resultReport.inTask}" >
|
||||
|
||||
</td>
|
||||
<th> 작업자 </th>
|
||||
<td>
|
||||
<input type="text" name="vcTaskUser" id="vcTaskUser" value="${resultReport.vcTaskUser}" style="width: 90%;" readonly />
|
||||
|
||||
<a href="<c:url value='/cmm/selectUserListPopup.do' />" target="_blank" title="새 창으로 이동" onclick="fn_User_Search('조치예정', 'inTaskUser', '', 'vcTaskUser', '', '');return false;">
|
||||
<img src="<c:url value='/egov/images/egovframework/com/cmm/btn/btn_search.gif' />" alt="작업자 검색" title="작업자 검색">
|
||||
</a>
|
||||
|
||||
<input type="hidden" name="inTaskUser" id="inTaskUser" value="${resultReport.inTaskUser}" >
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<th> 서비스다운 </th>
|
||||
<td >
|
||||
<input type="text" class="btn_calendar" name="dtDownstartDatetime" id="dtDownstartDatetime" value="${dtDownstartDatetime}" readonly style="width:47%;"/>
|
||||
~<input type="text" class="btn_calendar" name="dtDownfinishDatetime" id="dtDownfinishDatetime" value="${dtDownfinishDatetime}" readonly style="width:47%;"/>
|
||||
</td>
|
||||
<th> 시작일시 </th>
|
||||
<td>
|
||||
<input type="text" class="btn_calendar" name="dtStartDatetime" id="dtStartDatetime" value="${dtStartDatetime}" readonly style="width:90%;"/>
|
||||
|
||||
</td>
|
||||
<th> 종료일시 </th>
|
||||
<td>
|
||||
<input type="text" class="btn_calendar" name="dtFinishDatetime" id="dtFinishDatetime" value="${dtFinishDatetime}" readonly style="width:90%;"/>
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<th rowspan=2 > 보고서양식 </th>
|
||||
<td rowspan=2 >
|
||||
<select name="reportForm" id="reportForm" onchange="selReportForm()" style="width: 90%;" >
|
||||
<c:forEach items="${resultForm}" var="result" varStatus="status">
|
||||
<option value="${result.inReportForm}" > ${result.vcFormName} </option><!-- 분류코드명 -->
|
||||
</c:forEach>
|
||||
</select>
|
||||
</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>
|
||||
</div>
|
||||
<!-- attached file End -->
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<th>기존첨부파일</th>
|
||||
<td colspan=3>
|
||||
<c:import url="/cmm/selectFileInfs.do" charEncoding="utf-8">
|
||||
<c:param name="param_atchFileId" value="${resultReport.atchFileId}" />
|
||||
<c:param name="strItmsYn" value="Y" />
|
||||
</c:import>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<th> 제목 </th>
|
||||
<td colspan=5>
|
||||
<input type="text" name="vcReportTitle" id="vcReportTitle" value="${resultReport.vcReportTitle}" style="width:90%;"/>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
|
||||
<!-- 2025.11.20 나혁제 결재라인 레이아웃 변경 및 결재순서 추가 -->
|
||||
<tr>
|
||||
<th >서비스 결재 라인 </th>
|
||||
<td colspan=5 style="vertical-align: top;">
|
||||
|
||||
<div class="btn_group" >
|
||||
<button type="button" class="btn-function" onclick="fn_User_Search('조치예정', '', '', '', '', 'Y');return false;" style="margin-top: -30px;"> 조회 </button>
|
||||
<button type="button" class="btn-function" onclick="fn_User_Delete(); return false;" style="margin-top: -30px;"> 삭제 </button>
|
||||
</div>
|
||||
|
||||
<div style="display: flex;align-items: flex-start;">
|
||||
|
||||
<div class="tbl_list">
|
||||
<!-- 목록영역 -->
|
||||
<table class="table" summary="" id="table_appr" >
|
||||
<caption>결재라인 <spring:message code="title.list" /></caption>
|
||||
<colgroup>
|
||||
<col style="width: 8%;">
|
||||
<col style="width: 8%;">
|
||||
<col style="width: 15%;">
|
||||
<col style="width: 10%;">
|
||||
<col style="width: *;">
|
||||
</colgroup>
|
||||
|
||||
<thead>
|
||||
<tr>
|
||||
<th></th>
|
||||
<th>결재순서</th>
|
||||
<th>결재자</th>
|
||||
<th>상태</th>
|
||||
<th>Comment</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
<tbody>
|
||||
<c:forEach var="approvals" items="${resultApprovals}" varStatus="status">
|
||||
<tr>
|
||||
<td >
|
||||
<label><input type="checkbox" style="display: inline-block;" name="chkAppUser" /> </label>
|
||||
</td>
|
||||
<td ><c:out value="${approvals.inOrder+1}"/></td>
|
||||
<td ><c:out value="${approvals.vcUserName}"/></td>
|
||||
<td ></td>
|
||||
<td ></td>
|
||||
|
||||
<input type='hidden' name="approvalUserId" id="approvalUserId" value="${approvals.inUserSeq}" >
|
||||
<input type='hidden' name="approvalUserNm" id="approvalUserNm" value="${approvals.vcUserName}" >
|
||||
</tr>
|
||||
</c:forEach>
|
||||
</tbody>
|
||||
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<div style="width:3%;text-align:center;padding-left: 5px;align-self: center;">
|
||||
<a href="#" onclick="fnMoveUpTR(this); return false;" style="font-size: x-large;" >▲</a>
|
||||
<a href="#" onclick="fnMoveDownTR(this); return false;" style="font-size: x-large;" >▼</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
|
||||
<tr>
|
||||
<th> 자산</th>
|
||||
<td colspan=5>
|
||||
|
||||
<div class="btn_group" >
|
||||
<button type="button" class="btn-function" onclick="fn_Asset_Search();return false;" style="margin-top: -30px;"> 조회 </button>
|
||||
<button type="button" class="btn-function" onclick="fn_Asset_Delete(); return false;" style="margin-top: -30px;"> 삭제 </button>
|
||||
</div>
|
||||
|
||||
<div class="tbl_list">
|
||||
<!-- 목록영역 -->
|
||||
<table class="table" summary="" id="table_asset" >
|
||||
<caption>연결자산정보 <spring:message code="title.list" /></caption>
|
||||
<colgroup>
|
||||
<col style="width: 10%;">
|
||||
<col style="width: 25%;">
|
||||
<col style="width: 20%;">
|
||||
<col style="width: *;">
|
||||
</colgroup>
|
||||
|
||||
<thead>
|
||||
<tr>
|
||||
<th></th>
|
||||
<th>소분류</th>
|
||||
<th>자산명</th>
|
||||
<th>비고</th>
|
||||
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
<tbody>
|
||||
<c:forEach var="assets" items="${resultAssets}" varStatus="status">
|
||||
<tr>
|
||||
<td>
|
||||
<label><input type='checkbox' style='display: inline-block;' name='chkAsset' /> </label>
|
||||
</td>
|
||||
<td ><c:out value="${assets.vcCate3}"/></td>
|
||||
<td ><c:out value="${assets.vcAssetName}"/></td>
|
||||
<td >
|
||||
<input type="text" name="txCommentAsset" id="txCommentAsset" value="${assets.txComment}" style="width:90%;"/>
|
||||
</td>
|
||||
<input type="hidden" name="inAssetSeq" id="inAssetSeq" value="${assets.inAssetSeq}" >
|
||||
|
||||
</tr>
|
||||
</c:forEach>
|
||||
</tbody>
|
||||
|
||||
</table>
|
||||
</div>
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
|
||||
</table>
|
||||
|
||||
<textarea id="serviceBody" name="serviceBody" ></textarea>
|
||||
<textarea id="serviceBody2" name="serviceBody2" style="display:none;">${resultReport.txReportBody}</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="fncReportIssueList(); return false;" title="<spring:message code="button.list"/>">
|
||||
<spring:message code="button.list"/>
|
||||
</button>
|
||||
</div>
|
||||
<!--//왼쪽영역-->
|
||||
<!-- 오른쪽영역-->
|
||||
<div>
|
||||
<button type="button" class="btn-etc" onclick="fncReportIssueInsertApp(); return false;" title="등록/승인요청" >
|
||||
등록/승인요청
|
||||
</button>
|
||||
<button type="button" class="btn-etc" onclick="fncReportIssueInsert(); return false;" title="<spring:message code="button.create" />">
|
||||
<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="txReportBody" name="txReportBody" value="" >
|
||||
|
||||
<input type="hidden" id="assetSeqs" name="assetSeqs" value="" >
|
||||
<input type="hidden" id="assetCommnets" name="assetCommnets" value="" >
|
||||
|
||||
<input type="hidden" id="approvalsId" name="approvalsId" value="" >
|
||||
<input type="hidden" id="approvalsName" name="approvalsName" value="" >
|
||||
|
||||
<input type="hidden" id="inIncidentSeq" name="inIncidentSeq" value="${inIncidentSeq}" >
|
||||
<input type="hidden" id="inReportSeq" name="inReportSeq" value="0">
|
||||
<input type="hidden" id="inReportStatus" name="inReportStatus" value="0">
|
||||
<input type="hidden" id="inDowntime" name="inDowntime" value="0">
|
||||
|
||||
<input type="hidden" id="reqTxComment" name="reqTxComment" value=""/> <!-- 승인요청메세지 -->
|
||||
<input type="hidden" id="reqApprovalYn" name="reqApprovalYn" value=""/> <!-- 승인요청여부 -->
|
||||
|
||||
<input type="hidden" id="oldAtchFileId" name="oldAtchFileId" value="${resultReport.atchFileId}">
|
||||
|
||||
|
||||
</form:form>
|
||||
|
||||
@ -84,6 +84,25 @@
|
||||
varFrom.submit();
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
// 2026.01.22 나혁제
|
||||
// 새로만들기 기능확장
|
||||
// ----------------------------------------
|
||||
function fncReportIssueCopyInsert()
|
||||
{
|
||||
|
||||
if($('#inReportStatus').val()!='2' && $('#inReportStatus').val()!='3' )
|
||||
{
|
||||
alert("[승인완료/반려]된 보고서을 이용하야 새로만들기가 가능합니다.");
|
||||
return;
|
||||
}
|
||||
|
||||
// 수정화면으로 이동처리
|
||||
var varFrom = document.getElementById("reportIssueManage");
|
||||
varFrom.action = "<c:url value='/srm/insertCopyViewReportIssue.do'/>";
|
||||
varFrom.submit();
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
// 보고서 수정 화면 이동처리
|
||||
// ----------------------------------------
|
||||
@ -105,7 +124,7 @@
|
||||
{
|
||||
// 2025.11.20 나혁제 승인완료된 자료 수정불가
|
||||
// if(confirm("승인완료된 보고서입니다. \n수정하면 모든 승인 정보는 초기화 됩니다.\n수정하시겠습니까?") == false) return;
|
||||
alert("승인완료된 보고ㅓ입니다.\n 신규 재작성하시길 바랍니다.");
|
||||
alert("승인완료된 보고서입니다.\n 신규 재작성하시길 바랍니다.");
|
||||
return;
|
||||
|
||||
}
|
||||
@ -124,6 +143,25 @@
|
||||
varFrom.submit();
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
// 2026.01.22 나혁제
|
||||
// 새로만들기 기능확장
|
||||
// ----------------------------------------
|
||||
function fncReportIssueCopyInsert()
|
||||
{
|
||||
|
||||
if($('#inReportStatus').val()!='2' && $('#inReportStatus').val()!='3' )
|
||||
{
|
||||
alert("[승인완료/반려]된 보고서을 이용하야 새로만들기가 가능합니다.");
|
||||
return;
|
||||
}
|
||||
|
||||
// 수정화면으로 이동처리
|
||||
var varFrom = document.getElementById("reportIssueManage");
|
||||
varFrom.action = "<c:url value='/srm/insertCopyViewReportIssue.do'/>";
|
||||
varFrom.submit();
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
// 보고서 삭제처리
|
||||
// ----------------------------------------
|
||||
@ -629,12 +667,20 @@
|
||||
</c:if>
|
||||
|
||||
<c:if test="${(privType eq 'mine' || privType eq 'super') && resultReport.inReportStatus eq 0 && !empty resultApprovals}">
|
||||
<!-- 2026.01.22 나혁제 새로만들기 기능 추가 -->
|
||||
<button type="button" class="btn-etc" title="새로만들기" onclick="fncReportIssueCopyInsert(); return false;">
|
||||
새로만들기
|
||||
</button>
|
||||
<button type="button" class="btn-etc" title="승인요청" onclick="fncReportIssueReqApp(); return false;">
|
||||
승인요청
|
||||
</button>
|
||||
</c:if>
|
||||
|
||||
<c:if test="${(privType eq 'mine' && report.inReportStatus ne 3) || privType eq 'super'}">
|
||||
<!-- 2026.01.22 나혁제 새로만들기 기능 추가 -->
|
||||
<button type="button" class="btn-etc" title="새로만들기" onclick="fncReportIssueCopyInsert(); return false;">
|
||||
새로만들기
|
||||
</button>
|
||||
<button type="button" class="btn-etc" title="수정" onclick="fncReportIssueUpdate(); return false;">
|
||||
수정
|
||||
</button>
|
||||
|
||||
@ -251,6 +251,13 @@
|
||||
return false;
|
||||
}
|
||||
|
||||
// 2026.01.23 나혁제 결재라인 체크 추가
|
||||
if($("#approvalsId").val() == '')
|
||||
{
|
||||
alert("결재라인을 입력해 주세요.");
|
||||
return;
|
||||
}
|
||||
|
||||
// 2025.12.02 나혁제 파일체크 로직 추가
|
||||
if (!fncAttachFileCheck())
|
||||
{
|
||||
@ -279,7 +286,7 @@
|
||||
|
||||
if($("#approvalsId").val() == '')
|
||||
{
|
||||
alert("승인요청시에는 결재라인이 필요합니다.");
|
||||
alert("결재라인을 입력해 주세요.");
|
||||
return;
|
||||
}
|
||||
|
||||
@ -797,7 +804,7 @@
|
||||
</td>
|
||||
<th> 작성자 </th>
|
||||
<td>
|
||||
<input type="text" name="vcRegUser" id="vcRegUser" value="${vcRegUser}" readonly />
|
||||
<input type="text" name="vcRegUser" id="vcRegUser" value="${vcRegUser}" style="width: 90%;" readonly />
|
||||
<input type="hidden" name="inRegUser" id="inRegUser" value="${inRegUser}" />
|
||||
|
||||
</td>
|
||||
@ -807,13 +814,13 @@
|
||||
<td>${resultIncident.vcIncidentNum} </td>
|
||||
<th> 작업분류 </th>
|
||||
<td>
|
||||
<input type="text" name="vcTask" id="vcTask" value="${resultTaskMap.label}" readonly />
|
||||
<input type="text" name="vcTask" id="vcTask" value="${resultTaskMap.label}" style="width: 90%;" readonly />
|
||||
<input type="hidden" name="inTask" id="inTask" value="${resultTaskMap.value}" >
|
||||
|
||||
</td>
|
||||
<th> 작업자 </th>
|
||||
<td>
|
||||
<input type="text" name="vcTaskUser" id="vcTaskUser" value="${vcRegUser}"/>
|
||||
<input type="text" name="vcTaskUser" id="vcTaskUser" value="${vcRegUser}" style="width: 90%;" readonly />
|
||||
|
||||
<a href="<c:url value='/cmm/selectUserListPopup.do' />" target="_blank" title="새 창으로 이동" onclick="fn_User_Search('조치예정', 'inTaskUser', '', 'vcTaskUser', '', '');return false;">
|
||||
<img src="<c:url value='/egov/images/egovframework/com/cmm/btn/btn_search.gif' />" alt="작업자 검색" title="작업자 검색">
|
||||
|
||||
@ -52,21 +52,6 @@
|
||||
function fncSearchReportIssueList()
|
||||
{
|
||||
linkPage(1);
|
||||
|
||||
/*
|
||||
var arStatus = []; // 승인상태
|
||||
|
||||
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");
|
||||
|
||||
$("#status" ).val(arStatus.join(","));
|
||||
|
||||
document.listForm.pageIndex.value = "1";
|
||||
document.listForm.action = "<c:url value='/srm/searchReportIssue.do'/>";
|
||||
document.listForm.submit();
|
||||
*/
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
@ -158,19 +143,19 @@
|
||||
<tr>
|
||||
<td colspan=2>
|
||||
<label>문서번호:</label>
|
||||
<input class="s_input" id="reportId" name="reportId" type="text" size="35" maxlength="155" style="width: 170px;"
|
||||
<input class="s_input" id="reportId" name="reportId" type="text" size="35" maxlength="155" style="width: 155px;"
|
||||
value='<c:out value="${searchVO.reportId}"/>' title="<spring:message code="title.search" /> <spring:message code="input.input" />" >
|
||||
|
||||
<label>요청번호:</label>
|
||||
<input class="s_input" id="incidentNum" name="incidentNum" type="text" size="35" maxlength="155" style="width: 170px;"
|
||||
<label>인스던트 접수번호:</label>
|
||||
<input class="s_input" id="incidentNum" name="incidentNum" type="text" size="35" maxlength="155" style="width: 155px;"
|
||||
value='<c:out value="${searchVO.incidentNum}"/>' title="<spring:message code="title.search" /> <spring:message code="input.input" />" >
|
||||
|
||||
<label>작성자:</label>
|
||||
<input class="s_input" id="regUser" name="regUser" type="text" size="35" maxlength="155" style="width: 170px;"
|
||||
<input class="s_input" id="regUser" name="regUser" type="text" size="35" maxlength="155" style="width: 155px;"
|
||||
value='<c:out value="${searchVO.regUser}"/>' title="<spring:message code="title.search" /> <spring:message code="input.input" />" >
|
||||
|
||||
<label>제목:</label>
|
||||
<input class="s_input" id="reportTitle" name="reportTitle" type="text" size="35" maxlength="155" style="width: 170px;"
|
||||
<input class="s_input" id="reportTitle" name="reportTitle" type="text" size="35" maxlength="155" style="width: 155px;"
|
||||
value='<c:out value="${searchVO.reportTitle}"/>' title="<spring:message code="title.search" /> <spring:message code="input.input" />" >
|
||||
</td>
|
||||
</tr>
|
||||
@ -223,7 +208,7 @@
|
||||
<thead>
|
||||
<tr>
|
||||
<th>문서번호</th>
|
||||
<th>요청번호</th>
|
||||
<th>인스던트 접수번호</th>
|
||||
<th>서비스</th>
|
||||
<th>승인상태</th>
|
||||
<th>제목</th>
|
||||
|
||||
@ -786,7 +786,7 @@
|
||||
</td>
|
||||
<th> 작성자 </th>
|
||||
<td>
|
||||
<input type="text" name="vcRegUser" id="vcRegUser" value="${vcRegUser}" readonly />
|
||||
<input type="text" name="vcRegUser" id="vcRegUser" value="${vcRegUser}" readonly style="width: 90%;" />
|
||||
<input type="hidden" name="inRegUser" id="inRegUser" value="${inRegUser}" />
|
||||
|
||||
</td>
|
||||
@ -802,7 +802,7 @@
|
||||
</td>
|
||||
<th> 작업자 </th>
|
||||
<td>
|
||||
<input type="text" name="vcTaskUser" id="vcTaskUser" value="${resultReport.vcTaskUser}"/>
|
||||
<input type="text" name="vcTaskUser" id="vcTaskUser" value="${resultReport.vcTaskUser}" style="width: 90%;" readonly />
|
||||
|
||||
<a href="<c:url value='/cmm/selectUserListPopup.do' />" target="_blank" title="새 창으로 이동" onclick="fn_User_Search('조치예정', 'inTaskUser', '', 'vcTaskUser', '', '');return false;">
|
||||
<img src="<c:url value='/egov/images/egovframework/com/cmm/btn/btn_search.gif' />" alt="작업자 검색" title="작업자 검색">
|
||||
|
||||
965
src/main/webapp/WEB-INF/jsp/itms/srm/ReportOtherCopyInsert.jsp
Normal file
965
src/main/webapp/WEB-INF/jsp/itms/srm/ReportOtherCopyInsert.jsp
Normal file
@ -0,0 +1,965 @@
|
||||
<!DOCTYPE html>
|
||||
|
||||
<%
|
||||
/**
|
||||
* @Class Name : ReportOtherCopyInsert.jsp
|
||||
* @Description : 기타보고서 새로 만들기
|
||||
* @Modification Information
|
||||
* @
|
||||
* @ 수정일 수정자 수정내용
|
||||
* @ ------- -------- ---------------------------
|
||||
* @ 2026.01.22 나혁제 최초 생성
|
||||
*
|
||||
* @author urp 인프라본부 나혁제
|
||||
* @since 2026.01.22
|
||||
* @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">
|
||||
|
||||
<!-- 2025.11.19 나혁제 선택된 Row 처리 -->
|
||||
<style>
|
||||
.selected {background-color:#e8eff7;}
|
||||
</style>
|
||||
|
||||
<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?ver=1" ></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="reportOtherManage" 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()
|
||||
{
|
||||
// 결재라인 높이 조정
|
||||
// $("#table_appr tbody td").css("height", "10px");
|
||||
|
||||
// 시작일시, 종료일시, 서비스다운시작일시, 서비스다운종료일시 시간까지 세팅
|
||||
$("#dtDownstartDatetime, #dtDownfinishDatetime, #dtStartDatetime, #dtFinishDatetime").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);
|
||||
|
||||
// 2025.11.18 나혁제 결재라인 클릭 자료 표시
|
||||
$(document).on("click", "#table_appr tbody td", function(){
|
||||
$("#table_appr tbody tr").removeClass('selected');
|
||||
$(this).parent().addClass('selected');
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
//----------------------------------------
|
||||
// 화면 초기화(Form 완전 로딩후 )
|
||||
// ----------------------------------------
|
||||
$(window).on("load", function()
|
||||
{
|
||||
var strForm = document.getElementById("serviceBody2").value;
|
||||
// drawEditor(strForm);
|
||||
drawEditor("serviceBody", strForm, false);
|
||||
});
|
||||
|
||||
//----------------------------------------
|
||||
// 목록 화면으로 이동처리
|
||||
// ----------------------------------------
|
||||
function fncReportOtherList()
|
||||
{
|
||||
var varFrom = document.getElementById("reportOtherManage");
|
||||
varFrom.action = "<c:url value='/srm/searchReportOther.do'/>";
|
||||
varFrom.submit();
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
// 자산 조회 팝업
|
||||
// ----------------------------------------
|
||||
function fn_Asset_Search()
|
||||
{
|
||||
var strUrl = "/rem/SelectResourcePopup.do";
|
||||
|
||||
var arrParam = new Array(6);
|
||||
arrParam[0] = window;
|
||||
|
||||
window.showModalDialog("<c:url value='"+strUrl+"' />"
|
||||
, arrParam
|
||||
,"dialogWidth:950px;dialogHeight:850px;resizable:yes;center:yes");
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
// 팝업창에서 결재자 선택 확인시
|
||||
// ----------------------------------------
|
||||
function fn_Asset_Multi_Selected(strReturnData)
|
||||
{
|
||||
var aReturnData = strReturnData.split(","); // split에 '-'를 넣었습니다.
|
||||
|
||||
console.log(aReturnData);
|
||||
|
||||
var inAssetSeq = $("input[name='inAssetSeq']").map(function () {
|
||||
return $(this).val();
|
||||
}).get();
|
||||
|
||||
console.log(inAssetSeq);
|
||||
|
||||
for(var i=0; i<aReturnData.length-1; i++)
|
||||
{
|
||||
var aOptData = aReturnData[i].split("|");
|
||||
|
||||
// 기존에 존재하는경우 skip
|
||||
var iExistYn = inAssetSeq.indexOf(aOptData[0]);
|
||||
|
||||
if(iExistYn>-1) continue;
|
||||
|
||||
fn_table_asset_tr_add(aOptData[0], aOptData[1], aOptData[2]);
|
||||
}
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
// 자산정보 Row 추가 처리
|
||||
// ----------------------------------------
|
||||
function fn_table_asset_tr_add(inAssetSeq, vcAssetName, vcCate3)
|
||||
{
|
||||
var strTrTag = " <tr> "
|
||||
+ " <td > "
|
||||
+ " <label><input type='checkbox' style='display: inline-block;' name='chkAsset' /> </label> "
|
||||
+ " </td> "
|
||||
+ " <td >"+vcCate3+"</td> "
|
||||
+ " <td >"+vcAssetName+"</td> "
|
||||
+ " <td > "
|
||||
+ " <input type='text' name='txCommentAsset' id='txCommentAsset' value='' style='width:80%;'/> "
|
||||
+ " </td> "
|
||||
+ " <input type='hidden' name='inAssetSeq' id='inAssetSeq' value='"+inAssetSeq+"' > "
|
||||
+ " </tr> "
|
||||
|
||||
$("#table_asset tbody").append(strTrTag)
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
// 자산정보 선택한 자산 삭제
|
||||
// ----------------------------------------
|
||||
function fn_Asset_Delete()
|
||||
{
|
||||
|
||||
$("input:checkbox[name='chkAsset']:checked").each(function(k,kVal)
|
||||
{
|
||||
// 로우 삭제
|
||||
let chkRow = kVal.parentElement.parentElement.parentElement;
|
||||
$(chkRow).remove();
|
||||
});
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
// 서비스 정보 변경시
|
||||
// ----------------------------------------
|
||||
function selInServiceCode()
|
||||
{
|
||||
var inServiceCode = $('#inServiceCode option:selected').val() ;
|
||||
|
||||
var inData = {};
|
||||
inData = {"inServiceCode":inServiceCode};
|
||||
|
||||
proc.fn_get_service_info(inData);
|
||||
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
// 보고양식 변경시
|
||||
// ----------------------------------------
|
||||
function selReportForm()
|
||||
{
|
||||
var inSeq = $('#reportForm option:selected').val() ;
|
||||
|
||||
var inData = {};
|
||||
inData = {"seq":inSeq};
|
||||
|
||||
proc.fn_get_report_form_info(inData);
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
// 기타보고서 등록처리
|
||||
// ----------------------------------------
|
||||
function fncReportOtherInsert()
|
||||
{
|
||||
var bYes = confirm("기타보고서 등록 처리를 하시겠습니까?");
|
||||
if(bYes==false) return;
|
||||
|
||||
fncReportSaveSetting();
|
||||
|
||||
//input item Client-Side validate
|
||||
if (!validateReportOtherManage(document.reportOtherManage))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if($("#approvalsId").val() == '')
|
||||
{
|
||||
alert("결재라인을 입력해 주세요.");
|
||||
return;
|
||||
}
|
||||
|
||||
// 2025.12.02 나혁제 파일체크 로직 추가
|
||||
if (!fncAttachFileOther())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
proc.fn_ReportOther_save();
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
// 기타보고서 등록/승인요청
|
||||
// ----------------------------------------
|
||||
function fncReportOtherInsertApp()
|
||||
{
|
||||
var bYes = confirm("기타보고서 등록/승인요청 처리를 하시겠습니까?");
|
||||
if(bYes==false) return;
|
||||
|
||||
fncReportSaveSetting();
|
||||
|
||||
|
||||
//input item Client-Side validate
|
||||
if (!validateReportOtherManage(document.reportOtherManage))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// 2025.12.02 나혁제 파일체크 로직 추가
|
||||
if (!fncAttachFileOther())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if($("#approvalsId").val() == '')
|
||||
{
|
||||
alert("결재라인을 입력해 주세요.");
|
||||
return;
|
||||
}
|
||||
|
||||
// 승인요청 메세지 팝업 open
|
||||
PopupOpen("/srm/PopReqApproval", 340, 450, '');
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
// 보고서 변경/승인처리 처리(최종 저장 처리 )
|
||||
// ----------------------------------------
|
||||
function fncAppLast(strMsg)
|
||||
{
|
||||
$('#reqTxComment' ).val(strMsg) ;
|
||||
$('#reqApprovalYn' ).val("Y" ) ;
|
||||
|
||||
proc.fn_ReportOther_save();
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
// 2025.12.02 나혁제 파일체크 로직 추가
|
||||
// 첨부파일 체크
|
||||
// ----------------------------------------
|
||||
function fncAttachFileOther()
|
||||
{
|
||||
// 결과가 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 fncReportSaveSetting()
|
||||
{
|
||||
var form = document.reportOtherManage;
|
||||
|
||||
// 결재라인
|
||||
var strExistUser = $("input[name='approvalUserId']").map(function () { return $(this).val();}).get();
|
||||
var strExistUserText = $("input[name='approvalUserNm']").map(function () { return $(this).val();}).get();
|
||||
|
||||
strExistUser.join(',');
|
||||
strExistUserText.join(',');
|
||||
|
||||
form.approvalsId .value = strExistUser;
|
||||
form.approvalsName.value = strExistUserText;
|
||||
|
||||
// 보고서 자산 구조
|
||||
var strAssetSeq = $("input[name='inAssetSeq']").map(function () { return $(this).val();}).get();
|
||||
var strCommentAsset = $("input[name='txCommentAsset']").map(function () { return $(this).val();}).get();
|
||||
|
||||
strAssetSeq.join(',');
|
||||
strCommentAsset.join(',');
|
||||
|
||||
form.assetSeqs .value = strAssetSeq;
|
||||
form.assetCommnets.value = strCommentAsset;
|
||||
|
||||
form.txReportBody.value = tinyMCE.get("serviceBody").getContent(); // 평문
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
// 사용자 검색 팝업
|
||||
// ----------------------------------------
|
||||
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 fn_User_Multi_Selected(strReturnData)
|
||||
{
|
||||
var aReturnData = strReturnData.split(","); // split에 '-'를 넣었습니다.
|
||||
|
||||
console.log(aReturnData);
|
||||
|
||||
var strExistUser = $("input[name='approvalUserId']").map(function () {
|
||||
return $(this).val();
|
||||
}).get();
|
||||
|
||||
console.log(strExistUser);
|
||||
|
||||
for(var i=0; i<aReturnData.length-1; i++)
|
||||
{
|
||||
var aOptData = aReturnData[i].split("|");
|
||||
|
||||
// 기존에 존재하는경우 skip
|
||||
var iExistYn = strExistUser.indexOf(aOptData[0]);
|
||||
|
||||
if(iExistYn>-1) continue;
|
||||
|
||||
fn_table_appr_tr_add(aOptData[0], aOptData[1]);
|
||||
}
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
// 결재라인 Row 추가 처리
|
||||
// ----------------------------------------
|
||||
function fn_table_appr_tr_add(strId, strName)
|
||||
{
|
||||
// 2025.11.18 나혁제 결재순서 표시
|
||||
var trApprCnt = $('#table_appr >tbody tr').length+1;
|
||||
|
||||
var strTrTag = " <tr> "
|
||||
+" <td > "
|
||||
+" <label><input type='checkbox' style='display: inline-block;' id='chkAppUser' name='chkAppUser' /> </label> "
|
||||
+" </td> "
|
||||
+" <td >"+trApprCnt+"</td> "
|
||||
+" <td >"+strName+"</td> "
|
||||
+" <td ></td> "
|
||||
+" <td ></td> "
|
||||
+" <input type='hidden' name='approvalUserId' id='approvalUserId' value='"+strId+"' > "
|
||||
+" <input type='hidden' name='approvalUserNm' id='approvalUserNm' value='"+strName+"' > "
|
||||
+" </tr> "
|
||||
;
|
||||
|
||||
$("#table_appr tbody").append(strTrTag)
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
// 결재라인 선택한 사용자 삭제
|
||||
// ----------------------------------------
|
||||
function fn_User_Delete()
|
||||
{
|
||||
$("input:checkbox[name='chkAppUser']:checked").each(function(k,kVal)
|
||||
{
|
||||
// 로우 삭제
|
||||
let chkRow = kVal.parentElement.parentElement.parentElement;
|
||||
$(chkRow).remove();
|
||||
});
|
||||
|
||||
// 2025.10.20 나혁제 결재순서 재조정
|
||||
reorderApprSeq();
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
// 2025.11.19 나혁제
|
||||
// 결재순서 위로 이동처리
|
||||
// ----------------------------------------
|
||||
function fnMoveUpTR()
|
||||
{
|
||||
var $selected = $("#table_appr tbody tr.selected");
|
||||
|
||||
if ($selected.length === 0)
|
||||
{
|
||||
alert("이동할 행을 선택하세요.");
|
||||
return;
|
||||
}
|
||||
|
||||
var $prev = $selected.prev();
|
||||
|
||||
if ($prev.length > 0)
|
||||
{
|
||||
$selected.insertBefore($prev);
|
||||
reorderApprSeq();
|
||||
}
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
// 2025.11.19 나혁제
|
||||
// 결재순서 아래로 이동처리
|
||||
// ----------------------------------------
|
||||
function fnMoveDownTR()
|
||||
{
|
||||
var $selected = $("#table_appr tbody tr.selected");
|
||||
|
||||
if ($selected.length === 0)
|
||||
{
|
||||
alert("이동할 행을 선택하세요.");
|
||||
return;
|
||||
}
|
||||
|
||||
let $next = $selected.next();
|
||||
|
||||
if ($next.length > 0)
|
||||
{
|
||||
$selected.insertAfter($next);
|
||||
reorderApprSeq();
|
||||
}
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
// 2025.11.19 나혁제
|
||||
// 결재순서 재설정
|
||||
// ----------------------------------------
|
||||
function reorderApprSeq()
|
||||
{
|
||||
$("#table_appr tbody tr").each(function(index){
|
||||
// index는 0부터 시작하므로 1을 더해줌
|
||||
$(this).find("td:eq(1)").text(index + 1);
|
||||
});
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
// 팝업 오픈
|
||||
// ----------------------------------------
|
||||
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_ReportOther_save : function ()
|
||||
{
|
||||
var form = $('#reportOtherManage')[0];
|
||||
var formData = new FormData(form);
|
||||
|
||||
$.ajax({
|
||||
url: '/srm/addReportOther.do'
|
||||
, type: 'post'
|
||||
, enctype:'multipart/form-data'
|
||||
, data: formData
|
||||
, dataType: 'json'
|
||||
, processData:false
|
||||
, contentType:false
|
||||
, cache:false
|
||||
, success: function(data)
|
||||
{
|
||||
alert("등록 완료 되었습니다.");
|
||||
fncReportOtherList();
|
||||
|
||||
},
|
||||
error: function(errorThrown)
|
||||
{
|
||||
alert("보고서 등록중 오류가 발생하였습니다. \n 시스템관리자에게 문의해 주시기 바랍니다.");
|
||||
console.log(JSON.stringify(errorThrown));
|
||||
}
|
||||
});
|
||||
}
|
||||
,
|
||||
// 서비스 결재라인 정보 추출
|
||||
fn_get_service_info : function (inData)
|
||||
{
|
||||
$.ajax({
|
||||
url: '/srm/getSvcApprovalListOther.do'
|
||||
, type: 'post'
|
||||
, data: JSON.stringify(inData)
|
||||
, dataType: 'json'
|
||||
, contentType: 'application/json'
|
||||
, async: false
|
||||
, success: function(data)
|
||||
{
|
||||
console.log(JSON.stringify(data));
|
||||
|
||||
$('#table_appr tbody tr').remove();
|
||||
|
||||
// 결재라인 세팅
|
||||
for(var i=0; i<data.resultApprovals.length; i++)
|
||||
{
|
||||
fn_table_appr_tr_add(data.resultApprovals[i].inUserSeq, data.resultApprovals[i].vcUserName);
|
||||
}
|
||||
},
|
||||
error: function(errorThrown)
|
||||
{
|
||||
alert("서비스 정보 조회중 오류가 발생하였습니다. \n 시스템 관리자에게 문의해 주시기 바랍니다.");
|
||||
console.log(JSON.stringify(errorThrown));
|
||||
}
|
||||
});
|
||||
}
|
||||
,
|
||||
// 보고양식 추출
|
||||
fn_get_report_form_info : function (inData)
|
||||
{
|
||||
$.ajax({
|
||||
url: '/srm/getReportFormOther.do'
|
||||
, type: 'post'
|
||||
, data: JSON.stringify(inData)
|
||||
, dataType: 'json'
|
||||
, contentType: 'application/json'
|
||||
, async: false
|
||||
, success: function(data)
|
||||
{
|
||||
console.log(JSON.stringify(data));
|
||||
|
||||
// 본문세팅
|
||||
// drawEditor(data.strTxDefaultFormDec);
|
||||
drawEditor("serviceBody", data.strTxDefaultFormDec, false);
|
||||
|
||||
// 2025.05.21 나혁제 작업자정보 세팅
|
||||
$('#vcTaskUser').val(data.strVcTaskUser);
|
||||
$('#inTaskUser').val(data.strInTaskUser);
|
||||
},
|
||||
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="reportOtherManage" name="reportOtherManage" method="post" enctype="multipart/form-data">
|
||||
|
||||
<!-- body_wrap :start -->
|
||||
<div class="body_wrap">
|
||||
|
||||
<!-- main title -->
|
||||
<div class="main_titWrap">
|
||||
|
||||
<h3>${resultReport.vcTask} 새로만들기</h3>
|
||||
|
||||
<!-- location :s -->
|
||||
<div class="location">
|
||||
<div class="location-cont">
|
||||
<div>
|
||||
<ul class="route_navi">
|
||||
<li><a href="#" title="홈"><span class="home">홈</span></a></li>
|
||||
<li><a href="#" title="유지보수 관리" >유지보수 관리</a></li>
|
||||
<li>기타보고서 등록</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!--//location :e -->
|
||||
</div>
|
||||
<!--//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: 12%;">
|
||||
<col style="width: 20%">
|
||||
<col style="width: 8%">
|
||||
<col style="width: 22%;">
|
||||
<col style="width: 10%">
|
||||
<col style="width: 30%;">
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<th> 보고서ID </th>
|
||||
<td> </td>
|
||||
<th> 서비스 </th>
|
||||
<td>
|
||||
<select name="inServiceCode" id="inServiceCode" onchange="selInServiceCode()" style="width: 90%;" >
|
||||
<c:forEach items="${resultService}" var="result" varStatus="status">
|
||||
<option value="${result.value}" <c:if test="${result.value == resultReport.inServiceCode}"> selected </c:if> > ${result.label} </option><!-- 분류코드명 -->
|
||||
</c:forEach>
|
||||
</select>
|
||||
</td>
|
||||
<th> 작성자 </th>
|
||||
<td>
|
||||
<input type="text" name="vcRegUser" id="vcRegUser" value="${vcRegUser}" style="width: 90%;" readonly />
|
||||
<input type="hidden" name="inRegUser" id="inRegUser" value="${inRegUser}" />
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th> 인스던트 접수번호 </th>
|
||||
<td> </td>
|
||||
<th> 작업분류 </th>
|
||||
<td>
|
||||
<input type="text" name="vcTask" id="vcTask" value="${resultReport.vcTask}" readonly style="width: 90%;" />
|
||||
<input type="hidden" name="inTask" id="inTask" value="${resultReport.inTask}" >
|
||||
|
||||
</td>
|
||||
<th> 작업자 </th>
|
||||
<td>
|
||||
<input type="text" name="vcTaskUser" id="vcTaskUser" value="${resultReport.vcTaskUser}" style="width: 90%;" readonly />
|
||||
|
||||
<a href="<c:url value='/cmm/selectUserListPopup.do' />" target="_blank" title="새 창으로 이동" onclick="fn_User_Search('조치예정', 'inTaskUser', '', 'vcTaskUser', '', '');return false;">
|
||||
<img src="<c:url value='/egov/images/egovframework/com/cmm/btn/btn_search.gif' />" alt="작업자 검색" title="작업자 검색">
|
||||
</a>
|
||||
|
||||
<input type="hidden" name="inTaskUser" id="inTaskUser" value="${resultReport.inTaskUser}" >
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<%-- 2025.09.01 나혁제 불필요한 항목 사젝 --%>
|
||||
<th style="display:none" > 서비스다운 </th>
|
||||
<td style="display:none" >
|
||||
<input type="text" class="btn_calendar" name="dtDownstartDatetime" id="dtDownstartDatetime" value="${resultReport.dtDownstartDatetime}" readonly style="width:47%;"/>
|
||||
~<input type="text" class="btn_calendar" name="dtDownfinishDatetime" id="dtDownfinishDatetime" value="${resultReport.dtDownstartDatetime}" readonly style="width:47%;"/>
|
||||
</td>
|
||||
|
||||
<th> 보고서양식 </th>
|
||||
<td >
|
||||
<select name="reportForm" id="reportForm" onchange="selReportForm()" style="width: 90%;" >
|
||||
<c:forEach items="${resultForm}" var="result" varStatus="status">
|
||||
<option value="${result.inReportForm}" > ${result.vcFormName} </option><!-- 분류코드명 -->
|
||||
</c:forEach>
|
||||
</select>
|
||||
</td>
|
||||
|
||||
<th> 시작일시 </th>
|
||||
<td>
|
||||
<input type="text" class="btn_calendar" name="dtStartDatetime" id="dtStartDatetime" value="${dtStartDatetime}" readonly style="width:90%;"/>
|
||||
|
||||
</td>
|
||||
<th> 종료일시 </th>
|
||||
<td>
|
||||
<input type="text" class="btn_calendar" name="dtFinishDatetime" id="dtFinishDatetime" value="${dtFinishDatetime}" readonly style="width:90%;"/>
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<th rowspan=2 > 제목 </th>
|
||||
<td rowspan=2 colspan=3>
|
||||
<input type="text" name="vcReportTitle" id="vcReportTitle" value="${resultReport.vcReportTitle}" style="width:90%;"/>
|
||||
</td>
|
||||
|
||||
<th><spring:message code="cop.atchFile" /></th>
|
||||
<td>
|
||||
<!-- 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>
|
||||
<c:import url="/cmm/selectFileInfs.do" charEncoding="utf-8">
|
||||
<c:param name="param_atchFileId" value="${resultReport.atchFileId}" />
|
||||
<c:param name="strItmsYn" value="Y" />
|
||||
</c:import>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<!-- 2025.11.20 나혁제 결재라인 레이아웃 변경 및 결재순서 추가 -->
|
||||
<tr>
|
||||
<th >서비스 결재 라인 </th>
|
||||
<td colspan=5 style="vertical-align: top;">
|
||||
|
||||
<div class="btn_group" >
|
||||
<button type="button" class="btn-function" onclick="fn_User_Search('조치예정', '', '', '', '', 'Y');return false;" style="margin-top: -30px;"> 조회 </button>
|
||||
<button type="button" class="btn-function" onclick="fn_User_Delete(); return false;" style="margin-top: -30px;"> 삭제 </button>
|
||||
</div>
|
||||
|
||||
<div style="display: flex;align-items: flex-start;">
|
||||
|
||||
<div class="tbl_list">
|
||||
<!-- 목록영역 -->
|
||||
<table class="table" summary="" id="table_appr" >
|
||||
<caption>결재라인 <spring:message code="title.list" /></caption>
|
||||
<colgroup>
|
||||
<col style="width: 8%;">
|
||||
<col style="width: 8%;">
|
||||
<col style="width: 15%;">
|
||||
<col style="width: 10%;">
|
||||
<col style="width: *;">
|
||||
</colgroup>
|
||||
|
||||
<thead>
|
||||
<tr>
|
||||
<th></th>
|
||||
<th>결재순서</th>
|
||||
<th>결재자</th>
|
||||
<th>상태</th>
|
||||
<th>Comment</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
<tbody>
|
||||
<c:forEach var="approvals" items="${resultApprovals}" varStatus="status">
|
||||
<tr>
|
||||
<td >
|
||||
<label><input type="checkbox" style="display: inline-block;" name="chkAppUser" /> </label>
|
||||
</td>
|
||||
<td ><c:out value="${approvals.inOrder+1}"/></td>
|
||||
<td ><c:out value="${approvals.vcUserName}"/></td>
|
||||
<td ></td>
|
||||
<td ></td>
|
||||
|
||||
<input type='hidden' name="approvalUserId" id="approvalUserId" value="${approvals.inUserSeq}" >
|
||||
<input type='hidden' name="approvalUserNm" id="approvalUserNm" value="${approvals.vcUserName}" >
|
||||
</tr>
|
||||
</c:forEach>
|
||||
</tbody>
|
||||
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<div style="width:3%;text-align:center;padding-left: 5px;align-self: center;">
|
||||
<a href="#" onclick="fnMoveUpTR(this); return false;" style="font-size: x-large;" >▲</a>
|
||||
<a href="#" onclick="fnMoveDownTR(this); return false;" style="font-size: x-large;" >▼</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
|
||||
<tr>
|
||||
<th> 자산</th>
|
||||
<td colspan=5>
|
||||
|
||||
<div class="btn_group" >
|
||||
<button type="button" class="btn-function" onclick="fn_Asset_Search();return false;" style="margin-top: -30px;"> 조회 </button>
|
||||
<button type="button" class="btn-function" onclick="fn_Asset_Delete(); return false;" style="margin-top: -30px;"> 삭제 </button>
|
||||
</div>
|
||||
|
||||
<div class="tbl_list">
|
||||
<!-- 목록영역 -->
|
||||
<table class="table" summary="" id="table_asset" >
|
||||
<caption>연결자산정보 <spring:message code="title.list" /></caption>
|
||||
<colgroup>
|
||||
<col style="width: 10%;">
|
||||
<col style="width: 25%;">
|
||||
<col style="width: 20%;">
|
||||
<col style="width: *;">
|
||||
</colgroup>
|
||||
|
||||
<thead>
|
||||
<tr>
|
||||
<th></th>
|
||||
<th>소분류</th>
|
||||
<th>자산명</th>
|
||||
<th>비고</th>
|
||||
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
<tbody>
|
||||
<c:forEach var="assets" items="${resultAssets}" varStatus="status">
|
||||
<tr>
|
||||
<td>
|
||||
<label><input type='checkbox' style='display: inline-block;' name='chkAsset' /> </label>
|
||||
</td>
|
||||
<td ><c:out value="${assets.vcCate3}"/></td>
|
||||
<td ><c:out value="${assets.vcAssetName}"/></td>
|
||||
<td >
|
||||
<input type="text" name="txCommentAsset" id="txCommentAsset" value="" style="width:90%;"/>
|
||||
</td>
|
||||
<input type="hidden" name="inAssetSeq" id="inAssetSeq" value="${assets.inAssetSeq}" >
|
||||
|
||||
</tr>
|
||||
</c:forEach>
|
||||
</tbody>
|
||||
|
||||
</table>
|
||||
</div>
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
|
||||
|
||||
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<textarea id="serviceBody" name="serviceBody" ></textarea>
|
||||
<textarea id="serviceBody2" name="serviceBody2" style="display:none;">${resultReport.txReportBody}</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="fncReportOtherList(); return false;" title="<spring:message code="button.list"/>">
|
||||
<spring:message code="button.list"/>
|
||||
</button>
|
||||
</div>
|
||||
<!--//왼쪽영역-->
|
||||
<!-- 오른쪽영역-->
|
||||
<div>
|
||||
<button type="button" class="btn-etc" onclick="fncReportOtherInsertApp(); return false;" title="등록/승인요청" >
|
||||
등록/승인요청
|
||||
</button>
|
||||
<button type="button" class="btn-etc" onclick="fncReportOtherInsert(); return false;" title="<spring:message code="button.create" />">
|
||||
<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="txReportBody" name="txReportBody" value="" >
|
||||
|
||||
<input type="hidden" id="assetSeqs" name="assetSeqs" value="" >
|
||||
<input type="hidden" id="assetCommnets" name="assetCommnets" value="" >
|
||||
|
||||
<input type="hidden" id="approvalsId" name="approvalsId" value="" >
|
||||
<input type="hidden" id="approvalsName" name="approvalsName" value="" >
|
||||
|
||||
<input type="hidden" id="inIncidentSeq" name="inIncidentSeq" value="${inIncidentSeq}" >
|
||||
<input type="hidden" id="inReportSeq" name="inReportSeq" value="0">
|
||||
<input type="hidden" id="inReportStatus" name="inReportStatus" value="0">
|
||||
<input type="hidden" id="inDowntime" name="inDowntime" value="0">
|
||||
|
||||
<input type="hidden" id="reqTxComment" name="reqTxComment" value=""/> <!-- 승인요청메세지 -->
|
||||
<input type="hidden" id="reqApprovalYn" name="reqApprovalYn" value=""/> <!-- 승인요청여부 -->
|
||||
|
||||
<input type="hidden" id="oldAtchFileId" name="oldAtchFileId" value="${resultReport.atchFileId}">
|
||||
|
||||
|
||||
</form:form>
|
||||
|
||||
@ -84,6 +84,43 @@
|
||||
varFrom.submit();
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
// 2026.01.22 나혁제
|
||||
// 새로만들기 기능확장
|
||||
// ----------------------------------------
|
||||
function fncReportIssueCopyInsert()
|
||||
{
|
||||
|
||||
if($('#inReportStatus').val()!='2' && $('#inReportStatus').val()!='3' )
|
||||
{
|
||||
alert("[승인완료/반려]된 보고서을 이용하야 새로만들기가 가능합니다.");
|
||||
return;
|
||||
}
|
||||
|
||||
// 수정화면으로 이동처리
|
||||
var varFrom = document.getElementById("reportOtherManage");
|
||||
varFrom.action = "<c:url value='/srm/insertCopyViewReportOther.do'/>";
|
||||
varFrom.submit();
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
// 2026.01.22 나혁제
|
||||
// 새로만들기 기능확장
|
||||
// ----------------------------------------
|
||||
function fncReportOtherCopyInsert()
|
||||
{
|
||||
if($('#inReportStatus').val()!='2' && $('#inReportStatus').val()!='3' )
|
||||
{
|
||||
alert("[승인완료/반려]된 보고서을 이용하야 새로만들기가 가능합니다.");
|
||||
return;
|
||||
}
|
||||
|
||||
// 수정화면으로 이동처리
|
||||
var varFrom = document.getElementById("reportOtherManage");
|
||||
varFrom.action = "<c:url value='/srm/insertCopyViewReportOther.do'/>";
|
||||
varFrom.submit();
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
// 보고서 수정 화면 이동처리
|
||||
// ----------------------------------------
|
||||
@ -104,7 +141,7 @@
|
||||
{
|
||||
// 2025.11.20 나혁제 승인완료된 자료 수정불가
|
||||
// if(confirm("승인완료된 보고서입니다. \n수정하면 모든 승인 정보는 초기화 됩니다.\n수정하시겠습니까?") == false) return;
|
||||
alert("승인완료된 보고ㅓ입니다.\n 재작성하시길 바랍니다.");
|
||||
alert("승인완료된 보고서입니다.\n 재작성하시길 바랍니다.");
|
||||
return;
|
||||
|
||||
}
|
||||
@ -663,6 +700,10 @@
|
||||
</c:if>
|
||||
|
||||
<c:if test="${(privType eq 'mine' && report.inReportStatus ne 3) || privType eq 'super'}">
|
||||
<!-- 2026.01.22 나혁제 새로만들기 기능 추가 -->
|
||||
<button type="button" class="btn-etc" title="새로만들기" onclick="fncReportOtherCopyInsert(); return false;">
|
||||
새로만들기
|
||||
</button>
|
||||
<button type="button" class="btn-etc" title="수정" onclick="fncReportOtherUpdate(); return false;">
|
||||
수정
|
||||
</button>
|
||||
|
||||
@ -261,6 +261,13 @@
|
||||
return false;
|
||||
}
|
||||
|
||||
// 2026.01.23 나혁제 결재라인 체크 추가
|
||||
if($("#approvalsId").val() == '')
|
||||
{
|
||||
alert("결재라인을 입력해 주세요.");
|
||||
return;
|
||||
}
|
||||
|
||||
// 2025.12.02 나혁제 파일체크 로직 추가
|
||||
if (!fncAttachFileCheck())
|
||||
{
|
||||
@ -815,7 +822,7 @@
|
||||
</td>
|
||||
<th> 작성자 </th>
|
||||
<td>
|
||||
<input type="text" name="vcRegUser" id="vcRegUser" value="${vcRegUser}" readonly />
|
||||
<input type="text" name="vcRegUser" id="vcRegUser" value="${vcRegUser}" readonly style="width: 90%;" />
|
||||
<input type="hidden" name="inRegUser" id="inRegUser" value="${inRegUser}" />
|
||||
|
||||
</td>
|
||||
@ -831,7 +838,7 @@
|
||||
</td>
|
||||
<th> 작업자 </th>
|
||||
<td>
|
||||
<input type="text" name="vcTaskUser" id="vcTaskUser" value="${vcRegUser}"/>
|
||||
<input type="text" name="vcTaskUser" id="vcTaskUser" value="${vcRegUser}" style="width: 90%;" readonly />
|
||||
|
||||
<a href="<c:url value='/cmm/selectUserListPopup.do' />" target="_blank" title="새 창으로 이동" onclick="fn_User_Search('조치예정', 'inTaskUser', '', 'vcTaskUser', '', '');return false;">
|
||||
<img src="<c:url value='/egov/images/egovframework/com/cmm/btn/btn_search.gif' />" alt="작업자 검색" title="작업자 검색">
|
||||
|
||||
@ -149,19 +149,19 @@
|
||||
<tr>
|
||||
<td colspan=2>
|
||||
<label>문서번호:</label>
|
||||
<input class="s_input" id="reportId" name="reportId" type="text" size="35" maxlength="155" style="width: 170px;"
|
||||
<input class="s_input" id="reportId" name="reportId" type="text" size="35" maxlength="155" style="width: 155px;"
|
||||
value='<c:out value="${searchVO.reportId}"/>' title="<spring:message code="title.search" /> <spring:message code="input.input" />" >
|
||||
|
||||
<label>요청번호:</label>
|
||||
<input class="s_input" id="incidentNum" name="incidentNum" type="text" size="35" maxlength="155" style="width: 170px;"
|
||||
<label>인스던트 접수번호:</label>
|
||||
<input class="s_input" id="incidentNum" name="incidentNum" type="text" size="35" maxlength="155" style="width: 155px;"
|
||||
value='<c:out value="${searchVO.incidentNum}"/>' title="<spring:message code="title.search" /> <spring:message code="input.input" />" >
|
||||
|
||||
<label>작성자:</label>
|
||||
<input class="s_input" id="regUser" name="regUser" type="text" size="35" maxlength="155" style="width: 170px;"
|
||||
<input class="s_input" id="regUser" name="regUser" type="text" size="35" maxlength="155" style="width: 155px;"
|
||||
value='<c:out value="${searchVO.regUser}"/>' title="<spring:message code="title.search" /> <spring:message code="input.input" />" >
|
||||
|
||||
<label>제목:</label>
|
||||
<input class="s_input" id="reportTitle" name="reportTitle" type="text" size="35" maxlength="155" style="width: 170px;"
|
||||
<input class="s_input" id="reportTitle" name="reportTitle" type="text" size="35" maxlength="155" style="width: 155px;"
|
||||
value='<c:out value="${searchVO.reportTitle}"/>' title="<spring:message code="title.search" /> <spring:message code="input.input" />" >
|
||||
</td>
|
||||
</tr>
|
||||
@ -214,7 +214,7 @@
|
||||
<thead>
|
||||
<tr>
|
||||
<th>문서번호</th>
|
||||
<th>요청번호</th>
|
||||
<th>인스던트 접수번호</th>
|
||||
<th>서비스</th>
|
||||
<th>승인상태</th>
|
||||
<th>제목</th>
|
||||
|
||||
786
src/main/webapp/WEB-INF/jsp/itms/srm/SvcDeskCopyInsert.jsp
Normal file
786
src/main/webapp/WEB-INF/jsp/itms/srm/SvcDeskCopyInsert.jsp
Normal file
@ -0,0 +1,786 @@
|
||||
<!DOCTYPE html>
|
||||
|
||||
<%
|
||||
/**
|
||||
* @Class Name : SvcDeskCopyInsert.jsp
|
||||
* @Description : 서비스데스크 인스턴스 새로만들기 화면
|
||||
* @Modification Information
|
||||
* @
|
||||
* @ 수정일 수정자 수정내용
|
||||
* @ ------- -------- ---------------------------
|
||||
* @ 2026.01.21 나혁제 최초 생성
|
||||
*
|
||||
* @author urp 인프라본부 나혁제
|
||||
* @since 2026.01.21
|
||||
* @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">
|
||||
|
||||
<!-- 2025.11.18 나혁제 선택된 Row 처리 -->
|
||||
<style>
|
||||
.selected {background-color:#e8eff7;}
|
||||
</style>
|
||||
|
||||
<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="svcDeskManage" 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()
|
||||
{
|
||||
// 결재라인 높이 조정
|
||||
// $("#table_appr tbody td").css("height", "10px");
|
||||
|
||||
// 접수일시, 완료요청일시 시간까지 세팅
|
||||
$("#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);
|
||||
|
||||
// 2025.11.18 나혁제 결재라인 클릭 자료 표시
|
||||
$(document).on("click", "#table_appr tbody td", function(){
|
||||
$("#table_appr tbody tr").removeClass('selected');
|
||||
$(this).parent().addClass('selected');
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
//----------------------------------------
|
||||
// 화면 초기화(Form 완전 로딩후 )
|
||||
// ----------------------------------------
|
||||
$(window).on("load", function()
|
||||
{
|
||||
var strForm = document.getElementById("serviceBody2").value;
|
||||
drawEditor("serviceBody", strForm, false);
|
||||
});
|
||||
|
||||
//----------------------------------------
|
||||
// 목록 화면으로 이동처리
|
||||
// ----------------------------------------
|
||||
function fncSvcDeskList()
|
||||
{
|
||||
var varFrom = document.getElementById("svcDeskManage");
|
||||
varFrom.action = "<c:url value='/srm/searchIncident.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 fn_User_Multi_Selected(strReturnData)
|
||||
{
|
||||
var aReturnData = strReturnData.split(","); // split에 '-'를 넣었습니다.
|
||||
|
||||
var strExistUser = $("input[name='approvalUserId']").map(function () {
|
||||
return $(this).val();
|
||||
}).get();
|
||||
|
||||
|
||||
for(var i=0; i<aReturnData.length-1; i++)
|
||||
{
|
||||
var aOptData = aReturnData[i].split("|");
|
||||
|
||||
// 기존에 존재하는경우 skip
|
||||
var iExistYn = strExistUser.indexOf(aOptData[0]);
|
||||
|
||||
if(iExistYn>-1) continue;
|
||||
|
||||
fn_table_appr_tr_add(aOptData[0], aOptData[1]);
|
||||
}
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
// 결재라인 Row 추가 처리
|
||||
// ----------------------------------------
|
||||
function fn_table_appr_tr_add(strId, strName)
|
||||
{
|
||||
// 2025.11.18 나혁제 결재순서 표시
|
||||
var trApprCnt = $('#table_appr >tbody tr').length+1;
|
||||
|
||||
var strTrTag = " <tr> "
|
||||
+" <td > "
|
||||
+" <label><input type='checkbox' style='display: inline-block;' id='chkAppUser' name='chkAppUser' /> </label> "
|
||||
+" </td> "
|
||||
+" <td >"+trApprCnt+"</td> "
|
||||
+" <td >"+strName+"</td> "
|
||||
+" <td ></td> "
|
||||
+" <td ></td> "
|
||||
+" <input type='hidden' name='approvalUserId' id='approvalUserId' value='"+strId+"' > "
|
||||
+" <input type='hidden' name='approvalUserNm' id='approvalUserNm' value='"+strName+"' > "
|
||||
+" </tr> "
|
||||
;
|
||||
|
||||
$("#table_appr tbody").append(strTrTag)
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
// 결재라인 선택한 사용자 삭제
|
||||
// ----------------------------------------
|
||||
function fn_User_Delete()
|
||||
{
|
||||
$("input:checkbox[name='chkAppUser']:checked").each(function(k,kVal)
|
||||
{
|
||||
// 로우 삭제
|
||||
let chkRow = kVal.parentElement.parentElement.parentElement;
|
||||
$(chkRow).remove();
|
||||
});
|
||||
|
||||
// 2025.11.24 나혁제 삭제이후 결재순서 재정리
|
||||
reorderApprSeq();
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
// 서비스 정보 변경시
|
||||
// ----------------------------------------
|
||||
function selInServiceCode()
|
||||
{
|
||||
var inServiceCode = $('#inServiceCode option:selected').val() ;
|
||||
|
||||
var inData = {};
|
||||
inData = {"inServiceCode":inServiceCode};
|
||||
|
||||
proc.fn_get_service_info(inData);
|
||||
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
// 서비스 등록처리
|
||||
// ----------------------------------------
|
||||
function fncSvcDeskIncidentInsert()
|
||||
{
|
||||
var bYes = confirm("인스던트 접수 처리를 하시겠습니까?");
|
||||
if(bYes==false) return;
|
||||
|
||||
var form = document.svcDeskManage;
|
||||
|
||||
var strExistUser = $("input[name='approvalUserId']").map(function () { return $(this).val();}).get();
|
||||
var strExistUserText = $("input[name='approvalUserNm']").map(function () { return $(this).val();}).get();
|
||||
|
||||
strExistUser.join(',');
|
||||
strExistUserText.join(',');
|
||||
|
||||
form.approvalsId .value = strExistUser;
|
||||
form.approvalsName.value = strExistUserText;
|
||||
|
||||
form.txIncidentBody.value = tinyMCE.get("serviceBody").getContent(); // 평문
|
||||
|
||||
//input item Client-Side validate
|
||||
if (!validateSvcDeskManage(form))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// 2025.12.02 나혁제 파일체크 로직 추가
|
||||
if (!fncAttachFileCheck())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
proc.fn_incident_save();
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
// 서비스 등록/승인요청 처리 (button)
|
||||
// ----------------------------------------
|
||||
function fncSvcDeskIncidentInsertReqApp()
|
||||
{
|
||||
var bYes = confirm("인스던트 등록/승인요청 처리를 하시겠습니까?");
|
||||
if(bYes==false) return;
|
||||
|
||||
var form = document.svcDeskManage;
|
||||
|
||||
var strExistUser = $("input[name='approvalUserId']").map(function () { return $(this).val();}).get();
|
||||
var strExistUserText = $("input[name='approvalUserNm']").map(function () { return $(this).val();}).get();
|
||||
|
||||
strExistUser.join(',');
|
||||
strExistUserText.join(',');
|
||||
|
||||
form.approvalsId .value = strExistUser;
|
||||
form.approvalsName.value = strExistUserText;
|
||||
|
||||
form.txIncidentBody.value = tinyMCE.get("serviceBody").getContent(); // 평문
|
||||
|
||||
//input item Client-Side validate
|
||||
if (!validateSvcDeskManage(form))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// 2025.12.02 나혁제 파일체크 로직 추가
|
||||
if (!fncAttachFileCheck())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// 승인요청 메세지 팝업 open
|
||||
PopupOpen("/srm/PopReqApproval", 340, 450, '');
|
||||
}
|
||||
|
||||
|
||||
//----------------------------------------
|
||||
// 인스던트 변경/승인처리 처리(최종 저장 처리 )
|
||||
// ----------------------------------------
|
||||
function fncAppLast(strMsg)
|
||||
{
|
||||
$('#txComment' ).val(strMsg) ;
|
||||
$('#reqApprovalYn' ).val("Y" ) ;
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
// 2025.11.18 나혁제
|
||||
// 결재순서 위로 이동처리
|
||||
// ----------------------------------------
|
||||
function fnMoveUpTR()
|
||||
{
|
||||
var $selected = $("#table_appr tbody tr.selected");
|
||||
|
||||
if ($selected.length === 0)
|
||||
{
|
||||
alert("이동할 행을 선택하세요.");
|
||||
return;
|
||||
}
|
||||
|
||||
var $prev = $selected.prev();
|
||||
|
||||
if ($prev.length > 0)
|
||||
{
|
||||
$selected.insertBefore($prev);
|
||||
reorderApprSeq();
|
||||
}
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
// 2025.11.18 나혁제
|
||||
// 결재순서 아래로 이동처리
|
||||
// ----------------------------------------
|
||||
function fnMoveDownTR()
|
||||
{
|
||||
var $selected = $("#table_appr tbody tr.selected");
|
||||
|
||||
if ($selected.length === 0)
|
||||
{
|
||||
alert("이동할 행을 선택하세요.");
|
||||
return;
|
||||
}
|
||||
|
||||
let $next = $selected.next();
|
||||
|
||||
if ($next.length > 0)
|
||||
{
|
||||
$selected.insertAfter($next);
|
||||
reorderApprSeq();
|
||||
}
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
// 2025.11.18 나혁제
|
||||
// 결재순서 재설정
|
||||
// ----------------------------------------
|
||||
function reorderApprSeq()
|
||||
{
|
||||
$("#table_appr tbody tr").each(function(index){
|
||||
// index는 0부터 시작하므로 1을 더해줌
|
||||
$(this).find("td:eq(1)").text(index + 1);
|
||||
});
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
// 팝업 오픈
|
||||
// ----------------------------------------
|
||||
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 form = $('#svcDeskManage')[0];
|
||||
var formData = new FormData(form);
|
||||
|
||||
$.ajax({
|
||||
url: '/srm/addIncident.do'
|
||||
, type: 'post'
|
||||
, enctype:'multipart/form-data'
|
||||
, data: formData
|
||||
, dataType: 'json'
|
||||
, processData:false
|
||||
, contentType:false
|
||||
, cache:false
|
||||
, success: function(data)
|
||||
{
|
||||
alert("등록 완료 되었습니다.");
|
||||
fncSvcDeskList();
|
||||
|
||||
},
|
||||
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);
|
||||
|
||||
$('#table_appr tbody tr').remove();
|
||||
|
||||
// 결재라인 세팅
|
||||
for(var i=0; i<data.resultApprovals.length; i++)
|
||||
{
|
||||
fn_table_appr_tr_add(data.resultApprovals[i].inUserSeq, data.resultApprovals[i].vcUserName);
|
||||
}
|
||||
},
|
||||
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="svcDeskManage" name="svcDeskManage" 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="vcRegUser" id="vcRegUser" value="${vcRegUser}"/>
|
||||
|
||||
<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="inRegUser" id="inRegUser" value="${inRegUser}" >
|
||||
</td>
|
||||
<th> 접수일시 </th>
|
||||
<td>
|
||||
<input type="text" class="btn_calendar" name="dtReceiptDatetime" id="dtReceiptDatetime" value="${dtReceiptDatetime}" readonly style="width:90%;"/>
|
||||
</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 == resultIncident.inServiceCode}">selected</c:if> > ${result.label} </option><!-- 분류코드명 -->
|
||||
</c:forEach>
|
||||
</select>
|
||||
</td>
|
||||
<th> 조치예정자 </th>
|
||||
<td>
|
||||
<input type="text" name="vcChargeUser" id="vcChargeUser" value="${resultIncident.vcChargeUser}" readonly/>
|
||||
|
||||
<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="${resultIncident.inChargeUser}" >
|
||||
|
||||
</td>
|
||||
<th> 완료요청일시 </th>
|
||||
<td>
|
||||
<input type="text" class="btn_calendar" name="dtReqDatetime" id="dtReqDatetime" value="${dtReqDatetime}" readonly style="width:90%;"/>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<th> 제목 </th>
|
||||
<td colspan=3>
|
||||
<input type="text" name="vcIncidentTitle" id="vcIncidentTitle" value="${resultIncident.vcIncidentTitle}" style="width:90%;"/>
|
||||
</td>
|
||||
<th> 조치자 </th>
|
||||
<td>${resultIncident.vcDevUser}</td>
|
||||
<td colspan=2>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<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>
|
||||
</div>
|
||||
<!-- attached file End -->
|
||||
</td>
|
||||
|
||||
<th rowspan=2>서비스 진행사항</th>
|
||||
<td rowspan=2></td>
|
||||
|
||||
</tr>
|
||||
<tr>
|
||||
<th>기존첨부파일</th>
|
||||
<td colspan=3>
|
||||
<c:import url="/cmm/selectFileInfs.do" charEncoding="utf-8">
|
||||
<c:param name="param_atchFileId" value="${resultIncident.atchFileId}" />
|
||||
<c:param name="strItmsYn" value="Y" />
|
||||
</c:import>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<th >서비스 결재 라인 </th>
|
||||
<td colspan=5 style="vertical-align: top;">
|
||||
|
||||
<div class="btn_group" >
|
||||
<button type="button" class="btn-function" onclick="fn_User_Search('조치예정', '', '', '', '', 'Y');return false;" style="margin-top: -30px;"> 조회 </button>
|
||||
<button type="button" class="btn-function" onclick="fn_User_Delete(); return false;" style="margin-top: -30px;"> 삭제 </button>
|
||||
</div>
|
||||
|
||||
<!-- 2025.11.18 나혁제 결재순서 추가 -->
|
||||
<!-- flex 시작 -->
|
||||
<div style="display: flex;align-items: flex-start;">
|
||||
<div class="tbl_list">
|
||||
<!-- 목록영역 -->
|
||||
<table class="table" summary="" id="table_appr" >
|
||||
<caption>결재라인 <spring:message code="title.list" /></caption>
|
||||
<colgroup>
|
||||
<col style="width: 8%;">
|
||||
<col style="width: 8%;">
|
||||
<col style="width: 15%;">
|
||||
<col style="width: 10%;">
|
||||
<col style="width: *;">
|
||||
</colgroup>
|
||||
|
||||
<thead>
|
||||
<tr>
|
||||
<th></th>
|
||||
<th>결재순서</th>
|
||||
<th>결재자</th>
|
||||
<th>상태</th>
|
||||
<th>Comment</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<c:forEach var="approvals" items="${resultApprovals}" varStatus="status">
|
||||
<tr>
|
||||
<td>
|
||||
<label>
|
||||
<input type="checkbox" style="display: inline-block;" name="chkAppUser" />
|
||||
</label>
|
||||
</td>
|
||||
<td ><c:out value="${approvals.inOrder+1}"/></td>
|
||||
<td ><c:out value="${approvals.vcUserName}"/></td>
|
||||
<td ></td>
|
||||
<td ></td>
|
||||
|
||||
<input type="hidden" name="approvalUserId" id="approvalUserId" value="${approvals.inUserSeq}" >
|
||||
<input type="hidden" name="approvalUserNm" id="approvalUserNm" value="${approvals.vcUserName}" >
|
||||
|
||||
</tr>
|
||||
</c:forEach>
|
||||
</tbody>
|
||||
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<div style="width:3%;text-align:center;padding-left:5px;align-self: center;">
|
||||
<a href="#" onclick="fnMoveUpTR(this); return false;" style="font-size: x-large;" >▲</a>
|
||||
<a href="#" onclick="fnMoveDownTR(this); return false;" style="font-size: x-large;" >▼</a>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<textarea id="serviceBody" name="serviceBody" ></textarea>
|
||||
<textarea id="serviceBody2" name="serviceBody2" style="display:none;">${resultIncident.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="fncSvcDeskList(); return false;" title="<spring:message code="button.list"/>">
|
||||
<spring:message code="button.list"/>
|
||||
</button>
|
||||
</div>
|
||||
<!--//왼쪽영역-->
|
||||
<!-- 오른쪽영역-->
|
||||
<div>
|
||||
<button type="button" class="btn-etc" title="등록/승인요청" onclick="fncSvcDeskIncidentInsertReqApp(); return false;">
|
||||
등록/승인요청
|
||||
</button>
|
||||
<button type="button" class="btn-etc" title="<spring:message code="button.create" />" onclick="fncSvcDeskIncidentInsert(); return false;">
|
||||
<spring:message code="button.create" />
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<!-- main btn : end -->
|
||||
|
||||
<%--
|
||||
<div class="btn_group">
|
||||
<!-- 왼쪽영역-->
|
||||
<div style="text-align: left;position: absolute;">
|
||||
<!-- 목록 -->
|
||||
<button type="button" class="btn-function" id="btnList" style="background: blue;" onclick="fncSvcDeskList(); return false;" title="<spring:message code="button.list"/>">
|
||||
<spring:message code="button.list"/>
|
||||
</button>
|
||||
</div>
|
||||
<!--//왼쪽영역-->
|
||||
<!-- 오른쪽영역-->
|
||||
<div>
|
||||
<c:if test="${resultIncident.inIncidentStatus eq 0}">
|
||||
<button type="button" class="btn-etc" title="<spring:message code="저장/승인요청 " />" onclick="fncSvcDeskIncidentUpdateApp(); return false;">
|
||||
저장/승인요청
|
||||
</button>
|
||||
</c:if>
|
||||
<button type="button" class="btn-etc" title="<spring:message code="수정" />" onclick="fncSvcDeskIncidentUpdate(); return false;">
|
||||
수정
|
||||
</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=""/> <!-- 승인요청여부 -->
|
||||
|
||||
<!-- 신청정보 -->
|
||||
<input type="hidden" id="vcReqIncidentNum" name="vcReqIncidentNum" value="">
|
||||
<input type="hidden" id="reqAtchFileId" name="reqAtchFileId" value="${resultIncident.atchFileId}">
|
||||
<input type="hidden" id="reqRptRejTxComment" name="reqRptRejTxComment" value="">
|
||||
|
||||
|
||||
|
||||
|
||||
</form:form>
|
||||
|
||||
@ -128,6 +128,25 @@
|
||||
varFrom.submit();
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
// 2025.01.21 나혁제 새로만들 기능확장
|
||||
// 인스던트 새로만들기 화면 이동처리
|
||||
// ----------------------------------------
|
||||
function fncSvcDeskIncidentCopyInsert()
|
||||
{
|
||||
if($('#inIncidentStatus').val() != '2' && $('#inIncidentStatus').val() != '3' )
|
||||
{
|
||||
alert("[승인완료/반려]된 인시던트에서만 새로만들기가 가능합니다.");
|
||||
return;
|
||||
}
|
||||
|
||||
// 새로만들기 화면으로 이동처리
|
||||
var varFrom = document.getElementById("svcDeskManage");
|
||||
varFrom.action = "<c:url value='/srm/insertCopyViewIncident.do'/>";
|
||||
varFrom.submit();
|
||||
}
|
||||
|
||||
|
||||
//----------------------------------------
|
||||
// 인스던트 삭제 처리
|
||||
// ----------------------------------------
|
||||
@ -857,6 +876,12 @@
|
||||
|
||||
</c:if>
|
||||
|
||||
<c:if test="${ (privType eq 'mine' && (resultIncident.inIncidentStatus eq 2 || resultIncident.inIncidentStatus eq 3) ) || privType eq 'super' }" >
|
||||
<button type="button" class="btn-etc" title="수정" onclick="fncSvcDeskIncidentCopyInsert(); return false;">
|
||||
새로만들기
|
||||
</button>
|
||||
</c:if>
|
||||
|
||||
<c:if test="${(privType eq 'mine' && resultIncident.inIncidentStatus ne 3) || privType eq 'super' || privType eq 'incharge' || privType eq 'developer'}">
|
||||
<button type="button" class="btn-etc" title="수정" onclick="fncSvcDeskIncidentUpdate(); return false;">
|
||||
수정
|
||||
|
||||
@ -651,14 +651,11 @@ ${uploadMax }
|
||||
<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="inRegUser" id="inRegUser" value="${inRegUser}" >
|
||||
|
||||
</td>
|
||||
<th> 접수일시 </th>
|
||||
<td>
|
||||
<input type="text" class="btn_calendar" name="dtReceiptDatetime" id="dtReceiptDatetime" value="${dtReceiptDatetime}" readonly style="width:80%;"/>
|
||||
|
||||
<input type="text" class="btn_calendar" name="dtReceiptDatetime" id="dtReceiptDatetime" value="${dtReceiptDatetime}" readonly style="width:90%;"/>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
@ -683,7 +680,7 @@ ${uploadMax }
|
||||
</td>
|
||||
<th> 완료요청일시 </th>
|
||||
<td>
|
||||
<input type="text" class="btn_calendar" name="dtReqDatetime" id="dtReqDatetime" value="${dtReqDatetime}" readonly style="width:80%;"/>
|
||||
<input type="text" class="btn_calendar" name="dtReqDatetime" id="dtReqDatetime" value="${dtReqDatetime}" readonly style="width:90%;"/>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
|
||||
@ -136,7 +136,7 @@
|
||||
// 접수처리
|
||||
if(strGubun=='0')
|
||||
{
|
||||
// 수정화면으로 이동처리
|
||||
// 인스던트 접수 화면으로 이동처리
|
||||
var varFrom = document.getElementById("svcDeskReqManage");
|
||||
varFrom.action = "<c:url value='/srm/insertViewIncident.do'/>";
|
||||
varFrom.submit();
|
||||
|
||||
@ -43,10 +43,6 @@
|
||||
<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>
|
||||
|
||||
<!-- 2026.01.14 나혁제 공통팝업처리 -->
|
||||
<script type="text/javascript" src="${ctx}/egov/js/showModalDialog.js"></script>
|
||||
|
||||
|
||||
</head>
|
||||
|
||||
|
||||
@ -112,8 +108,9 @@
|
||||
}
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
// 쿠키 조회
|
||||
// name : 쿠키값
|
||||
// ----------------------------------------
|
||||
function getCookie(name)
|
||||
{
|
||||
const cookie = document.cookie;
|
||||
@ -133,10 +130,9 @@
|
||||
return "" ;
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
// 쿠키 설정
|
||||
// name : 쿠키명
|
||||
// value : 쿠키값
|
||||
// expiredays : 쿠키 만료일
|
||||
// ----------------------------------------
|
||||
function setCookie(name,value,expiredays)
|
||||
{
|
||||
const date = new Date();
|
||||
@ -144,8 +140,9 @@
|
||||
document.cookie = escape(name) + "=" + escape(value) + "; path=/; expires=" + date.toUTCString();
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
// 쿠키 삭제
|
||||
// name : 쿠키명
|
||||
// ----------------------------------------
|
||||
function deleteCookie(name)
|
||||
{
|
||||
const expireDate = new Date();
|
||||
@ -171,6 +168,41 @@
|
||||
PopupOpen("/main/PopPasswordReset", 380, 450, '');
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
// 2026.01.19 나혁제 추가
|
||||
// 패스워드 초기화
|
||||
// ----------------------------------------
|
||||
function fncPopUserRegistOpen()
|
||||
{
|
||||
// PopupOpen("/main/PopUserRegist", 380, 800, '');
|
||||
|
||||
var $dialog = $('<div></div>')
|
||||
.html('<iframe style="border: 0px; " src="/main/noAuthUserInsertView.do" width="100%" height="100%"></iframe>')
|
||||
.dialog({
|
||||
autoOpen: false
|
||||
, modal: true
|
||||
, height: 600
|
||||
, width: 800
|
||||
, title: '회원가입'
|
||||
, 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");
|
||||
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
// 팝업 오픈
|
||||
@ -270,11 +302,10 @@
|
||||
<button type="button" class="btn-function" title="ID 찾기" onclick="fncIdFindOpen(); return false;" style="background: cadetblue;" >ID 찾기</button>
|
||||
<button type="button" class="btn-function" title="패스워드초기화" onclick="fncPopPassworkdResetOpen(); return false;" style="background: cadetblue;" >PASSWORD 초기화</button>
|
||||
|
||||
<button type="button" class="btn-function" title="자산등록" onclick="fncMultiResourceInsert(); return false;" style="background: blue;" >회원가입</button>
|
||||
<button type="button" class="btn-function" title="회원가입" onclick="fncPopUserRegistOpen(); return false;" style="background: blue;" >회원가입</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<!--//loginWrap :e -->
|
||||
|
||||
@ -1,14 +1,14 @@
|
||||
<%--
|
||||
Class Name : LoginUsr.jsp
|
||||
Class Name : LoginUsr_kic.jsp
|
||||
Description : 로그인화면
|
||||
Modification Information
|
||||
|
||||
수정일 수정자 수정내용
|
||||
------- -------- ---------------------------
|
||||
2025.01.03 나혁제 최초생성
|
||||
2025.12.01 나혁제 최초생성
|
||||
|
||||
author : 인프라본부 나혁제
|
||||
since : 2025.01.02
|
||||
since : 2025.12.01
|
||||
--%>
|
||||
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
|
||||
|
||||
@ -115,6 +115,9 @@
|
||||
|
||||
});
|
||||
|
||||
//----------------------------------------
|
||||
// 로그인 처리
|
||||
// ----------------------------------------
|
||||
function actionLogin()
|
||||
{
|
||||
if (document.loginForm.userId.value =="")
|
||||
@ -146,8 +149,9 @@
|
||||
}
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
// 쿠키 조회
|
||||
// name : 쿠키값
|
||||
// ----------------------------------------
|
||||
function getCookie(name)
|
||||
{
|
||||
const cookie = document.cookie;
|
||||
@ -167,10 +171,9 @@
|
||||
return "" ;
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
// 쿠키 설정
|
||||
// name : 쿠키명
|
||||
// value : 쿠키값
|
||||
// expiredays : 쿠키 만료일
|
||||
// ----------------------------------------
|
||||
function setCookie(name,value,expiredays)
|
||||
{
|
||||
const date = new Date();
|
||||
@ -178,8 +181,9 @@
|
||||
document.cookie = escape(name) + "=" + escape(value) + "; path=/; expires=" + date.toUTCString();
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
// 쿠키 삭제
|
||||
// name : 쿠키명
|
||||
// ----------------------------------------
|
||||
function deleteCookie(name)
|
||||
{
|
||||
const expireDate = new Date();
|
||||
@ -187,6 +191,94 @@
|
||||
document.cookie = name + "= " + "; expires=" + expireDate.toGMTString();
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
// 2026.01.22 나혁제 추가
|
||||
// ID 찾기
|
||||
// ----------------------------------------
|
||||
function fncIdFindOpen()
|
||||
{
|
||||
PopupOpen("/main/PopIdFind", 470, 450, '');
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
// 2026.01.22 나혁제 추가
|
||||
// 패스워드 초기화
|
||||
// ----------------------------------------
|
||||
function fncPopPassworkdResetOpen()
|
||||
{
|
||||
PopupOpen("/main/PopPasswordReset", 380, 450, '');
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
// 2026.01.22 나혁제 추가
|
||||
// 패스워드 초기화
|
||||
// ----------------------------------------
|
||||
function fncPopUserRegistOpen()
|
||||
{
|
||||
// PopupOpen("/main/PopUserRegist", 380, 800, '');
|
||||
|
||||
var $dialog = $('<div></div>')
|
||||
.html('<iframe style="border: 0px; " src="/main/noAuthUserInsertView.do" width="100%" height="100%"></iframe>')
|
||||
.dialog({
|
||||
autoOpen: false
|
||||
, modal: true
|
||||
, height: 600
|
||||
, width: 800
|
||||
, title: '회원가입'
|
||||
, 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");
|
||||
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
// 팝업 오픈
|
||||
// ----------------------------------------
|
||||
function PopupOpen(strUrl, hei, wid, pagetitle)
|
||||
{
|
||||
var page = "/common/PageRedirection.do?Page="+ strUrl
|
||||
+ "&PopupYn=B";
|
||||
|
||||
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");
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
@ -228,6 +320,7 @@
|
||||
<!-- Right: 로그인 박스 -->
|
||||
<div class="login-right">
|
||||
<h1><img src="${ctx}/images/main/logo.png" alt="uWorks Portal logo"></h1>
|
||||
</br>
|
||||
<h3>urITSM 에 오신것을 환영합니다.</h3>
|
||||
|
||||
<div class="login_box">
|
||||
@ -251,6 +344,13 @@
|
||||
|
||||
</form:form>
|
||||
|
||||
<div class="btn_group" style="width:400px;text-align: left;" >
|
||||
<button type="button" class="btn-function" title="ID 찾기" onclick="fncIdFindOpen(); return false;" style="background: cadetblue;" >ID찾기</button>
|
||||
<button type="button" class="btn-function" title="패스워드초기화" onclick="fncPopPassworkdResetOpen(); return false;" style="background: cadetblue;" >패스워드초기화</button>
|
||||
<button type="button" class="btn-function" title="회원가입" onclick="fncPopUserRegistOpen(); return false;" style="background: blue;" >회원가입</button>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -81,7 +81,7 @@
|
||||
var formData = new FormData(form);
|
||||
|
||||
$.ajax({
|
||||
url: '/main/searchIdFind.do'
|
||||
url: '/main/noAuthSearchIdFind.do'
|
||||
, type: 'post'
|
||||
, enctype:'multipart/form-data'
|
||||
, data: formData
|
||||
@ -91,6 +91,11 @@
|
||||
, cache:false
|
||||
, success: function(data)
|
||||
{
|
||||
if(data.userId==null || data.userId =='')
|
||||
{
|
||||
alert("사용자 정보를 찾을수가 없습니다.");
|
||||
}
|
||||
|
||||
$('#userId').val(data.userId);
|
||||
},
|
||||
error: function(errorThrown)
|
||||
|
||||
@ -48,17 +48,17 @@
|
||||
{
|
||||
if ($('#userId').val()=='')
|
||||
{
|
||||
alert("성명을 입력하세요");
|
||||
alert("아이디을 입력하세요");
|
||||
return false;
|
||||
}
|
||||
if ($('#userNm').val()=='')
|
||||
{
|
||||
alert("성명을 입력하세요");
|
||||
alert("사용자명을 입력하세요");
|
||||
return false;
|
||||
}
|
||||
else if ($('#userEmail').val()=='')
|
||||
{
|
||||
alert("Email 입력하세요");
|
||||
alert("Email을 입력하세요");
|
||||
return false;
|
||||
}
|
||||
else
|
||||
@ -79,14 +79,14 @@
|
||||
// 서블릿 통신
|
||||
var proc =
|
||||
{
|
||||
// 인스던트 처리완료
|
||||
// 비밀번호 초기화
|
||||
fn_password_reset : function ()
|
||||
{
|
||||
var form = $('#PopPasswordReset')[0];
|
||||
var formData = new FormData(form);
|
||||
|
||||
$.ajax({
|
||||
url: '/main/UserPasswordResetExt.do'
|
||||
url: '/main/noAuthUserPasswordResetExt.do'
|
||||
, type: 'post'
|
||||
, enctype:'multipart/form-data'
|
||||
, data: formData
|
||||
@ -96,12 +96,21 @@
|
||||
, cache:false
|
||||
, success: function(data)
|
||||
{
|
||||
alert(JSON.stringify(data));
|
||||
if(data.resultCd == 0)
|
||||
{
|
||||
alert("새로운 비밀번호가 정상적으로 보내졌습니다. \n E-mail을 확인하시기 바랍니다.");
|
||||
fncClose();
|
||||
}
|
||||
else
|
||||
{
|
||||
alert("비밀번호 초기화에 실패하였습니다. \n사용자정보을 확인해주시길 바랍니다.");
|
||||
}
|
||||
// alert(JSON.stringify(data));
|
||||
// $('#userId').val(data.userId);
|
||||
},
|
||||
error: function(errorThrown)
|
||||
{
|
||||
alert("ID 찾기 오류가 발생하였습니다. \n 시스템 관리자에게 문의해 주시기 바랍니다.");
|
||||
alert("Password 초기화중 오류가 발생하였습니다. \n 시스템 관리자에게 문의해 주시기 바랍니다.");
|
||||
console.log(JSON.stringify(errorThrown));
|
||||
}
|
||||
});
|
||||
@ -137,7 +146,7 @@
|
||||
<tbody>
|
||||
<tr>
|
||||
<th>
|
||||
성명
|
||||
아이디
|
||||
</th>
|
||||
<td>
|
||||
<input type="text" name="userId" id="userId" class="txt_id" >
|
||||
|
||||
375
src/main/webapp/WEB-INF/jsp/main/PopUserRegist.jsp
Normal file
375
src/main/webapp/WEB-INF/jsp/main/PopUserRegist.jsp
Normal file
@ -0,0 +1,375 @@
|
||||
<!DOCTYPE html>
|
||||
|
||||
<%--
|
||||
/**
|
||||
* @Class Name : PopUserRegist.jsp
|
||||
* @Description : 회원가입 팝엄 화면
|
||||
* @Modification Information
|
||||
* @
|
||||
* @ 수정일 수정자 수정내용
|
||||
* @ ---------- -------- ---------------------------
|
||||
* @ 2026.01.19 나혁제 최초 생성
|
||||
*
|
||||
* @author urp 인프라본부 나혁제
|
||||
* @since 2026.01.19
|
||||
* @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" %>
|
||||
<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %>
|
||||
|
||||
<title>ID 찾기</title>
|
||||
|
||||
<meta http-equiv="content-type" content="text/html; charset=utf-8">
|
||||
|
||||
<link type="text/css" rel="stylesheet" href="<c:url value='/egov/css/com/com_urp.css'/>">
|
||||
|
||||
<script type="text/javascript" src="<c:url value="/validator.do"/>"></script>
|
||||
<validator:javascript formName="userManageExtVO" staticJavascript="false" xhtml="true" cdata="false"/>
|
||||
|
||||
<script type="text/javaScript" language="javascript" defer="defer">
|
||||
|
||||
//----------------------------------------
|
||||
// 화면 초기화
|
||||
// ----------------------------------------
|
||||
$(document).ready(function()
|
||||
{
|
||||
// alert("한번봅시다.");
|
||||
// fn_modal_setting();
|
||||
});
|
||||
|
||||
//----------------------------------------
|
||||
// 초기화
|
||||
// ----------------------------------------
|
||||
function fn_egov_init()
|
||||
{
|
||||
fn_modal_setting();
|
||||
|
||||
// 팝업 화면 맨앞으로 배치
|
||||
$(".modal-content").css("width", "35%");
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
// 모달셋팅
|
||||
// ----------------------------------------
|
||||
function fn_modal_setting()
|
||||
{
|
||||
//버튼에 모달 연결
|
||||
$("#btnEmplyrId").egovModal( "egovModal" );
|
||||
|
||||
//타이틀 설졍
|
||||
$("#egovModal").setEgovModalTitle("<spring:message code="comUssUmt.userManageRegistModal.title" />"); //아이디 중복 확인
|
||||
var content = "";
|
||||
content = content + "<div class='modal-alignL' style='margin:5px 0 0 0'>"+"<spring:message code="comUssUmt.userManageRegistModal.userIsId" /> :"+"</div>"; //사용할아이디
|
||||
content = content + "<div class='modal-alignL'>"+"<input type='text' id='checkIdModal' name='checkIdModal' value='' size='20' maxlength='20' />"+"</div>";
|
||||
content += "<div style='clear:both;'></div>";
|
||||
content += "<div id='divModalResult' style='margin:10px 0 0 0'><spring:message code="comUssUmt.userManageRegistModal.initStatus" /></div>"; //결과 : 중복확인을 실행하십시오.
|
||||
//모달 body 설정
|
||||
$("#egovModal").setEgovModalBody(content);
|
||||
|
||||
var footer = "";
|
||||
footer += "<span class='btn_style1 blue' id='btnModalOk' onclick='fn_id_checkOk()'><a href='#'>확인</a></span> ";
|
||||
footer += "<span class='btn_style1 blue' id='btnModalSelect' onclick='fn_id_check()'><a href='#'>조회</a></span> ";
|
||||
//모달 footer 설정
|
||||
$("#egovModal").setEgovModalfooter(footer);
|
||||
|
||||
//엔터이벤트처리
|
||||
$("input[name=checkIdModal]").keydown(function (key) {
|
||||
if(key.keyCode == 13){
|
||||
fn_id_check();
|
||||
}
|
||||
});
|
||||
|
||||
footer = null;
|
||||
content = null;
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
// 아이디 체크 AJAX
|
||||
// ----------------------------------------
|
||||
function fn_id_check()
|
||||
{
|
||||
$.ajax({
|
||||
type:"POST",
|
||||
url:"<c:url value='/main/noAuthIdDplctCnfirmAjax.do' />",
|
||||
data:{
|
||||
"checkId": $("#checkIdModal").val()
|
||||
},
|
||||
dataType:'json',
|
||||
timeout:(1000*30),
|
||||
success:function(returnData, status){
|
||||
if(status == "success") {
|
||||
if(returnData.usedCnt > 0 ){
|
||||
//사용할수 없는 아이디입니다.
|
||||
$("#divModalResult").html("<font color='red'><spring:message code="comUssUmt.userManageRegistModal.result" /> : ["+returnData.checkId+"]<spring:message code="comUssUmt.userManageRegistModal.useMsg" /></font>");
|
||||
}else{
|
||||
//사용가능한 아이디입니다.
|
||||
$("#divModalResult").html("<font color='blue'><spring:message code="comUssUmt.userManageRegistModal.result" /> : ["+returnData.checkId+"]<spring:message code="comUssUmt.userManageRegistModal.notUseMsg" /></font>");
|
||||
}
|
||||
}else{ alert("ERROR!");return;}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
// 아이디 체크 확인
|
||||
// ----------------------------------------
|
||||
function fn_id_checkOk()
|
||||
{
|
||||
$.ajax({
|
||||
type:"POST",
|
||||
url:"<c:url value='/main/noAuthIdDplctCnfirmAjax.do' />",
|
||||
data:{
|
||||
"checkId": $("#checkIdModal").val()
|
||||
},
|
||||
dataType:'json',
|
||||
timeout:(1000*30),
|
||||
success:function(returnData, status){
|
||||
if(status == "success") {
|
||||
if(returnData.usedCnt > 0 ){
|
||||
alert("<spring:message code="comUssUmt.userManageRegistModal.noIdMsg" />"); //사용이 불가능한 아이디 입니다.
|
||||
return;
|
||||
}else{
|
||||
|
||||
$("input[name=emplyrId]").val(returnData.checkId);
|
||||
$("#egovModal").setEgovModalClose();
|
||||
}
|
||||
}else{ alert("ERROR!");return;}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
// 등록
|
||||
// ----------------------------------------
|
||||
function fnInsert(form)
|
||||
{
|
||||
if(confirm("<spring:message code="common.regist.msg" />"))
|
||||
{
|
||||
if(validateUserManageExtVO(form))
|
||||
{
|
||||
if(form.password.value != form.password2.value)
|
||||
{
|
||||
alert("<spring:message code="fail.user.passwordUpdate2" />");
|
||||
return false;
|
||||
}
|
||||
|
||||
proc.fn_user_save();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//----------------------------------------
|
||||
// 닫기
|
||||
// ----------------------------------------
|
||||
function fncClose()
|
||||
{
|
||||
parent.$('.ui-dialog-content').dialog('close');
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
// 서블릿 통신
|
||||
// ----------------------------------------
|
||||
var proc =
|
||||
{
|
||||
// 사용자 정보 입력
|
||||
fn_user_save : function ()
|
||||
{
|
||||
var form = $('#userManageExtVO')[0];
|
||||
var formData = new FormData(form);
|
||||
|
||||
$.ajax({
|
||||
url: '/main/noAuthUserInsertExt.do'
|
||||
, type: 'post'
|
||||
, enctype:'multipart/form-data'
|
||||
, data: formData
|
||||
, dataType: 'json'
|
||||
, processData:false
|
||||
, contentType:false
|
||||
, cache:false
|
||||
, success: function(data)
|
||||
{
|
||||
alert(data.resultMsg);
|
||||
if(data.resultCd == 0)
|
||||
{
|
||||
fncClose();
|
||||
}
|
||||
},
|
||||
error: function(errorThrown)
|
||||
{
|
||||
alert("사용자정보 등록중 오류가 발생하였습니다. \n 시스템관리자에게 문의해 주시기 바랍니다.");
|
||||
console.log(JSON.stringify(errorThrown));
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</script>
|
||||
|
||||
<!-- javascript warning tag -->
|
||||
<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript>
|
||||
|
||||
<body onload="fn_egov_init()">
|
||||
<form:form modelAttribute="userManageExtVO" name="userManageExtVO" 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: 20%;">
|
||||
<col style="width: 30%;">
|
||||
<col style="width: 20%;">
|
||||
<col style="width: 30%;">
|
||||
</colgroup>
|
||||
<tbody>
|
||||
|
||||
<tr>
|
||||
<!-- 일반회원아이디 -->
|
||||
<c:set var="title"><spring:message code="comUssUmt.deptUserManageRegist.id"/></c:set>
|
||||
<th><label for="emplyrId">${title}</label> <span class="pilsu">*</span></th>
|
||||
<td class="left">
|
||||
<form:input path="emplyrId" id="emplyrId" title="${title} ${inputTxt}" size="20" readonly="true" maxlength="20" style="width:95%;font-weight: bold;" />
|
||||
<br>
|
||||
<button id="btnEmplyrId" type="button" class="btn-primary" style="margin-top:5px;" title="<spring:message code="comUssUmt.deptUserManageRegistBtn.idSearch" />" onclick="return false;" ><spring:message code="comUssUmt.deptUserManageRegistBtn.idSearch" /></button>
|
||||
<div><form:errors path="emplyrId" cssClass="error" /></div>
|
||||
</td>
|
||||
<!-- 일반회원이름 -->
|
||||
<c:set var="title"><spring:message code="comUssUmt.deptUserManageRegist.name"/></c:set>
|
||||
|
||||
<th><label for="emplyrNm">${title}</label> <span class="pilsu">*</span></th>
|
||||
<td class="left">
|
||||
<form:input path="emplyrNm" title="${title} ${inputTxt}" size="50" maxlength="60" style="width:95%;" />
|
||||
<div><form:errors path="emplyrNm" cssClass="error" /></div>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<c:set var="title"><spring:message code="comUssUmt.deptUserManageRegist.pass"/></c:set>
|
||||
<th><label for="password">${title}</label> <span class="pilsu">*</span></th>
|
||||
<td class="left">
|
||||
<div>
|
||||
<form:password path="password" title="${title} ${inputTxt}" size="50" maxlength="20" style="width:95%;" />
|
||||
<div><form:errors path="password" cssClass="error" /></div>
|
||||
</div>
|
||||
</td>
|
||||
|
||||
<!-- 비밀번호확인 -->
|
||||
<c:set var="title"><spring:message code="comUssUmt.deptUserManageRegist.passConfirm"/></c:set>
|
||||
<th><label for="password2">${title}</label> <span class="pilsu">*</span></th>
|
||||
<td class="left">
|
||||
<input name="password2" id="password2" title="${title} ${inputTxt}" type="password" size="50" maxlength="20" style="width:95%;" />
|
||||
</td>
|
||||
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<th></th>
|
||||
<td colspan=3 class="left">
|
||||
<div>
|
||||
<div><spring:message code="info.password.rule.password1" /></div>
|
||||
<div><spring:message code="info.password.rule.pwdcheckcomb3" /></div>
|
||||
<div><spring:message code="info.password.rule.pwdcheckseries" /></div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<!-- 헨드폰번호 -->
|
||||
<c:set var="title"><spring:message code="comUssUmt.deptUserManageRegist.phone"/></c:set>
|
||||
<th><label for="moblphonNo">${title}</label> <span class="pilsu">*</span></th>
|
||||
<td class="left">
|
||||
<form:input path="moblphonNo" id="moblphonNo" title="${title} ${inputTxt}" cssClass="txaIpUmt" size="20" maxlength="15" style="width:95%;" />
|
||||
<div><form:errors path="moblphonNo" cssClass="error" /></div>
|
||||
</td>
|
||||
|
||||
<!-- 이메일주소 -->
|
||||
<c:set var="title"><spring:message code="comUssUmt.deptUserManageRegist.email"/></c:set>
|
||||
<th><label for="emailAdres">${title}</label> <span class="pilsu">*</span></th>
|
||||
<td class="left">
|
||||
<form:input path="emailAdres" id="mberEmailAdres" title="${title} ${inputTxt}" cssClass="txaIpUmt" size="30" maxlength="50" style="width:95%;" />
|
||||
<div><form:errors path="emailAdres" cssClass="error" /></div>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<!-- 조직아이디 -->
|
||||
<tr>
|
||||
<c:set var="title"><spring:message code="comUssUmt.deptUserManageRegist.orgnztId"/></c:set>
|
||||
<th><label for="orgnztId">${title}</label></th>
|
||||
<td colspan=3 class="left">
|
||||
<form:select path="orgnztId" id="orgnztId" title="${title} ${inputSelect}">
|
||||
<form:option value="" label="${inputSelect}"/>
|
||||
<form:options items="${orgnztId_result}" itemValue="code" itemLabel="codeNm"/>
|
||||
</form:select>
|
||||
<div><form:errors path="orgnztId" cssClass="error"/></div>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<!-- 그룹아이디 -->
|
||||
<tr>
|
||||
<c:set var="title"><spring:message code="comUssUmt.deptUserManageRegist.groupId"/></c:set>
|
||||
<th><label for="groupId">${title}</label> <span class="pilsu">*</span></th>
|
||||
<td colspan=3 class="left">
|
||||
<form:select path="groupId" id="groupId" title="${title} ${inputSelect}">
|
||||
<form:option value="" label="${inputSelect}"/>
|
||||
<form:options items="${groupId_result}" itemValue="code" itemLabel="codeNm"/>
|
||||
</form:select>
|
||||
<div><form:errors path="groupId" cssClass="error"/></div>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
</tbody>
|
||||
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<div class="btn_group">
|
||||
<button type="button" class="btn-function" id="btnConfirm" onclick="fnInsert(document.userManageExtVO); return false;" title="등록">등록</button>
|
||||
<button type="button" class="btn-cancel" id="btnCancel" onclick="fncClose(); return false;" title="닫기">닫기</button>
|
||||
</div>
|
||||
|
||||
<!-- 검색조건 유지 -->
|
||||
<input type="hidden" name="searchCondition" value="<c:out value='${userSearchVO.searchCondition}'/>"/>
|
||||
<input type="hidden" name="searchKeyword" value="<c:out value='${userSearchVO.searchKeyword}'/>"/>
|
||||
<input type="hidden" name="sbscrbSttus" value="<c:out value='${userSearchVO.sbscrbSttus}'/>"/>
|
||||
<input type="hidden" name="pageIndex" value="<c:out value='${userSearchVO.pageIndex}'/>"/>
|
||||
<!-- 우편번호검색 -->
|
||||
<input type="hidden" name="zip_url" value="<c:url value='/sym/ccm/zip/EgovCcmZipSearchPopup.do'/>" />
|
||||
|
||||
|
||||
|
||||
</form:form>
|
||||
</body>
|
||||
|
||||
<!-- Egov Modal include -->
|
||||
<c:import url="/EgovModal.do" charEncoding="utf-8">
|
||||
<c:param name="scriptYn" value="Y" />
|
||||
<c:param name="modalName" value="egovModal" />
|
||||
</c:import>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user