단속 > 단속 등록&열람: 소유자 정보 관리 기능 개선, 위치정보 연동 최적화, 불필요한 JSP 및 JavaScript 코드 삭제, UI 비활성화 스타일 추가

dev
박성영 4 months ago
parent c8985ee708
commit 20075ba35d

@ -157,20 +157,6 @@
</div>
</div>
<%-- 소유자 TUI GRID --%>
<div class="box_column" style="margin-top: 20px;">
<ul class="box_title">
<li class="tit">소유자 정보</li>
<li class="rig">
<button type="button" id="ownrSelectBtn" class="newbtn bg2-1">소유자 선택</button>
<button type="button" id="ownrRemoveBtn" class="newbtn bg2" style="margin-left: 5px;">제거</button>
</li>
</ul>
<div class="containers">
<div id="ownrInfoGrid"></div>
</div>
</div>
</div>
</div>
@ -322,71 +308,8 @@
$("#lotnoWholAddr").val(lotnoWholAddr);
}
// 중요로직: 소유자 정보 그리드 관리 객체
var ownrGrid = {
instance: null,
// 그리드 초기화
init: function() {
var gridConfig = new XitTuiGridConfig();
// 기본 설정
gridConfig.setOptGridId('ownrInfoGrid');
gridConfig.setOptGridHeight(200);
gridConfig.setOptRowHeight(30);
gridConfig.setOptRowHeaderType('checkbox');
gridConfig.setOptUseClientSort(true);
// 컬럼 설정
gridConfig.setOptColumns([
{ header: '소유자ID', name: 'ownrId', align: 'center', width: 100, hidden: true },
{ header: '성명', name: 'flnm', align: 'center', width: 120 },
{ header: '주민등록번호', name: 'rrno', align: 'center', width: 150 },
{ header: '소유자구분', name: 'ownrSeCd', align: 'center', width: 100 },
{ header: '전화번호', name: 'telno', align: 'center', width: 120 },
{ header: '이메일', name: 'eml', align: 'left', width: 180 },
{ header: '지번전체주소', name: 'lotnoWholAddr', align: 'left', width: 300 },
{ header: '도로명전체주소', name: 'roadNmWholAddr', align: 'left', width: 300 }
]);
this.instance = gridConfig.instance(tui.Grid);
tui.Grid.applyTheme('striped');
},
// 데이터 추가
addData: function(data) {
if (this.instance && data) {
this.instance.appendRow(data);
}
},
// 선택된 행 삭제
removeSelectedRows: function() {
if (this.instance) {
var checkedRows = this.instance.getCheckedRows();
if (checkedRows.length === 0) {
alert('삭제할 소유자를 선택해주세요.');
return;
}
if (confirm('선택된 ' + checkedRows.length + '건의 소유자 정보를 제거하시겠습니까?')) {
checkedRows.forEach(function(row) {
this.instance.removeRow(row.rowKey);
}, this);
}
}
},
// 모든 데이터 가져오기
getAllData: function() {
return this.instance ? this.instance.getData() : [];
}
};
$(document).ready(function() {
// 중요로직: 소유자 그리드 초기화
ownrGrid.init();
$('#saveBtn').on('click', savePstnInfo);
$('#closeBtn, #btnCloseTop').on('click', function(e){ e.preventDefault(); window.close(); });
@ -394,35 +317,7 @@
$('#dtlAddr').on('input keyup blur', function() {
updateWholeAddress();
});
// 중요로직: 소유자 선택 버튼 클릭 이벤트
$('#ownrSelectBtn').on('click', function() {
var crdnYr = '${crdnYr}';
var crdnNo = '${crdnNo}';
var url = '<c:url value="/crdn/crndRegistAndView/ownrSelect/popup.do"/>' +
'?crdnYr=' + encodeURIComponent(crdnYr) +
'&crdnNo=' + encodeURIComponent(crdnNo);
var w = 1000, h = 600;
var left = Math.max(0, (screen.width - w) / 2);
var top = Math.max(0, (screen.height - h) / 2);
window.open(url, 'ownrSelectPopup', 'width=' + w + ',height=' + h + ',left=' + left + ',top=' + top + ',resizable=yes,scrollbars=yes');
});
// 중요로직: 소유자 제거 버튼 클릭 이벤트
$('#ownrRemoveBtn').on('click', function() {
ownrGrid.removeSelectedRows();
});
});
// 중요로직: 소유자 선택 팝업에서 호출할 콜백 함수
window.onOwnrSelected = function(selectedOwnrs) {
if (selectedOwnrs && selectedOwnrs.length > 0) {
selectedOwnrs.forEach(function(ownr) {
ownrGrid.addData(ownr);
});
alert(selectedOwnrs.length + '건의 소유자 정보가 추가되었습니다.');
}
};
// 전역 함수로 노출하여 onclick에서 호출 가능하게 처리

@ -1,4 +1,5 @@
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<script type="text/javascript">
/**
@ -150,13 +151,90 @@
}
},
/**
* 중요로직: 소유자 선택 팝업 호출 기능
* 위치정보가 등록되어 있을 때만 활성화
*/
openOwnrSelectPopup: function() {
// 중요로직: 위치정보 등록 여부 확인
if (!this.checkPstnInfoExists()) {
alert('위치정보가 등록되어 있을 때만 소유자 선택이 가능합니다.');
return;
}
var crdnYr = $('#crdnYr').val();
var crdnNo = $('#crdnNo').val();
var url = '<c:url value="/crdn/crndRegistAndView/ownrSelect/popup.do"/>' +
'?crdnYr=' + encodeURIComponent(crdnYr) +
'&crdnNo=' + encodeURIComponent(crdnNo);
var w = 1000, h = 600;
var left = Math.max(0, (screen.width - w) / 2);
var top = Math.max(0, (screen.height - h) / 2);
window.open(url, 'ownrSelectPopup', 'width=' + w + ',height=' + h + ',left=' + left + ',top=' + top + ',resizable=yes,scrollbars=yes');
},
/**
* 중요로직: 선택된 소유자 정보 제거 기능
*/
removeSelectedOwnrs: function() {
if (this.grid.instance) {
var checkedRows = this.grid.instance.getCheckedRows();
if (checkedRows.length === 0) {
alert('삭제할 소유자를 선택해주세요.');
return;
}
if (confirm('선택된 ' + checkedRows.length + '건의 소유자 정보를 제거하시겠습니까?')) {
var self = this;
checkedRows.forEach(function(row) {
self.grid.instance.removeRow(row.rowKey);
});
}
}
},
/**
* 중요로직: 위치정보 존재 여부 확인 함수
* 위치정보 그리드에 데이터가 있는지 확인
*/
checkPstnInfoExists: function() {
// detailView의 위치정보 그리드에서 데이터 존재 여부 확인
if (window.CrdnDetailViewPstn && window.CrdnDetailViewPstn.grid && window.CrdnDetailViewPstn.grid.instance) {
var pstnData = window.CrdnDetailViewPstn.grid.instance.getData();
return pstnData && pstnData.length > 0;
}
return false;
},
/**
* 중요로직: 소유자 데이터 추가 기능
* 소유자 선택 팝업에서 호출됨
*/
addOwnrData: function(ownrData) {
if (this.grid.instance && ownrData) {
this.grid.instance.appendRow(ownrData);
}
},
/**
* 모듈 초기화
*/
init: function() {
var self = this;
// 그리드 생성
this.grid.create();
// 중요로직: 소유자 선택 버튼 클릭 이벤트
$('#ownrSelectBtn').on('click', function() {
self.openOwnrSelectPopup();
});
// 중요로직: 소유자 제거 버튼 클릭 이벤트
$('#ownrRemoveBtn').on('click', function() {
self.removeSelectedOwnrs();
});
// 메인 모듈에 자신을 등록
if (window.CrdnDetailView) {
window.CrdnDetailView.registerGrid('ownrInfo', this);
@ -177,5 +255,17 @@
// 전역 네임스페이스에 모듈 노출
window.CrdnDetailViewOwnrInfo = CrdnDetailViewOwnrInfo;
// 중요로직: 소유자 선택 팝업에서 호출할 전역 콜백 함수
window.onOwnrSelected = function(selectedOwnrs) {
if (selectedOwnrs && selectedOwnrs.length > 0 && CrdnDetailViewOwnrInfo.grid.instance) {
selectedOwnrs.forEach(function(ownr) {
CrdnDetailViewOwnrInfo.addOwnrData(ownr);
});
alert(selectedOwnrs.length + '건의 소유자 정보가 추가되었습니다.');
// 그리드 새로고침
CrdnDetailViewOwnrInfo.search();
}
};
})(window, jQuery);
</script>

@ -147,12 +147,10 @@
// 데이터가 1건 이상 있을 경우 버튼 비활성화
$pstnInfoRegistBtn.prop('disabled', true);
$pstnInfoRegistBtn.addClass('disabled');
$pstnInfoRegistBtn.hide();
} else {
// 데이터가 0건일 경우 버튼 활성화
$pstnInfoRegistBtn.prop('disabled', false);
$pstnInfoRegistBtn.removeClass('disabled');
$pstnInfoRegistBtn.show();
}
});

@ -118,6 +118,10 @@
<div class="box_column">
<ul class="box_title">
<li class="tit">소유자 정보</li>
<li class="rig">
<button type="button" id="ownrSelectBtn" class="newbtn bg2-1">소유자 선택</button>
<button type="button" id="ownrRemoveBtn" class="newbtn bg2" style="margin-left: 5px;">제거</button>
</li>
</ul>
<div class="containers">
<div id="ownrInfo"></div>
@ -383,7 +387,7 @@
return;
}
var url = '<c:url value="/crdn/crndRegistAndView/crdnPstnInfo/popup.do"/>' + '?crdnYr=' + encodeURIComponent(crdnYr) + '&crdnNo=' + encodeURIComponent(crdnNo) + '&mode=C';
var w = 1200, h = 800;
var w = 1200, h = 500;
var left = Math.max(0, (screen.width - w) / 2);
var top = Math.max(0, (screen.height - h) / 2);
window.open(url, 'pstnInfoPopup', 'width=' + w + ',height=' + h + ',left=' + left + ',top=' + top + ',resizable=yes,scrollbars=yes');

@ -25,9 +25,9 @@
<td>
<input type="text" id="searchRrno" name="searchRrno" class="input" maxlength="100" placeholder="주민등록번호를 입력하세요"/>
</td>
<th class="th">전화번호</th>
<td>
<input type="text" id="searchTelno" name="searchTelno" class="input" maxlength="11" placeholder="전화번호를 입력하세요"/>
<td style="text-align: right; border: 0px;">
<button type="button" id="searchBtn" class="newbtn bg1">검색</button>
<button type="button" id="resetBtn" class="newbtn bg5" style="margin-left: 5px;">초기화</button>
</td>
</tr>
<tr>
@ -35,10 +35,11 @@
<td>
<input type="text" id="searchEml" name="searchEml" class="input" maxlength="50" placeholder="이메일을 입력하세요"/>
</td>
<td colspan="4" style="text-align: right;">
<button type="button" id="searchBtn" class="newbtn bg1">검색</button>
<button type="button" id="resetBtn" class="newbtn bg5" style="margin-left: 5px;">초기화</button>
<th class="th">전화번호</th>
<td>
<input type="text" id="searchTelno" name="searchTelno" class="input" maxlength="11" placeholder="전화번호를 입력하세요"/>
</td>
<td style="text-align: right; border: 0px;"></td>
</tr>
</table>
</form>

@ -206,17 +206,31 @@ ol {
.newbtn.bg1,
.newbtns.bg1,
.newbtnss.bg1 {
background-color: #202342;
color: #fff;
border-color: #202342;
background-color: #202342;
color: #fff;
border-color: #202342;
}
.newbtn.bg1:disabled,
.newbtns.bg1:disabled,
.newbtnss.bg1:disabled {
opacity: 0.5;
cursor: not-allowed;
}
.newbtn.bg2,
.newbtns.bg2,
.newbtnss.bg2 {
background-color: #6c757d;
color: #fff;
border-color: #6c757d;
background-color: #6c757d;
color: #fff;
border-color: #6c757d;
}
.newbtn.bg2:disabled,
.newbtns.bg2:disabled,
.newbtnss.bg2:disabled {
opacity: 0.5;
cursor: not-allowed;
}
.newbtn.bg2-1,
@ -227,20 +241,41 @@ ol {
border-color: #484e54;
}
.newbtn.bg2-1:disabled,
.newbtns.bg2-1:disabled,
.newbtnss.bg2-1:disabled {
opacity: 0.5;
cursor: not-allowed;
}
.newbtn.bg3,
.newbtns.bg3,
.newbtnss.bg3 {
background-color: #28a745;
color: #fff;
border-color: #28a745;
background-color: #28a745;
color: #fff;
border-color: #28a745;
}
.newbtn.bg3:disabled,
.newbtns.bg3:disabled,
.newbtnss.bg3:disabled {
opacity: 0.5;
cursor: not-allowed;
}
.newbtn.bg4,
.newbtns.bg4,
.newbtnss.bg4 {
background-color: #007bff;
color: #fff;
border-color: #007bff;
background-color: #007bff;
color: #fff;
border-color: #007bff;
}
.newbtn.bg4:disabled,
.newbtns.bg4:disabled,
.newbtnss.bg4:disabled {
opacity: 0.5;
cursor: not-allowed;
}
.newbtn.bg5,
@ -251,6 +286,13 @@ ol {
border: 1px solid #202342 !important;
}
.newbtn.bg5:disabled,
.newbtns.bg5:disabled,
.newbtnss.bg5:disabled {
opacity: 0.5;
cursor: not-allowed;
}
.smallb {
padding: 5px 10px;
font-size: 13px;

Loading…
Cancel
Save