parent
56305d5222
commit
f95a57b28a
@ -0,0 +1,281 @@
|
|||||||
|
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
|
||||||
|
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
|
||||||
|
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
|
||||||
|
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
|
||||||
|
<%@ taglib prefix="dateUtil" uri="http://egovframework.go.kr/functions/date-util" %>
|
||||||
|
|
||||||
|
<div class="popup_wrap">
|
||||||
|
<div class="popup_inner">
|
||||||
|
<div class="popup_tit">
|
||||||
|
<h2 class="tit">재부과 등록</h2>
|
||||||
|
<a href="#" class="pop-x-btn modalclose"></a>
|
||||||
|
</div>
|
||||||
|
<div class="popup_con">
|
||||||
|
<div class="forms_table_non">
|
||||||
|
<form id="relevyForm" name="relevyForm">
|
||||||
|
<input type="hidden" id="mode" name="mode" value="C" />
|
||||||
|
<input type="hidden" id="crdnListJson" name="crdnListJson" value="" />
|
||||||
|
<table>
|
||||||
|
<colgroup>
|
||||||
|
<col style="width: 20%;" />
|
||||||
|
<col style="width: 30%;" />
|
||||||
|
<col style="width: 20%;" />
|
||||||
|
<col style="width: 30%;" />
|
||||||
|
</colgroup>
|
||||||
|
<tr>
|
||||||
|
<th class="th">단속 년도</th>
|
||||||
|
<td id="firstCrdnYr"></td>
|
||||||
|
<th class="th">단속 번호</th>
|
||||||
|
<td id="firstCrdnNo"></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th class="th">지역구분</th>
|
||||||
|
<td id="firstRgnSeCdNm"></td>
|
||||||
|
<th class="th">법정동</th>
|
||||||
|
<td id="firstStdgEmdCdNm"></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th class="th">적발방법</th>
|
||||||
|
<td id="firstDsclMthdCdNm"></td>
|
||||||
|
<th class="th">적발일자</th>
|
||||||
|
<td id="firstDsclYmd"></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th class="th">조사원</th>
|
||||||
|
<td id="firstExmnr"></td>
|
||||||
|
<th class="th">현재 진행단계</th>
|
||||||
|
<td id="firstCrdnPrcsSttsCdNm"></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th class="th">위치</th>
|
||||||
|
<td colspan="3" id="firstLotnoWholAddr"></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th class="th"><span class="required">*</span> 재부과 사유</th>
|
||||||
|
<td colspan="3">
|
||||||
|
<textarea id="relevyRsn" name="relevyRsn" class="textarea" style="width: 100%; height: 80px;" rows="3" placeholder="재부과 사유를 입력해주세요." validation-check="required" maxlength="1000"></textarea>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<!-- 추가 선택 건수 표시 영역 -->
|
||||||
|
<div id="additionalInfoArea" style="display: none; margin-top: 15px; padding: 10px; background-color: #f9f9f9; border: 1px solid #ddd; border-radius: 4px;">
|
||||||
|
<p style="margin: 0; font-size: 14px; color: #333;">
|
||||||
|
<strong>그 외 재부과 대상:</strong> <span id="additionalCount" style="color: #007bff; font-weight: bold;"></span>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- 팝업 버튼 -->
|
||||||
|
<div class="popup_foot">
|
||||||
|
<a href="#" id="btnSave" class="newbtns bg1">저장</a>
|
||||||
|
<a href="#" class="newbtns bg2 modalclose">닫기</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
(function(window, $) {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
var BatchRelevyPopup = {
|
||||||
|
/**
|
||||||
|
* 재부과 대상 목록
|
||||||
|
*/
|
||||||
|
crdnList: [],
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 첫 번째 단속 정보
|
||||||
|
*/
|
||||||
|
firstCrdnInfo: null,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* URL에서 파라미터 파싱
|
||||||
|
*/
|
||||||
|
parseUrlParams: function() {
|
||||||
|
var self = this;
|
||||||
|
var urlParams = new URLSearchParams(window.location.search);
|
||||||
|
var crdnListParam = urlParams.get('crdnList');
|
||||||
|
|
||||||
|
if (crdnListParam) {
|
||||||
|
try {
|
||||||
|
self.crdnList = JSON.parse(decodeURIComponent(crdnListParam));
|
||||||
|
$('#crdnListJson').val(JSON.stringify(self.crdnList));
|
||||||
|
} catch (e) {
|
||||||
|
console.error('crdnList 파싱 오류:', e);
|
||||||
|
alert('재부과 대상 정보 파싱에 실패했습니다.');
|
||||||
|
window.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!self.crdnList || self.crdnList.length === 0) {
|
||||||
|
alert('재부과 대상 정보가 없습니다.');
|
||||||
|
window.close();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 첫 번째 단속 정보 조회
|
||||||
|
*/
|
||||||
|
loadFirstCrdnInfo: function() {
|
||||||
|
var self = this;
|
||||||
|
var firstCrdn = self.crdnList[0];
|
||||||
|
|
||||||
|
$.ajax({
|
||||||
|
url: '<c:url value="/levy/levyRelevy/selectCrdnInfo.ajax"/>',
|
||||||
|
type: 'GET',
|
||||||
|
data: {
|
||||||
|
crdnYr: firstCrdn.crdnYr,
|
||||||
|
crdnNo: firstCrdn.crdnNo
|
||||||
|
},
|
||||||
|
success: function(response) {
|
||||||
|
if (response && response.success && response.data) {
|
||||||
|
self.firstCrdnInfo = response.data;
|
||||||
|
self.displayFirstCrdnInfo();
|
||||||
|
self.displayAdditionalInfo();
|
||||||
|
} else {
|
||||||
|
alert('첫 번째 단속 정보 조회에 실패했습니다.');
|
||||||
|
window.close();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error: function(xhr, status, error) {
|
||||||
|
console.error('첫 번째 단속 정보 조회 실패:', error);
|
||||||
|
alert('첫 번째 단속 정보 조회 중 오류가 발생했습니다.');
|
||||||
|
window.close();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 첫 번째 단속 정보 화면 표시
|
||||||
|
*/
|
||||||
|
displayFirstCrdnInfo: function() {
|
||||||
|
var data = this.firstCrdnInfo;
|
||||||
|
$("#firstCrdnYr").text(data.crdnYr || '');
|
||||||
|
$("#firstCrdnNo").text(data.crdnNo || '');
|
||||||
|
$("#firstRgnSeCdNm").text(data.rgnSeCdNm || '');
|
||||||
|
$("#firstStdgEmdCdNm").text(data.stdgEmdCdNm || '');
|
||||||
|
$("#firstLotnoWholAddr").text((data.zip ? '(' + data.zip + ') ' : '') + (data.lotnoWholAddr || ''));
|
||||||
|
$("#firstDsclMthdCdNm").text(data.dsclMthdCdNm || '');
|
||||||
|
$("#firstDsclYmd").text(data.dsclYmd ? moment(data.dsclYmd).format('YYYY-MM-DD') : '');
|
||||||
|
$("#firstExmnr").text(data.exmnr || '');
|
||||||
|
$("#firstCrdnPrcsSttsCdNm").text(data.crdnPrcsSttsCdNm || '');
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 추가 선택 건수 표시
|
||||||
|
*/
|
||||||
|
displayAdditionalInfo: function() {
|
||||||
|
var additionalCount = this.crdnList.length - 1;
|
||||||
|
if (additionalCount > 0) {
|
||||||
|
$("#additionalCount").text(additionalCount + '건');
|
||||||
|
$("#additionalInfoArea").show();
|
||||||
|
} else {
|
||||||
|
$("#additionalInfoArea").hide();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 재부과 저장
|
||||||
|
*/
|
||||||
|
saveRelevy: function() {
|
||||||
|
var self = this;
|
||||||
|
if (!self.validate()) return;
|
||||||
|
|
||||||
|
var totalCount = self.crdnList.length;
|
||||||
|
var confirmMsg = totalCount > 1 ?
|
||||||
|
'재부과를 등록하시겠습니까?\n\n선택된 ' + totalCount + '건의 단속 정보를 복사하여 새로운 단속 건으로 등록됩니다.' :
|
||||||
|
'재부과를 등록하시겠습니까?\n\n원본 단속 정보를 복사하여 새로운 단속 건으로 등록됩니다.';
|
||||||
|
|
||||||
|
if (!confirm(confirmMsg)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var formData = $("#relevyForm").serialize();
|
||||||
|
|
||||||
|
$.ajax({
|
||||||
|
url: '<c:url value="/levy/levyRelevy/saveBatchRelevy.ajax"/>',
|
||||||
|
type: 'POST',
|
||||||
|
data: formData,
|
||||||
|
success: function(response) {
|
||||||
|
if (response && response.success) {
|
||||||
|
var resultMsg = '재부과가 성공적으로 등록되었습니다.';
|
||||||
|
if (response.data && response.data.length > 0) {
|
||||||
|
resultMsg += '\n\n생성된 단속번호:';
|
||||||
|
response.data.forEach(function(item, index) {
|
||||||
|
resultMsg += '\n' + (index + 1) + '. ' + item.crdnYr + '-' + item.crdnNo;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
alert(resultMsg);
|
||||||
|
|
||||||
|
// 부모 창의 목록 새로고침
|
||||||
|
if (window.opener && window.opener.LevyRelevyList) {
|
||||||
|
window.opener.LevyRelevyList.refreshList();
|
||||||
|
}
|
||||||
|
|
||||||
|
// 팝업 닫기
|
||||||
|
window.close();
|
||||||
|
} else {
|
||||||
|
alert(response.message || '재부과 등록에 실패했습니다.');
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error: function(xhr, status, error) {
|
||||||
|
console.error('재부과 등록 실패:', error);
|
||||||
|
alert('재부과 등록 중 오류가 발생했습니다.');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
validate: function() {
|
||||||
|
var isValid = validateFormByAttributes('relevyForm');
|
||||||
|
if (isValid) {
|
||||||
|
// 재부과 사유 글자수 검증 (varchar(1000) 제한)
|
||||||
|
var relevyRsn = $.trim($('#relevyRsn').val());
|
||||||
|
if (relevyRsn && relevyRsn.length > 1000) {
|
||||||
|
var relevyRsnElement = document.getElementById('relevyRsn');
|
||||||
|
errorElementCreate(relevyRsnElement, '재부과 사유는 1000자 이내로 입력하세요. (현재: ' + relevyRsn.length + '자)', false);
|
||||||
|
$('#relevyRsn').focus();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return isValid;
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 이벤트 바인딩
|
||||||
|
*/
|
||||||
|
bindEvents: function() {
|
||||||
|
var self = this;
|
||||||
|
|
||||||
|
// 저장 버튼 클릭
|
||||||
|
$("#btnSave").on('click', function(e) {
|
||||||
|
e.preventDefault();
|
||||||
|
self.saveRelevy();
|
||||||
|
});
|
||||||
|
|
||||||
|
// 팝업 닫기
|
||||||
|
$(".modalclose").on('click', function(e) {
|
||||||
|
e.preventDefault();
|
||||||
|
window.close();
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 초기화
|
||||||
|
*/
|
||||||
|
init: function() {
|
||||||
|
this.parseUrlParams();
|
||||||
|
this.bindEvents();
|
||||||
|
this.loadFirstCrdnInfo();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// DOM 준비 완료 시 초기화
|
||||||
|
$(document).ready(function() {
|
||||||
|
BatchRelevyPopup.init();
|
||||||
|
});
|
||||||
|
|
||||||
|
})(window, jQuery);
|
||||||
|
</script>
|
||||||
Loading…
Reference in New Issue