diff --git a/src/main/java/go/kr/project/crdn/crndRegistAndView/crdnActInfo/controller/CrdnActInfoController.java b/src/main/java/go/kr/project/crdn/crndRegistAndView/crdnActInfo/controller/CrdnActInfoController.java index eac1e3e..7fd45da 100644 --- a/src/main/java/go/kr/project/crdn/crndRegistAndView/crdnActInfo/controller/CrdnActInfoController.java +++ b/src/main/java/go/kr/project/crdn/crndRegistAndView/crdnActInfo/controller/CrdnActInfoController.java @@ -133,38 +133,6 @@ public class CrdnActInfoController { return mav; } - /** - * 조치정보 관리 팝업 (View) - * 중요한 로직 주석: 조치정보를 관리하는 별도 팝업 페이지를 반환한다. - * @param actInfoId 행위정보 ID - * @param crdnYr 단속연도 - * @param crdnNo 단속번호 - * @param mode 화면모드 - * @param model 뷰에 전달할 데이터 모델 - * @return 조치정보 관리 JSP 페이지 - */ - @Operation(summary = "조치정보 관리 팝업", description = "조치정보 관리 팝업을 반환합니다.") - @GetMapping("/crdnActnInfoManage.do") - public ModelAndView actnInfoManage( - @Parameter(description = "행위정보ID") @RequestParam String actInfoId, - @Parameter(description = "단속연도") @RequestParam String crdnYr, - @Parameter(description = "단속번호") @RequestParam String crdnNo, - @Parameter(description = "위치정보ID") @RequestParam String pstnInfoId, - @Parameter(description = "화면모드") @RequestParam(required = false, defaultValue = "U") String mode, - Model model) { - - log.debug("조치정보 관리 팝업 요청 - actInfoId: {}, crdnYr: {}, crdnNo: {}, mode: {}", actInfoId, crdnYr, crdnNo, mode); - - ModelAndView mav = new ModelAndView("crdn/crndRegistAndView/crdnActInfo/crdnActnInfoManage" + TilesConstants.POPUP); - mav.addObject("mode", mode); - mav.addObject("actInfoId", actInfoId); - mav.addObject("pstnInfoId", pstnInfoId); - mav.addObject("crdnYr", crdnYr); - mav.addObject("crdnNo", crdnNo); - - return mav; - } - /** * 전체 위반행위코드 목록 조회 (AJAX) * @return 전체 위반행위코드 목록 @@ -468,6 +436,40 @@ public class CrdnActInfoController { } } + // ======================================= 여기서부터 조치 정보 ========================================== + + /** + * 조치정보 관리 팝업 (View) + * 중요한 로직 주석: 조치정보를 관리하는 별도 팝업 페이지를 반환한다. + * @param actInfoId 행위정보 ID + * @param crdnYr 단속연도 + * @param crdnNo 단속번호 + * @param mode 화면모드 + * @param model 뷰에 전달할 데이터 모델 + * @return 조치정보 관리 JSP 페이지 + */ + @Operation(summary = "조치정보 관리 팝업", description = "조치정보 관리 팝업을 반환합니다.") + @GetMapping("/crdnActnInfoRegistPopup.do") + public ModelAndView actnInfoManage( + @Parameter(description = "행위정보ID") @RequestParam String actInfoId, + @Parameter(description = "단속연도") @RequestParam String crdnYr, + @Parameter(description = "단속번호") @RequestParam String crdnNo, + @Parameter(description = "위치정보ID") @RequestParam String pstnInfoId, + @Parameter(description = "화면모드") @RequestParam(required = false, defaultValue = "U") String mode, + Model model) { + + log.debug("조치정보 관리 팝업 요청 - actInfoId: {}, crdnYr: {}, crdnNo: {}, mode: {}", actInfoId, crdnYr, crdnNo, mode); + + ModelAndView mav = new ModelAndView("crdn/crndRegistAndView/crdnActInfo/crdnActnInfoRegistPopup" + TilesConstants.POPUP); + mav.addObject("mode", mode); + mav.addObject("actInfoId", actInfoId); + mav.addObject("pstnInfoId", pstnInfoId); + mav.addObject("crdnYr", crdnYr); + mav.addObject("crdnNo", crdnNo); + + return mav; + } + /** * 조치정보 목록 조회 (AJAX) * 중요한 로직 주석: 특정 행위정보에 속한 조치정보 목록을 페이징 처리하여 조회한다. @@ -522,12 +524,12 @@ public class CrdnActInfoController { * @param actnPhotoFiles 조치사진 파일 목록 (선택사항) * @return 등록 결과 */ - @Operation(summary = "조치정보 등록", description = "조치정보를 등록합니다. 조치사진도 함께 처리 가능합니다.") + @Operation(summary = "조치정보 저장", description = "조치정보를 등록합니다. 조치사진도 함께 처리 가능합니다.") @ApiResponses(value = { @ApiResponse(responseCode = "200", description = "등록 성공"), @ApiResponse(responseCode = "500", description = "서버 오류") }) - @PostMapping("/actnInfoInsert.ajax") + @PostMapping("/saveActnInfo.ajax") public ResponseEntity actnInfoInsertAjax( @ModelAttribute CrdnActnInfoVO vo, @RequestParam(value = "actnPhotoFiles", required = false) List actnPhotoFiles) { @@ -535,53 +537,31 @@ public class CrdnActInfoController { log.debug("조치정보 등록 요청: {}, 조치사진 개수: {}", vo, actnPhotoFiles != null ? actnPhotoFiles.size() : 0); - // 중요한 로직 주석: 세션에서 사용자 정보 설정 - String userId = SessionUtil.getUserId(); - vo.setRgtr(userId); - vo.setMdfr(userId); + CrdnRegistAndViewVO crdnVO = new CrdnRegistAndViewVO(); + crdnVO.setCrdnYr(vo.getCrdnYr()); + crdnVO.setCrdnNo(vo.getCrdnNo()); + CrdnRegistAndViewVO data = crdnRegistAndViewService.selectOne(crdnVO); - int result = service.insertActnInfoWithFiles(vo, actnPhotoFiles); + vo.setSggCd(data.getSggCd()); + vo.setRgtr(SessionUtil.getUserId()); + vo.setMdfr(SessionUtil.getUserId()); - if (result > 0) { - return ApiResponseUtil.success("조치정보가 성공적으로 등록되었습니다."); - } else { - return ApiResponseUtil.error("조치정보 등록에 실패했습니다."); + int result = 0; + if( vo.getActnInfoId() == null || vo.getActnInfoId().isEmpty() ){ + //등록 + result = service.insertActnInfoWithFiles(vo, actnPhotoFiles); + } else{ + result = service.updateActnInfoWithFiles(vo, actnPhotoFiles); } - } - - /** - * 조치정보 수정 (AJAX) - * 중요한 로직 주석: 조치정보와 조치사진을 함께 수정한다. - * @param vo 조치정보 데이터 - * @param actnPhotoFiles 조치사진 파일 목록 (선택사항) - * @return 수정 결과 - */ - @Operation(summary = "조치정보 수정", description = "조치정보를 수정합니다. 조치사진도 함께 처리 가능합니다.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "수정 성공"), - @ApiResponse(responseCode = "500", description = "서버 오류") - }) - @PostMapping("/actnInfoUpdate.ajax") - public ResponseEntity actnInfoUpdateAjax( - @ModelAttribute CrdnActnInfoVO vo, - @RequestParam(value = "actnPhotoFiles", required = false) List actnPhotoFiles) { - - log.debug("조치정보 수정 요청: {}, 조치사진 개수: {}", - vo, actnPhotoFiles != null ? actnPhotoFiles.size() : 0); - - // 중요한 로직 주석: 세션에서 사용자 정보 설정 - String userId = SessionUtil.getUserId(); - vo.setMdfr(userId); - - int result = service.updateActnInfoWithFiles(vo, actnPhotoFiles); if (result > 0) { - return ApiResponseUtil.success("조치정보가 성공적으로 수정되었습니다."); + return ApiResponseUtil.success("조치정보가 성공적으로 저장되었습니다."); } else { - return ApiResponseUtil.error("조치정보 수정에 실패했습니다."); + return ApiResponseUtil.error("조치정보 저장에 실패했습니다."); } } + /** * 조치정보 삭제 (AJAX) * 중요한 로직 주석: 조치정보와 관련 조치사진을 논리삭제한다. diff --git a/src/main/java/go/kr/project/crdn/crndRegistAndView/crdnActInfo/service/CrdnPhotoService.java b/src/main/java/go/kr/project/crdn/crndRegistAndView/crdnActInfo/service/CrdnPhotoService.java index 93e83b6..20bc37f 100644 --- a/src/main/java/go/kr/project/crdn/crndRegistAndView/crdnActInfo/service/CrdnPhotoService.java +++ b/src/main/java/go/kr/project/crdn/crndRegistAndView/crdnActInfo/service/CrdnPhotoService.java @@ -1,6 +1,7 @@ package go.kr.project.crdn.crndRegistAndView.crdnActInfo.service; import go.kr.project.common.model.FileVO; +import go.kr.project.crdn.crndRegistAndView.crdnActInfo.model.CrdnActnInfoVO; import go.kr.project.crdn.crndRegistAndView.crdnActInfo.model.CrdnPhotoVO; import org.springframework.web.multipart.MultipartFile; @@ -100,11 +101,10 @@ public interface CrdnPhotoService { * 조치사진 파일 업로드 및 등록 * 중요한 로직 주석: 조치사진 전용 업로드 메서드로 AACTN_INFO_ID에 조치정보 ID를 저장한다. * @param files 업로드할 조치사진 파일 목록 - * @param actnInfoId 조치정보 ID - * @param actInfoVO 부모 행위정보 (시군구코드, 단속연도, 단속번호 포함) + * @param actnInfoVO 조치정보 * @return 등록된 조치사진 개수 */ - int insertActnPhotosWithFiles(List files, String actnInfoId, Object actInfoVO); + int insertActnPhotosWithFiles(List files, CrdnActnInfoVO actnInfoVO); /** * 특정 조치정보의 조치사진 목록 조회 diff --git a/src/main/java/go/kr/project/crdn/crndRegistAndView/crdnActInfo/service/impl/CrdnActInfoServiceImpl.java b/src/main/java/go/kr/project/crdn/crndRegistAndView/crdnActInfo/service/impl/CrdnActInfoServiceImpl.java index b012192..91ca2ff 100644 --- a/src/main/java/go/kr/project/crdn/crndRegistAndView/crdnActInfo/service/impl/CrdnActInfoServiceImpl.java +++ b/src/main/java/go/kr/project/crdn/crndRegistAndView/crdnActInfo/service/impl/CrdnActInfoServiceImpl.java @@ -300,17 +300,8 @@ public class CrdnActInfoServiceImpl extends EgovAbstractServiceImpl implements C // 중요한 로직 주석: 조치사진이 있는 경우 처리 (CRDN_PHOTO_SE_CD = '2') // 조치사진은 AACTN_INFO_ID 컬럼에 조치정보 ID를 저장한다 if (actnPhotoFiles != null && !actnPhotoFiles.isEmpty()) { - // 중요한 로직 주석: 조치사진 저장을 위해 임시 VO 생성 - CrdnActInfoVO tempVO = CrdnActInfoVO.builder() - .actInfoId(vo.getActInfoId()) // 부모 행위정보 ID 설정 - .sggCd(vo.getSggCd()) - .crdnYr(vo.getCrdnYr()) - .crdnNo(vo.getCrdnNo()) - .rgtr(vo.getRgtr()) - .build(); - - // 중요한 로직 주석: 조치사진을 행위정보에 연결하되, AACTN_INFO_ID에는 조치정보 ID를 저장 - int actnPhotoResult = photoService.insertActnPhotosWithFiles(actnPhotoFiles, vo.getActInfoId(), tempVO); + // 중요한 로직 주석: 조치사진을 행위정보에 연결하되, ACTN_INFO_ID에는 조치정보 ID를 저장 + int actnPhotoResult = photoService.insertActnPhotosWithFiles(actnPhotoFiles, vo); log.debug("조치사진 파일 처리 완료: actnInfoId={}, 등록된 조치사진 수={}", vo.getActnInfoId(), actnPhotoResult); } } else { @@ -339,20 +330,10 @@ public class CrdnActInfoServiceImpl extends EgovAbstractServiceImpl implements C if (result > 0) { log.debug("조치정보 수정 완료: actnInfoId={}", vo.getActnInfoId()); - // 중요한 로직 주석: 새로운 조치사진이 있는 경우 추가 처리 - // 기존 사진의 개별 삭제는 별도의 Ajax 호출로 처리되므로 여기서는 신규 추가만 한다 if (actnPhotoFiles != null && !actnPhotoFiles.isEmpty()) { - // 중요한 로직 주석: 조치사진 추가를 위해 임시 VO 생성 - CrdnActInfoVO tempVO = CrdnActInfoVO.builder() - .actInfoId(vo.getActInfoId()) // 부모 행위정보 ID 설정 - .sggCd(vo.getSggCd()) - .crdnYr(vo.getCrdnYr()) - .crdnNo(vo.getCrdnNo()) - .rgtr(vo.getRgtr()) - .build(); - - int actnPhotoResult = photoService.insertActnPhotosWithFiles(actnPhotoFiles, vo.getActnInfoId(), tempVO); - log.debug("조치사진 파일 추가 완료: actnInfoId={}, 추가된 조치사진 수={}", vo.getActnInfoId(), actnPhotoResult); + // 중요한 로직 주석: 조치사진을 행위정보에 연결하되, ACTN_INFO_ID에는 조치정보 ID를 저장 + int actnPhotoResult = photoService.insertActnPhotosWithFiles(actnPhotoFiles, vo); + log.debug("조치사진 파일 처리 완료: actnInfoId={}, 등록된 조치사진 수={}", vo.getActnInfoId(), actnPhotoResult); } } else { log.error("조치정보 수정 실패: {}", vo); diff --git a/src/main/java/go/kr/project/crdn/crndRegistAndView/crdnActInfo/service/impl/CrdnPhotoServiceImpl.java b/src/main/java/go/kr/project/crdn/crndRegistAndView/crdnActInfo/service/impl/CrdnPhotoServiceImpl.java index c593119..9061e20 100644 --- a/src/main/java/go/kr/project/crdn/crndRegistAndView/crdnActInfo/service/impl/CrdnPhotoServiceImpl.java +++ b/src/main/java/go/kr/project/crdn/crndRegistAndView/crdnActInfo/service/impl/CrdnPhotoServiceImpl.java @@ -6,6 +6,7 @@ import egovframework.util.SessionUtil; import go.kr.project.common.model.FileVO; import go.kr.project.crdn.crndRegistAndView.crdnActInfo.mapper.CrdnPhotoMapper; import go.kr.project.crdn.crndRegistAndView.crdnActInfo.model.CrdnActInfoVO; +import go.kr.project.crdn.crndRegistAndView.crdnActInfo.model.CrdnActnInfoVO; import go.kr.project.crdn.crndRegistAndView.crdnActInfo.model.CrdnPhotoVO; import go.kr.project.crdn.crndRegistAndView.crdnActInfo.service.CrdnPhotoService; import lombok.RequiredArgsConstructor; @@ -295,8 +296,8 @@ public class CrdnPhotoServiceImpl extends EgovAbstractServiceImpl implements Crd @Override @Transactional - public int insertActnPhotosWithFiles(List files, String actnInfoId, Object actInfoVO) { - log.debug("조치사진 파일 업로드 및 등록: actnInfoId={}, 파일 수={}", actnInfoId, files != null ? files.size() : 0); + public int insertActnPhotosWithFiles(List files, CrdnActnInfoVO actnInfoVO) { + log.debug("조치사진 파일 업로드 및 등록: actnInfoId={}, 파일 수={}", files != null ? files.size() : 0); if (files == null || files.isEmpty()) { log.debug("업로드할 조치사진 파일이 없습니다."); @@ -305,7 +306,6 @@ public class CrdnPhotoServiceImpl extends EgovAbstractServiceImpl implements Crd try { int savedCount = 0; - CrdnActInfoVO parentVO = (CrdnActInfoVO) actInfoVO; // 중요한 로직 주석: 각 파일을 순회하며 저장 처리 for (MultipartFile file : files) { @@ -326,29 +326,29 @@ public class CrdnPhotoServiceImpl extends EgovAbstractServiceImpl implements Crd FileVO fileVO = uploadedFiles.get(0); // 중요한 로직 주석: 다음 사진 순번 생성 - String nextPhotoSn = getNextPhotoSn(parentVO.getActInfoId()); + String nextPhotoSn = getNextPhotoSn(actnInfoVO.getActInfoId()); // 중요한 로직 주석: 조치사진 정보 생성 (CRDN_PHOTO_SE_CD = '2', AACTN_INFO_ID에 조치정보 ID 저장) CrdnPhotoVO photoVO = CrdnPhotoVO.builder() - .actInfoId(parentVO.getActInfoId()) // 부모 행위정보 ID + .actInfoId(actnInfoVO.getActInfoId()) // 부모 행위정보 ID .crdnPhotoSn(nextPhotoSn) // 사진 순번 - .sggCd(parentVO.getSggCd()) // 시군구 코드 - .crdnYr(parentVO.getCrdnYr()) // 단속 연도 - .crdnNo(parentVO.getCrdnNo()) // 단속 번호 + .sggCd(actnInfoVO.getSggCd()) // 시군구 코드 + .crdnYr(actnInfoVO.getCrdnYr()) // 단속 연도 + .crdnNo(actnInfoVO.getCrdnNo()) // 단속 번호 .crdnPhotoPath(fileVO.getFilePath()) // 파일 경로 .crdnPhotoNm(fileVO.getStoredFileNm()) // 저장된 파일명 .crdnPhotoSeCd("2") // 조치사진 구분코드 - .actnInfoId(actnInfoId) // 조치정보 ID (조치사진 연결용) + .actnInfoId(actnInfoVO.getActnInfoId()) // 조치정보 ID (조치사진 연결용) .orgnlPhotoNm(fileVO.getOriginalFileNm()) // 원본 파일명 - .rgtr(SessionUtil.getUserId()) // 등록자 + .rgtr(SessionUtil.getUserId()) // 등록자 .delYn("N") // 삭제 여부 .build(); int result = mapper.insertPhoto(photoVO); if (result > 0) { savedCount++; - log.debug("조치사진 등록 완료: actInfoId={}, actnInfoId={}, photoSn={}, fileName={}", - parentVO.getActInfoId(), actnInfoId, nextPhotoSn, file.getOriginalFilename()); + log.debug("조치사진 등록 완료: actInfoId={}, photoSn={}, fileName={}", + actnInfoVO.getActInfoId(), nextPhotoSn, file.getOriginalFilename()); } } catch (Exception e) { @@ -357,11 +357,11 @@ public class CrdnPhotoServiceImpl extends EgovAbstractServiceImpl implements Crd } } - log.info("조치사진 파일 업로드 완료: actnInfoId={}, 총 파일 수={}, 저장된 파일 수={}", actnInfoId, files.size(), savedCount); + log.info("조치사진 파일 업로드 완료: actnInfoId={}, 총 파일 수={}, 저장된 파일 수={}", actnInfoVO.getActnInfoId(), files.size(), savedCount); return savedCount; } catch (Exception e) { - log.error("조치사진 파일 업로드 중 오류 발생: actnInfoId={}", actnInfoId, e); + log.error("조치사진 파일 업로드 중 오류 발생: actnInfoId={}", actnInfoVO.getActnInfoId(), e); throw new MessageException("조치사진 업로드에 실패했습니다: " + e.getMessage()); } } diff --git a/src/main/resources/mybatis/mapper/crdn/crndRegistAndView/crdnActInfo/CrdnActInfoMapper_maria.xml b/src/main/resources/mybatis/mapper/crdn/crndRegistAndView/crdnActInfo/CrdnActInfoMapper_maria.xml index a96e16d..1604b4b 100644 --- a/src/main/resources/mybatis/mapper/crdn/crndRegistAndView/crdnActInfo/CrdnActInfoMapper_maria.xml +++ b/src/main/resources/mybatis/mapper/crdn/crndRegistAndView/crdnActInfo/CrdnActInfoMapper_maria.xml @@ -455,7 +455,7 @@ #{crdnYr}, #{crdnNo}, #{actInfoId}, - #{actnYmd}, + replace(#{actnYmd},'-',''), #{actnArea}, #{actnRmrk}, NOW(), @@ -470,7 +470,7 @@ /* ActInfoMapper.updateActnInfo : 조치정보 수정 */ UPDATE tb_actn_info SET - ACTN_YMD = #{actnYmd}, + ACTN_YMD = replace(#{actnYmd},'-',''), ACTN_AREA = #{actnArea}, ACTN_RMRK = #{actnRmrk}, MDFCN_DT = NOW(), diff --git a/src/main/webapp/WEB-INF/views/crdn/crndRegistAndView/crdnActInfo/crdnActInfoRegistPopup.jsp b/src/main/webapp/WEB-INF/views/crdn/crndRegistAndView/crdnActInfo/crdnActInfoRegistPopup.jsp index c3925b7..fb36294 100644 --- a/src/main/webapp/WEB-INF/views/crdn/crndRegistAndView/crdnActInfo/crdnActInfoRegistPopup.jsp +++ b/src/main/webapp/WEB-INF/views/crdn/crndRegistAndView/crdnActInfo/crdnActInfoRegistPopup.jsp @@ -231,7 +231,7 @@ return; } - var url = '?mode=U' + + var url = '?mode=U' + '&actInfoId=' + encodeURIComponent(actInfoId) + '&crdnYr=' + encodeURIComponent(crdnYr) + '&pstnInfoId=' + encodeURIComponent(pstnInfoId) + diff --git a/src/main/webapp/WEB-INF/views/crdn/crndRegistAndView/crdnActInfo/crdnActnInfoManage.jsp b/src/main/webapp/WEB-INF/views/crdn/crndRegistAndView/crdnActInfo/crdnActnInfoRegistPopup.jsp similarity index 94% rename from src/main/webapp/WEB-INF/views/crdn/crndRegistAndView/crdnActInfo/crdnActnInfoManage.jsp rename to src/main/webapp/WEB-INF/views/crdn/crndRegistAndView/crdnActInfo/crdnActnInfoRegistPopup.jsp index 6ed7ba8..56ccb4b 100644 --- a/src/main/webapp/WEB-INF/views/crdn/crndRegistAndView/crdnActInfo/crdnActnInfoManage.jsp +++ b/src/main/webapp/WEB-INF/views/crdn/crndRegistAndView/crdnActInfo/crdnActnInfoRegistPopup.jsp @@ -34,10 +34,6 @@
  • 조치 정보
  • -
  • - - -
@@ -117,7 +113,7 @@
@@ -256,7 +252,7 @@ gridConfig.setOptGridHeight(150); gridConfig.setOptRowHeight(30); gridConfig.setOptUseClientSort(true); - gridConfig.setOptRowHeaderType('checkbox'); + gridConfig.setOptRowHeaderType(''); gridConfig.setOptColumns([ { @@ -276,10 +272,7 @@ width: 100, align: 'center', formatter: function(e) { - if (e.value && e.value.length === 8) { - return e.value.substring(0,4) + '-' + e.value.substring(4,6) + '-' + e.value.substring(6,8); - } - return e.value || '-'; + return e.value ? moment(e.value).format('YYYY-MM-DD') : ''; } }, { @@ -295,21 +288,12 @@ header: '조치비고', name: 'actnRmrk', minWidth: 200, - formatter: function(e) { - return e.value || '-'; - } }, { - header: '등록일시', - name: 'regDt', + header: '수정일시', + name: 'mdfcnDt', width: 130, align: 'center', - formatter: function(e) { - if (e.value) { - return e.value.substring(0, 16).replace('T', ' '); - } - return '-'; - } } ]); @@ -345,8 +329,8 @@ var allRows = self.grid.getData(); if (allRows && allRows.length > 0) { // 첫 번째 행 선택 - self.grid.focus(0, 'actnYmd', true); - self.loadActnInfoToForm(allRows[0]); + //self.grid.focus(0, 'actnYmd', true); + //self.loadActnInfoToForm(allRows[0]); } }); @@ -357,6 +341,7 @@ self.loadActnInfoToForm(rowData); } }); + }, /** @@ -375,7 +360,7 @@ $('#actnInfoId').val(rowData.actnInfoId || ''); // 조치 일자 설정 - $('#actnYmd').val(rowData.actnYmd || ''); + $('#actnYmd').val(moment(rowData.actnYmd).format('YYYY-MM-DD') || ''); // 조치 면적 설정 (소수점 2자리까지 표시) $('#actnArea').val(rowData.actnArea || ''); @@ -459,11 +444,16 @@ // FormData 생성 (파일 업로드를 위해) var formData = new FormData(); formData.append('mode', mode); - formData.append('actInfoId', actInfoId); // 부모 행위정보 ID - formData.append('actnInfoId', actnInfoId); - formData.append('actnYmd', $('#actnYmd').val().trim()); - formData.append('actnArea', $('#actnArea').val().trim()); - formData.append('actnRmrk', $('#actnRmrk').val().trim()); + // 폼의 모든 입력값을 FormData에 추가 + $('#actnInfoForm').find('input, select, textarea').each(function() { + var $this = $(this); + var name = $this.attr('name'); + var value = $this.val(); + + if (name && value && $this.attr('type') !== 'file') { + formData.append(name, value); + } + }); // 새로 선택한 조치사진 파일들 추가 if (this.actnSelectedFiles && this.actnSelectedFiles.length > 0) { @@ -488,7 +478,7 @@ // 그리드 새로고침 if (self.grid) { - self.grid.readData(1); + self.grid.readData(); } } else { @@ -534,7 +524,7 @@ // 그리드 새로고침 if (self.grid) { - self.grid.readData(1); + self.grid.readData(); } } else { @@ -551,6 +541,8 @@ * 조치정보 폼 초기화 (crdnActInfoRegistPopup.jsp의 clearActnForm 패턴) */ clearActnForm: function() { + var self = this; + $('#actnInfoId').val(''); $('#actnYmd').val(''); $('#actnArea').val(''); @@ -562,6 +554,8 @@ $('#actnPhotoFiles').val(''); this.actnSelectedFiles = []; + self.grid.readData(); + console.log('조치정보 폼 초기화 완료'); },