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