단속 > 단속 등록&열람: 상세 템플릿 html 구성 진행중...
parent
2c005e87bb
commit
49dab9de8a
@ -0,0 +1,213 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
|
||||
|
||||
<script type="text/javascript">
|
||||
/**
|
||||
* 단속자료 위치정보 그리드 모듈 (Grid1)
|
||||
* 단속 데이터의 위치 관련 정보를 표시합니다.
|
||||
*/
|
||||
(function(window, $) {
|
||||
'use strict';
|
||||
|
||||
/**
|
||||
* Grid1 (단속자료 위치정보) 관리 네임스페이스
|
||||
*/
|
||||
var CrdnDetailViewGrid1 = {
|
||||
/**
|
||||
* 그리드 관련 객체
|
||||
*/
|
||||
grid: {
|
||||
/**
|
||||
* 그리드 인스턴스
|
||||
*/
|
||||
instance: null,
|
||||
|
||||
/**
|
||||
* 그리드 설정 초기화
|
||||
* @returns {Object} 그리드 설정 객체
|
||||
*/
|
||||
initConfig: function() {
|
||||
// 데이터 소스 설정
|
||||
var dataSource = this.createDataSource();
|
||||
|
||||
// 그리드 설정 객체 생성
|
||||
var gridConfig = new XitTuiGridConfig();
|
||||
|
||||
// 기본 설정
|
||||
gridConfig.setOptDataSource(dataSource); // 데이터소스 연결
|
||||
gridConfig.setOptGridId('grid1'); // 그리드를 출력할 Element ID
|
||||
gridConfig.setOptGridHeight(200); // 그리드 높이(단위: px)
|
||||
gridConfig.setOptRowHeight(30); // 그리드 행 높이(단위: px)
|
||||
gridConfig.setOptRowHeaderType('rowNum'); // 행 첫번째 셀 타입(rowNum: 순번)
|
||||
gridConfig.setOptUseClientSort(true); // 클라이언트 사이드 정렬
|
||||
|
||||
gridConfig.setOptRowHeaderType('checkbox');
|
||||
gridConfig.setOptColumns(this.getGridColumns());
|
||||
|
||||
return gridConfig;
|
||||
},
|
||||
|
||||
/**
|
||||
* 그리드 컬럼 정의
|
||||
* @returns {Array} 그리드 컬럼 배열
|
||||
*/
|
||||
getGridColumns: function() {
|
||||
return [
|
||||
{
|
||||
header: '단속년도',
|
||||
name: 'crdnYr',
|
||||
align: 'center',
|
||||
width: 80,
|
||||
sortable: true
|
||||
},
|
||||
{
|
||||
header: '단속번호',
|
||||
name: 'crdnNo',
|
||||
align: 'center',
|
||||
width: 90,
|
||||
sortable: true
|
||||
},
|
||||
{
|
||||
header: '지역구분',
|
||||
name: 'rgnSeCdNm',
|
||||
align: 'center',
|
||||
width: 100
|
||||
},
|
||||
{
|
||||
header: '소재지',
|
||||
name: 'lctnAddr',
|
||||
align: 'left',
|
||||
width: 200
|
||||
},
|
||||
{
|
||||
header: '지번',
|
||||
name: 'lotNoAddr',
|
||||
align: 'left',
|
||||
width: 150
|
||||
},
|
||||
{
|
||||
header: '도로명주소',
|
||||
name: 'roadNmAddr',
|
||||
align: 'left',
|
||||
width: 200
|
||||
},
|
||||
{
|
||||
header: '상세주소',
|
||||
name: 'dtlAddr',
|
||||
align: 'left',
|
||||
width: 150
|
||||
}
|
||||
];
|
||||
},
|
||||
|
||||
/**
|
||||
* 데이터 소스 생성
|
||||
* @returns {Object} 데이터 소스 설정 객체
|
||||
*/
|
||||
createDataSource: function() {
|
||||
return {
|
||||
api: {
|
||||
readData: {
|
||||
url: '<c:url value="/crdn/crndRegistAndView/list.ajax"/>',
|
||||
method: 'POST',
|
||||
contentType: 'application/x-www-form-urlencoded',
|
||||
processData: true
|
||||
}
|
||||
},
|
||||
initialRequest: true, // 초기 데이터 요청 여부
|
||||
serializer: function(params) {
|
||||
// 기본 파라미터 (페이지 정보 등)
|
||||
var defaultParams = $.param(params);
|
||||
// 검색 조건 가져오기
|
||||
var searchCond = window.CrdnDetailView ? window.CrdnDetailView.getSearchCondition() : {};
|
||||
var searchParams = $.param(searchCond);
|
||||
// 모든 파라미터 조합
|
||||
return defaultParams + '&' + searchParams;
|
||||
}
|
||||
};
|
||||
},
|
||||
|
||||
/**
|
||||
* 그리드 인스턴스 생성
|
||||
*/
|
||||
create: function() {
|
||||
var gridConfig = this.initConfig();
|
||||
var Grid = tui.Grid;
|
||||
this.instance = gridConfig.instance(Grid);
|
||||
|
||||
// 그리드 테마 설정
|
||||
Grid.applyTheme('striped');
|
||||
|
||||
this.gridBindEvents();
|
||||
},
|
||||
|
||||
/**
|
||||
* 그리드 이벤트 바인딩
|
||||
*/
|
||||
gridBindEvents: function() {
|
||||
var self = this;
|
||||
|
||||
// 데이터 로딩 완료 이벤트
|
||||
this.instance.on('successResponse', function(ev) {
|
||||
|
||||
});
|
||||
|
||||
// 행 클릭 이벤트
|
||||
this.instance.on('click', function(ev) {
|
||||
if (ev.rowKey !== undefined && ev.rowKey !== null) {
|
||||
var rowData = self.instance.getRow(ev.rowKey);
|
||||
console.log('Grid1 행 클릭:', rowData);
|
||||
}
|
||||
});
|
||||
|
||||
// 행 더블클릭 이벤트
|
||||
this.instance.on('dblclick', function(ev) {
|
||||
var rowKey = ev.rowKey;
|
||||
var rowData = self.instance.getRow(rowKey);
|
||||
if (rowData) {
|
||||
console.log('Grid1 행 더블클릭:', rowData);
|
||||
// 상세 정보 표시 또는 추가 동작 구현 가능
|
||||
}
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* 검색 함수
|
||||
* 메인 모듈에서 호출됨
|
||||
*/
|
||||
search: function() {
|
||||
if (this.grid.instance) {
|
||||
this.grid.instance.readData();
|
||||
console.log('Grid1 검색 실행');
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* 모듈 초기화
|
||||
*/
|
||||
init: function() {
|
||||
// 그리드 생성
|
||||
this.grid.create();
|
||||
|
||||
// 메인 모듈에 자신을 등록
|
||||
if (window.CrdnDetailView) {
|
||||
window.CrdnDetailView.registerGrid('grid1', this);
|
||||
}
|
||||
|
||||
console.log('Grid1 (단속자료 위치정보) 모듈이 초기화되었습니다.');
|
||||
}
|
||||
};
|
||||
|
||||
// DOM 준비 완료 시 초기화
|
||||
$(document).ready(function() {
|
||||
// 메인 모듈이 로드될 때까지 약간의 지연
|
||||
setTimeout(function() {
|
||||
CrdnDetailViewGrid1.init();
|
||||
}, 100);
|
||||
});
|
||||
|
||||
// 전역 네임스페이스에 모듈 노출
|
||||
window.CrdnDetailViewGrid1 = CrdnDetailViewGrid1;
|
||||
|
||||
})(window, jQuery);
|
||||
</script>
|
||||
@ -0,0 +1,235 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
|
||||
|
||||
<script type="text/javascript">
|
||||
/**
|
||||
* 소유자 정보 그리드 모듈 (Grid2)
|
||||
* 단속 데이터의 소유자 관련 정보를 표시합니다.
|
||||
*/
|
||||
(function(window, $) {
|
||||
'use strict';
|
||||
|
||||
/**
|
||||
* Grid2 (소유자 정보) 관리 네임스페이스
|
||||
*/
|
||||
var CrdnDetailViewGrid2 = {
|
||||
/**
|
||||
* 그리드 관련 객체
|
||||
*/
|
||||
grid: {
|
||||
/**
|
||||
* 그리드 인스턴스
|
||||
*/
|
||||
instance: null,
|
||||
|
||||
/**
|
||||
* 그리드 설정 초기화
|
||||
* @returns {Object} 그리드 설정 객체
|
||||
*/
|
||||
initConfig: function() {
|
||||
// 데이터 소스 설정
|
||||
var dataSource = this.createDataSource();
|
||||
|
||||
// 그리드 설정 객체 생성
|
||||
var gridConfig = new XitTuiGridConfig();
|
||||
|
||||
// 기본 설정
|
||||
gridConfig.setOptDataSource(dataSource); // 데이터소스 연결
|
||||
gridConfig.setOptGridId('grid2'); // 그리드를 출력할 Element ID
|
||||
gridConfig.setOptGridHeight(200); // 그리드 높이(단위: px)
|
||||
gridConfig.setOptRowHeight(30); // 그리드 행 높이(단위: px)
|
||||
gridConfig.setOptRowHeaderType('rowNum'); // 행 첫번째 셀 타입(rowNum: 순번)
|
||||
gridConfig.setOptUseClientSort(true); // 클라이언트 사이드 정렬
|
||||
|
||||
gridConfig.setOptRowHeaderType('checkbox');
|
||||
gridConfig.setOptColumns(this.getGridColumns());
|
||||
|
||||
return gridConfig;
|
||||
},
|
||||
|
||||
/**
|
||||
* 그리드 컬럼 정의
|
||||
* @returns {Array} 그리드 컬럼 배열
|
||||
*/
|
||||
getGridColumns: function() {
|
||||
return [
|
||||
{
|
||||
header: '단속년도',
|
||||
name: 'crdnYr',
|
||||
align: 'center',
|
||||
width: 80,
|
||||
sortable: true
|
||||
},
|
||||
{
|
||||
header: '단속번호',
|
||||
name: 'crdnNo',
|
||||
align: 'center',
|
||||
width: 90,
|
||||
sortable: true
|
||||
},
|
||||
{
|
||||
header: '부과금액',
|
||||
name: 'levyAmt',
|
||||
align: 'right',
|
||||
width: 100,
|
||||
formatter: function(e) {
|
||||
// 숫자 천단위 콤마 표시
|
||||
return e.value ? Number(e.value).toLocaleString() + '원' : '0원';
|
||||
}
|
||||
},
|
||||
{
|
||||
header: '감경금액',
|
||||
name: 'rdctnAmt',
|
||||
align: 'right',
|
||||
width: 100,
|
||||
formatter: function(e) {
|
||||
return e.value ? Number(e.value).toLocaleString() + '원' : '0원';
|
||||
}
|
||||
},
|
||||
{
|
||||
header: '납부금액',
|
||||
name: 'payAmt',
|
||||
align: 'right',
|
||||
width: 100,
|
||||
formatter: function(e) {
|
||||
return e.value ? Number(e.value).toLocaleString() + '원' : '0원';
|
||||
}
|
||||
},
|
||||
{
|
||||
header: '납부일자',
|
||||
name: 'payYmd',
|
||||
align: 'center',
|
||||
width: 100,
|
||||
formatter: function (e) {
|
||||
return e.value ? moment(e.value).format('YYYY-MM-DD') : '';
|
||||
}
|
||||
},
|
||||
{
|
||||
header: '부과일자',
|
||||
name: 'levyYmd',
|
||||
align: 'center',
|
||||
width: 100,
|
||||
formatter: function (e) {
|
||||
return e.value ? moment(e.value).format('YYYY-MM-DD') : '';
|
||||
}
|
||||
},
|
||||
{
|
||||
header: '진행단계',
|
||||
name: 'crdnPrcsSttsCdNm',
|
||||
align: 'center',
|
||||
width: 100
|
||||
}
|
||||
];
|
||||
},
|
||||
|
||||
/**
|
||||
* 데이터 소스 생성
|
||||
* @returns {Object} 데이터 소스 설정 객체
|
||||
*/
|
||||
createDataSource: function() {
|
||||
return {
|
||||
api: {
|
||||
readData: {
|
||||
url: '<c:url value="/crdn/crndRegistAndView/list.ajax"/>',
|
||||
method: 'POST',
|
||||
contentType: 'application/x-www-form-urlencoded',
|
||||
processData: true
|
||||
}
|
||||
},
|
||||
initialRequest: true, // 초기 데이터 요청 여부
|
||||
serializer: function(params) {
|
||||
// 기본 파라미터 (페이지 정보 등)
|
||||
var defaultParams = $.param(params);
|
||||
// 검색 조건 가져오기
|
||||
var searchCond = window.CrdnDetailView ? window.CrdnDetailView.getSearchCondition() : {};
|
||||
var searchParams = $.param(searchCond);
|
||||
// 모든 파라미터 조합
|
||||
return defaultParams + '&' + searchParams;
|
||||
}
|
||||
};
|
||||
},
|
||||
|
||||
/**
|
||||
* 그리드 인스턴스 생성
|
||||
*/
|
||||
create: function() {
|
||||
var gridConfig = this.initConfig();
|
||||
var Grid = tui.Grid;
|
||||
this.instance = gridConfig.instance(Grid);
|
||||
|
||||
// 그리드 테마 설정
|
||||
Grid.applyTheme('striped');
|
||||
|
||||
this.gridBindEvents();
|
||||
},
|
||||
|
||||
/**
|
||||
* 그리드 이벤트 바인딩
|
||||
*/
|
||||
gridBindEvents: function() {
|
||||
var self = this;
|
||||
|
||||
// 데이터 로딩 완료 이벤트
|
||||
this.instance.on('successResponse', function(ev) {
|
||||
|
||||
});
|
||||
|
||||
// 행 클릭 이벤트
|
||||
this.instance.on('click', function(ev) {
|
||||
if (ev.rowKey !== undefined && ev.rowKey !== null) {
|
||||
var rowData = self.instance.getRow(ev.rowKey);
|
||||
console.log('Grid2 행 클릭:', rowData);
|
||||
}
|
||||
});
|
||||
|
||||
// 행 더블클릭 이벤트
|
||||
this.instance.on('dblclick', function(ev) {
|
||||
var rowKey = ev.rowKey;
|
||||
var rowData = self.instance.getRow(rowKey);
|
||||
if (rowData) {
|
||||
console.log('Grid2 행 더블클릭:', rowData);
|
||||
// 소유자 상세 정보 모달 또는 추가 동작 구현 가능
|
||||
}
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* 검색 함수
|
||||
* 메인 모듈에서 호출됨
|
||||
*/
|
||||
search: function() {
|
||||
if (this.grid.instance) {
|
||||
this.grid.instance.readData();
|
||||
console.log('Grid2 검색 실행');
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* 모듈 초기화
|
||||
*/
|
||||
init: function() {
|
||||
// 그리드 생성
|
||||
this.grid.create();
|
||||
|
||||
// 메인 모듈에 자신을 등록
|
||||
if (window.CrdnDetailView) {
|
||||
window.CrdnDetailView.registerGrid('grid2', this);
|
||||
}
|
||||
|
||||
console.log('Grid2 (소유자 정보) 모듈이 초기화되었습니다.');
|
||||
}
|
||||
};
|
||||
|
||||
// DOM 준비 완료 시 초기화
|
||||
$(document).ready(function() {
|
||||
// 메인 모듈이 로드될 때까지 약간의 지연
|
||||
setTimeout(function() {
|
||||
CrdnDetailViewGrid2.init();
|
||||
}, 150);
|
||||
});
|
||||
|
||||
// 전역 네임스페이스에 모듈 노출
|
||||
window.CrdnDetailViewGrid2 = CrdnDetailViewGrid2;
|
||||
|
||||
})(window, jQuery);
|
||||
</script>
|
||||
@ -0,0 +1,235 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
|
||||
|
||||
<script type="text/javascript">
|
||||
/**
|
||||
* 행위자정보 그리드 모듈 (Grid3)
|
||||
* 단속 데이터의 행위자 관련 정보를 표시합니다.
|
||||
*/
|
||||
(function(window, $) {
|
||||
'use strict';
|
||||
|
||||
/**
|
||||
* Grid3 (행위자정보) 관리 네임스페이스
|
||||
*/
|
||||
var CrdnDetailViewGrid3 = {
|
||||
/**
|
||||
* 그리드 관련 객체
|
||||
*/
|
||||
grid: {
|
||||
/**
|
||||
* 그리드 인스턴스
|
||||
*/
|
||||
instance: null,
|
||||
|
||||
/**
|
||||
* 그리드 설정 초기화
|
||||
* @returns {Object} 그리드 설정 객체
|
||||
*/
|
||||
initConfig: function() {
|
||||
// 데이터 소스 설정
|
||||
var dataSource = this.createDataSource();
|
||||
|
||||
// 그리드 설정 객체 생성
|
||||
var gridConfig = new XitTuiGridConfig();
|
||||
|
||||
// 기본 설정
|
||||
gridConfig.setOptDataSource(dataSource); // 데이터소스 연결
|
||||
gridConfig.setOptGridId('grid3'); // 그리드를 출력할 Element ID
|
||||
gridConfig.setOptGridHeight(200); // 그리드 높이(단위: px)
|
||||
gridConfig.setOptRowHeight(30); // 그리드 행 높이(단위: px)
|
||||
gridConfig.setOptRowHeaderType('rowNum'); // 행 첫번째 셀 타입(rowNum: 순번)
|
||||
gridConfig.setOptUseClientSort(true); // 클라이언트 사이드 정렬
|
||||
|
||||
gridConfig.setOptRowHeaderType('checkbox');
|
||||
gridConfig.setOptColumns(this.getGridColumns());
|
||||
|
||||
return gridConfig;
|
||||
},
|
||||
|
||||
/**
|
||||
* 그리드 컬럼 정의
|
||||
* @returns {Array} 그리드 컬럼 배열
|
||||
*/
|
||||
getGridColumns: function() {
|
||||
return [
|
||||
{
|
||||
header: '단속년도',
|
||||
name: 'crdnYr',
|
||||
align: 'center',
|
||||
width: 80,
|
||||
sortable: true
|
||||
},
|
||||
{
|
||||
header: '단속번호',
|
||||
name: 'crdnNo',
|
||||
align: 'center',
|
||||
width: 90,
|
||||
sortable: true
|
||||
},
|
||||
{
|
||||
header: '행위자명',
|
||||
name: 'actorNm',
|
||||
align: 'center',
|
||||
width: 120
|
||||
},
|
||||
{
|
||||
header: '생년월일',
|
||||
name: 'brthYmd',
|
||||
align: 'center',
|
||||
width: 100,
|
||||
formatter: function (e) {
|
||||
return e.value ? moment(e.value).format('YYYY-MM-DD') : '';
|
||||
}
|
||||
},
|
||||
{
|
||||
header: '주민등록번호',
|
||||
name: 'rrno',
|
||||
align: 'center',
|
||||
width: 130,
|
||||
formatter: function(e) {
|
||||
// 주민등록번호 뒷자리 마스킹 처리
|
||||
if (e.value && e.value.length >= 7) {
|
||||
return e.value.substring(0, 6) + '-' + e.value.substring(6, 7) + '******';
|
||||
}
|
||||
return e.value || '';
|
||||
}
|
||||
},
|
||||
{
|
||||
header: '전화번호',
|
||||
name: 'telno',
|
||||
align: 'center',
|
||||
width: 120
|
||||
},
|
||||
{
|
||||
header: '휴대폰번호',
|
||||
name: 'mbtlno',
|
||||
align: 'center',
|
||||
width: 120
|
||||
},
|
||||
{
|
||||
header: '주소',
|
||||
name: 'addr',
|
||||
align: 'left',
|
||||
width: 250
|
||||
},
|
||||
{
|
||||
header: '업체명',
|
||||
name: 'cmpnyNm',
|
||||
align: 'left',
|
||||
width: 150
|
||||
}
|
||||
];
|
||||
},
|
||||
|
||||
/**
|
||||
* 데이터 소스 생성
|
||||
* @returns {Object} 데이터 소스 설정 객체
|
||||
*/
|
||||
createDataSource: function() {
|
||||
return {
|
||||
api: {
|
||||
readData: {
|
||||
url: '<c:url value="/crdn/crndRegistAndView/list.ajax"/>',
|
||||
method: 'POST',
|
||||
contentType: 'application/x-www-form-urlencoded',
|
||||
processData: true
|
||||
}
|
||||
},
|
||||
initialRequest: true, // 초기 데이터 요청 여부
|
||||
serializer: function(params) {
|
||||
// 기본 파라미터 (페이지 정보 등)
|
||||
var defaultParams = $.param(params);
|
||||
// 검색 조건 가져오기
|
||||
var searchCond = window.CrdnDetailView ? window.CrdnDetailView.getSearchCondition() : {};
|
||||
var searchParams = $.param(searchCond);
|
||||
// 모든 파라미터 조합
|
||||
return defaultParams + '&' + searchParams;
|
||||
}
|
||||
};
|
||||
},
|
||||
|
||||
/**
|
||||
* 그리드 인스턴스 생성
|
||||
*/
|
||||
create: function() {
|
||||
var gridConfig = this.initConfig();
|
||||
var Grid = tui.Grid;
|
||||
this.instance = gridConfig.instance(Grid);
|
||||
|
||||
// 그리드 테마 설정
|
||||
Grid.applyTheme('striped');
|
||||
|
||||
this.gridBindEvents();
|
||||
},
|
||||
|
||||
/**
|
||||
* 그리드 이벤트 바인딩
|
||||
*/
|
||||
gridBindEvents: function() {
|
||||
var self = this;
|
||||
|
||||
// 데이터 로딩 완료 이벤트
|
||||
this.instance.on('successResponse', function(ev) {
|
||||
|
||||
});
|
||||
|
||||
// 행 클릭 이벤트
|
||||
this.instance.on('click', function(ev) {
|
||||
if (ev.rowKey !== undefined && ev.rowKey !== null) {
|
||||
var rowData = self.instance.getRow(ev.rowKey);
|
||||
console.log('Grid3 행 클릭:', rowData);
|
||||
}
|
||||
});
|
||||
|
||||
// 행 더블클릭 이벤트
|
||||
this.instance.on('dblclick', function(ev) {
|
||||
var rowKey = ev.rowKey;
|
||||
var rowData = self.instance.getRow(rowKey);
|
||||
if (rowData) {
|
||||
console.log('Grid3 행 더블클릭:', rowData);
|
||||
// 행위자 상세 정보 모달 또는 추가 동작 구현 가능
|
||||
}
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* 검색 함수
|
||||
* 메인 모듈에서 호출됨
|
||||
*/
|
||||
search: function() {
|
||||
if (this.grid.instance) {
|
||||
this.grid.instance.readData();
|
||||
console.log('Grid3 검색 실행');
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* 모듈 초기화
|
||||
*/
|
||||
init: function() {
|
||||
// 그리드 생성
|
||||
this.grid.create();
|
||||
|
||||
// 메인 모듈에 자신을 등록
|
||||
if (window.CrdnDetailView) {
|
||||
window.CrdnDetailView.registerGrid('grid3', this);
|
||||
}
|
||||
|
||||
console.log('Grid3 (행위자정보) 모듈이 초기화되었습니다.');
|
||||
}
|
||||
};
|
||||
|
||||
// DOM 준비 완료 시 초기화
|
||||
$(document).ready(function() {
|
||||
// 메인 모듈이 로드될 때까지 약간의 지연
|
||||
setTimeout(function() {
|
||||
CrdnDetailViewGrid3.init();
|
||||
}, 200);
|
||||
});
|
||||
|
||||
// 전역 네임스페이스에 모듈 노출
|
||||
window.CrdnDetailViewGrid3 = CrdnDetailViewGrid3;
|
||||
|
||||
})(window, jQuery);
|
||||
</script>
|
||||
@ -0,0 +1,241 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
|
||||
|
||||
<script type="text/javascript">
|
||||
/**
|
||||
* 수유자정보 그리드 모듈 (Grid4)
|
||||
* 단속 데이터의 수유자 관련 정보를 표시합니다.
|
||||
*/
|
||||
(function(window, $) {
|
||||
'use strict';
|
||||
|
||||
/**
|
||||
* Grid4 (수유자정보) 관리 네임스페이스
|
||||
*/
|
||||
var CrdnDetailViewGrid4 = {
|
||||
/**
|
||||
* 그리드 관련 객체
|
||||
*/
|
||||
grid: {
|
||||
/**
|
||||
* 그리드 인스턴스
|
||||
*/
|
||||
instance: null,
|
||||
|
||||
/**
|
||||
* 그리드 설정 초기화
|
||||
* @returns {Object} 그리드 설정 객체
|
||||
*/
|
||||
initConfig: function() {
|
||||
// 데이터 소스 설정
|
||||
var dataSource = this.createDataSource();
|
||||
|
||||
// 그리드 설정 객체 생성
|
||||
var gridConfig = new XitTuiGridConfig();
|
||||
|
||||
// 기본 설정
|
||||
gridConfig.setOptDataSource(dataSource); // 데이터소스 연결
|
||||
gridConfig.setOptGridId('grid4'); // 그리드를 출력할 Element ID
|
||||
gridConfig.setOptGridHeight(200); // 그리드 높이(단위: px)
|
||||
gridConfig.setOptRowHeight(30); // 그리드 행 높이(단위: px)
|
||||
gridConfig.setOptRowHeaderType('rowNum'); // 행 첫번째 셀 타입(rowNum: 순번)
|
||||
gridConfig.setOptUseClientSort(true); // 클라이언트 사이드 정렬
|
||||
|
||||
gridConfig.setOptRowHeaderType('checkbox');
|
||||
gridConfig.setOptColumns(this.getGridColumns());
|
||||
|
||||
return gridConfig;
|
||||
},
|
||||
|
||||
/**
|
||||
* 그리드 컬럼 정의
|
||||
* @returns {Array} 그리드 컬럼 배열
|
||||
*/
|
||||
getGridColumns: function() {
|
||||
return [
|
||||
{
|
||||
header: '단속년도',
|
||||
name: 'crdnYr',
|
||||
align: 'center',
|
||||
width: 80,
|
||||
sortable: true
|
||||
},
|
||||
{
|
||||
header: '단속번호',
|
||||
name: 'crdnNo',
|
||||
align: 'center',
|
||||
width: 90,
|
||||
sortable: true
|
||||
},
|
||||
{
|
||||
header: '수유자명',
|
||||
name: 'ownerNm',
|
||||
align: 'center',
|
||||
width: 120
|
||||
},
|
||||
{
|
||||
header: '생년월일',
|
||||
name: 'ownerBrthYmd',
|
||||
align: 'center',
|
||||
width: 100,
|
||||
formatter: function (e) {
|
||||
return e.value ? moment(e.value).format('YYYY-MM-DD') : '';
|
||||
}
|
||||
},
|
||||
{
|
||||
header: '주민등록번호',
|
||||
name: 'ownerRrno',
|
||||
align: 'center',
|
||||
width: 130,
|
||||
formatter: function(e) {
|
||||
// 주민등록번호 뒷자리 마스킹 처리
|
||||
if (e.value && e.value.length >= 7) {
|
||||
return e.value.substring(0, 6) + '-' + e.value.substring(6, 7) + '******';
|
||||
}
|
||||
return e.value || '';
|
||||
}
|
||||
},
|
||||
{
|
||||
header: '전화번호',
|
||||
name: 'ownerTelno',
|
||||
align: 'center',
|
||||
width: 120
|
||||
},
|
||||
{
|
||||
header: '휴대폰번호',
|
||||
name: 'ownerMbtlno',
|
||||
align: 'center',
|
||||
width: 120
|
||||
},
|
||||
{
|
||||
header: '주소',
|
||||
name: 'ownerAddr',
|
||||
align: 'left',
|
||||
width: 250
|
||||
},
|
||||
{
|
||||
header: '관계',
|
||||
name: 'rltnCdNm',
|
||||
align: 'center',
|
||||
width: 100
|
||||
},
|
||||
{
|
||||
header: '소유구분',
|
||||
name: 'ownrshpSeCdNm',
|
||||
align: 'center',
|
||||
width: 100
|
||||
}
|
||||
];
|
||||
},
|
||||
|
||||
/**
|
||||
* 데이터 소스 생성
|
||||
* @returns {Object} 데이터 소스 설정 객체
|
||||
*/
|
||||
createDataSource: function() {
|
||||
return {
|
||||
api: {
|
||||
readData: {
|
||||
url: '<c:url value="/crdn/crndRegistAndView/list.ajax"/>',
|
||||
method: 'POST',
|
||||
contentType: 'application/x-www-form-urlencoded',
|
||||
processData: true
|
||||
}
|
||||
},
|
||||
initialRequest: true, // 초기 데이터 요청 여부
|
||||
serializer: function(params) {
|
||||
// 기본 파라미터 (페이지 정보 등)
|
||||
var defaultParams = $.param(params);
|
||||
// 검색 조건 가져오기
|
||||
var searchCond = window.CrdnDetailView ? window.CrdnDetailView.getSearchCondition() : {};
|
||||
var searchParams = $.param(searchCond);
|
||||
// 모든 파라미터 조합
|
||||
return defaultParams + '&' + searchParams;
|
||||
}
|
||||
};
|
||||
},
|
||||
|
||||
/**
|
||||
* 그리드 인스턴스 생성
|
||||
*/
|
||||
create: function() {
|
||||
var gridConfig = this.initConfig();
|
||||
var Grid = tui.Grid;
|
||||
this.instance = gridConfig.instance(Grid);
|
||||
|
||||
// 그리드 테마 설정
|
||||
Grid.applyTheme('striped');
|
||||
|
||||
this.gridBindEvents();
|
||||
},
|
||||
|
||||
/**
|
||||
* 그리드 이벤트 바인딩
|
||||
*/
|
||||
gridBindEvents: function() {
|
||||
var self = this;
|
||||
|
||||
// 데이터 로딩 완료 이벤트
|
||||
this.instance.on('successResponse', function(ev) {
|
||||
|
||||
});
|
||||
|
||||
// 행 클릭 이벤트
|
||||
this.instance.on('click', function(ev) {
|
||||
if (ev.rowKey !== undefined && ev.rowKey !== null) {
|
||||
var rowData = self.instance.getRow(ev.rowKey);
|
||||
console.log('Grid4 행 클릭:', rowData);
|
||||
}
|
||||
});
|
||||
|
||||
// 행 더블클릭 이벤트
|
||||
this.instance.on('dblclick', function(ev) {
|
||||
var rowKey = ev.rowKey;
|
||||
var rowData = self.instance.getRow(rowKey);
|
||||
if (rowData) {
|
||||
console.log('Grid4 행 더블클릭:', rowData);
|
||||
// 수유자 상세 정보 모달 또는 추가 동작 구현 가능
|
||||
}
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* 검색 함수
|
||||
* 메인 모듈에서 호출됨
|
||||
*/
|
||||
search: function() {
|
||||
if (this.grid.instance) {
|
||||
this.grid.instance.readData();
|
||||
console.log('Grid4 검색 실행');
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* 모듈 초기화
|
||||
*/
|
||||
init: function() {
|
||||
// 그리드 생성
|
||||
this.grid.create();
|
||||
|
||||
// 메인 모듈에 자신을 등록
|
||||
if (window.CrdnDetailView) {
|
||||
window.CrdnDetailView.registerGrid('grid4', this);
|
||||
}
|
||||
|
||||
console.log('Grid4 (수유자정보) 모듈이 초기화되었습니다.');
|
||||
}
|
||||
};
|
||||
|
||||
// DOM 준비 완료 시 초기화
|
||||
$(document).ready(function() {
|
||||
// 메인 모듈이 로드될 때까지 약간의 지연
|
||||
setTimeout(function() {
|
||||
CrdnDetailViewGrid4.init();
|
||||
}, 250);
|
||||
});
|
||||
|
||||
// 전역 네임스페이스에 모듈 노출
|
||||
window.CrdnDetailViewGrid4 = CrdnDetailViewGrid4;
|
||||
|
||||
})(window, jQuery);
|
||||
</script>
|
||||
@ -0,0 +1,402 @@
|
||||
<%@ 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" %>
|
||||
|
||||
<!-- Main body -->
|
||||
<div class="main_body">
|
||||
<section id="section8" class="main_bars">
|
||||
<div class="bgs-main">
|
||||
<section id="section5">
|
||||
<div class="sub_title"></div>
|
||||
<button type="button" id="save_btn" class="newbtn bg1">저장</button>
|
||||
<button type="button" id="cancel_btn" class="newbtn bg5" style="margin-left: 5px;">취소</button>
|
||||
</section>
|
||||
</div>
|
||||
</section>
|
||||
<div class="contants_body">
|
||||
<div class="box_column">
|
||||
<div class="containers">
|
||||
<div class="forms_table_non">
|
||||
<form id="crdnForm" name="crdnForm">
|
||||
<input type="hidden" id="mode" name="mode" value="U" />
|
||||
<input type="hidden" id="crdnYr" name="crdnYr" value="${crdnYr}" />
|
||||
<input type="hidden" id="crdnNo" name="crdnNo" value="${crdnNo}" />
|
||||
<table>
|
||||
<tr>
|
||||
<th class="th"><span class="required">*</span> 단속년도</th>
|
||||
<td>
|
||||
<input type="text" id="dispCrdnYr" name="dispCrdnYr" class="input" value="${crdnYr}" readonly style="width: 80px;"/>
|
||||
</td>
|
||||
<th class="th"><span class="required">*</span> 단속번호</th>
|
||||
<td>
|
||||
<input type="text" id="dispCrdnNo" name="dispCrdnNo" class="input" value="${crdnNo}" readonly style="width: 100px;"/>
|
||||
</td>
|
||||
<th class="th"><span class="required">*</span> 지역구분</th>
|
||||
<td>
|
||||
<select id="rgnSeCd" name="rgnSeCd" class="input" style="width: 120px;" validation-check="required">
|
||||
<option value="">선택하세요</option>
|
||||
<c:forEach var="code" items="${regionList}">
|
||||
<option value="${code.cdId}">${code.cdNm}</option>
|
||||
</c:forEach>
|
||||
</select>
|
||||
</td>
|
||||
<th class="th"><span class="required">*</span> 적발방법</th>
|
||||
<td>
|
||||
<select id="dsclMthdCd" name="dsclMthdCd" class="input" style="width: 120px;" validation-check="required">
|
||||
<option value="">선택하세요</option>
|
||||
<c:forEach var="code" items="${dsclMthdCdList}">
|
||||
<option value="${code.cdId}">${code.cdNm}</option>
|
||||
</c:forEach>
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="th"><span class="required">*</span> 적발일자</th>
|
||||
<td>
|
||||
<input type="text" id="dsclYmd" name="dsclYmd" class="input calender datepicker" maxlength="10" style="width: 120px;" autocomplete="off" validation-check="required"/>
|
||||
</td>
|
||||
<th class="th">조사원</th>
|
||||
<td>
|
||||
<input type="text" id="exmnr" name="exmnr" class="input" maxlength="100"/>
|
||||
</td>
|
||||
<th class="th"><span class="required">*</span> 재부과여부</th>
|
||||
<td>
|
||||
<select id="relevyYn" name="relevyYn" class="input" style="width: 100px;" validation-check="required">
|
||||
<option value="">선택하세요</option>
|
||||
<option value="N">신규</option>
|
||||
<option value="Y">재부과</option>
|
||||
</select>
|
||||
</td>
|
||||
<th class="th"><span class="required">*</span> 가중부과대상</th>
|
||||
<td>
|
||||
<select id="agrvtnLevyTrgtYn" name="agrvtnLevyTrgtYn" class="input" style="width: 100px;" validation-check="required">
|
||||
<option value="">선택하세요</option>
|
||||
<option value="N">비대상</option>
|
||||
<option value="Y">대상</option>
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="th">비고</th>
|
||||
<td colspan="7">
|
||||
<textarea id="rmrk" name="rmrk" class="textarea" rows="1" maxlength="1000" style="width: 100%; height: 60px;"></textarea>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 4개 그리드 분할 레이아웃 -->
|
||||
<div class="gs_booking">
|
||||
<!-- 상단 2개 그리드 -->
|
||||
<div class="row" style="margin-bottom: 10px;">
|
||||
<div class="col-sm-6">
|
||||
<div class="box_column">
|
||||
<ul class="box_title">
|
||||
<li class="tit">단속자료 위치정보</li>
|
||||
</ul>
|
||||
<div class="containers">
|
||||
<div id="grid1"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-6">
|
||||
<div class="box_column">
|
||||
<ul class="box_title">
|
||||
<li class="tit">소유자 정보</li>
|
||||
</ul>
|
||||
<div class="containers">
|
||||
<div id="grid2"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- 하단 2개 그리드 -->
|
||||
<div class="row">
|
||||
<div class="col-sm-6">
|
||||
<div class="box_column">
|
||||
<ul class="box_title">
|
||||
<li class="tit">행위자정보</li>
|
||||
</ul>
|
||||
<div class="containers">
|
||||
<div id="grid3"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-6">
|
||||
<div class="box_column">
|
||||
<ul class="box_title">
|
||||
<li class="tit">수유자정보</li>
|
||||
</ul>
|
||||
<div class="containers">
|
||||
<div id="grid4"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- /Main body -->
|
||||
|
||||
<!-- 각 그리드별 개별 JSP 포함 -->
|
||||
<%@ include file="detailView-grid1.jsp" %>
|
||||
<%@ include file="detailView-grid2.jsp" %>
|
||||
<%@ include file="detailView-grid3.jsp" %>
|
||||
<%@ include file="detailView-grid4.jsp" %>
|
||||
|
||||
<script type="text/javascript">
|
||||
/**
|
||||
* 단속 상세보기 4개 그리드 통합 관리 모듈
|
||||
* 단속 데이터의 상세정보를 4개 그리드로 분할하여 표시합니다.
|
||||
*/
|
||||
(function(window, $) {
|
||||
'use strict';
|
||||
|
||||
var SEARCH_COND = {};
|
||||
|
||||
// 검색정보 설정
|
||||
var setSearchCond = function() {
|
||||
var schCrdnYr = $.trim(nvl($("#schCrdnYr").val(), ""));
|
||||
var schCrdnNo = $.trim(nvl($("#schCrdnNo").val(), ""));
|
||||
var schRgnSeCd = $.trim(nvl($("#schRgnSeCd").val(), ""));
|
||||
var schDsclMthdCd = $.trim(nvl($("#schDsclMthdCd").val(), ""));
|
||||
var schExmnr = $.trim(nvl($("#schExmnr").val(), ""));
|
||||
|
||||
SEARCH_COND.schCrdnYr = schCrdnYr;
|
||||
SEARCH_COND.schCrdnNo = schCrdnNo;
|
||||
SEARCH_COND.schRgnSeCd = schRgnSeCd;
|
||||
SEARCH_COND.schDsclMthdCd = schDsclMthdCd;
|
||||
SEARCH_COND.schExmnr = schExmnr;
|
||||
};
|
||||
|
||||
/**
|
||||
* 단속 상세보기 관리 네임스페이스
|
||||
*/
|
||||
var CrdnDetailView = {
|
||||
/**
|
||||
* 현재 수정 중인 데이터
|
||||
*/
|
||||
currentData: null,
|
||||
|
||||
/**
|
||||
* 통합 그리드 관리 객체
|
||||
*/
|
||||
grids: {
|
||||
// 각 그리드 모듈 인스턴스들
|
||||
grid1: null,
|
||||
grid2: null,
|
||||
grid3: null,
|
||||
grid4: null
|
||||
},
|
||||
|
||||
/**
|
||||
* 단속 정보 로딩 함수
|
||||
* 페이지 로드 시 URL 파라미터로 전달받은 단속 정보를 조회하여 폼에 채웁니다.
|
||||
*/
|
||||
loadCrdnData: function() {
|
||||
var self = this;
|
||||
var crdnYr = '${crdnYr}';
|
||||
var crdnNo = '${crdnNo}';
|
||||
|
||||
if (crdnYr && crdnNo) {
|
||||
$.ajax({
|
||||
url: '<c:url value="/crdn/crndRegistAndView/selectOne.ajax"/>',
|
||||
type: 'GET',
|
||||
data: {
|
||||
crdnYr: crdnYr,
|
||||
crdnNo: crdnNo
|
||||
},
|
||||
success: function(response) {
|
||||
if (response && response.success && response.data) {
|
||||
self.currentData = response.data;
|
||||
self.populateForm(response.data);
|
||||
} else {
|
||||
alert('단속 정보를 불러올 수 없습니다.');
|
||||
}
|
||||
},
|
||||
error: function(xhr, status, error) {
|
||||
console.error('단속 정보 조회 오류:', error);
|
||||
alert('단속 정보 조회 중 오류가 발생했습니다.');
|
||||
}
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* 폼에 데이터 채우기
|
||||
* 조회한 단속 정보를 폼 필드에 설정합니다.
|
||||
*/
|
||||
populateForm: function(data) {
|
||||
$('#rgnSeCd').val(data.rgnSeCd || '');
|
||||
$('#dsclMthdCd').val(data.dsclMthdCd || '');
|
||||
$('#dsclYmd').val(data.dsclYmd ? moment(data.dsclYmd).format('YYYY-MM-DD') : '');
|
||||
$('#exmnr').val(data.exmnr || '');
|
||||
$('#relevyYn').val(data.relevyYn || 'N');
|
||||
$('#agrvtnLevyTrgtYn').val(data.agrvtnLevyTrgtYn || 'N');
|
||||
$('#rmrk').val(data.rmrk || '');
|
||||
},
|
||||
|
||||
/**
|
||||
* 단속 정보 저장
|
||||
*/
|
||||
saveCrdnData: function() {
|
||||
var self = this;
|
||||
|
||||
// 필수 필드 검증
|
||||
if (!$('#rgnSeCd').val()) {
|
||||
alert('지역구분을 선택해주세요.');
|
||||
$('#rgnSeCd').focus();
|
||||
return;
|
||||
}
|
||||
if (!$('#dsclMthdCd').val()) {
|
||||
alert('적발방법을 선택해주세요.');
|
||||
$('#dsclMthdCd').focus();
|
||||
return;
|
||||
}
|
||||
if (!$('#dsclYmd').val()) {
|
||||
alert('적발일자를 입력해주세요.');
|
||||
$('#dsclYmd').focus();
|
||||
return;
|
||||
}
|
||||
|
||||
// 폼 데이터 수집
|
||||
var formData = {
|
||||
crdnYr: $('#crdnYr').val(),
|
||||
crdnNo: $('#crdnNo').val(),
|
||||
rgnSeCd: $('#rgnSeCd').val(),
|
||||
dsclMthdCd: $('#dsclMthdCd').val(),
|
||||
dsclYmd: $('#dsclYmd').val().replace(/-/g, ''),
|
||||
exmnr: $('#exmnr').val(),
|
||||
relevyYn: $('#relevyYn').val(),
|
||||
agrvtnLevyTrgtYn: $('#agrvtnLevyTrgtYn').val(),
|
||||
rmrk: $('#rmrk').val()
|
||||
};
|
||||
|
||||
if (confirm('단속 정보를 저장하시겠습니까?')) {
|
||||
$.ajax({
|
||||
url: '<c:url value="/crdn/crndRegistAndView/update.ajax"/>',
|
||||
type: 'POST',
|
||||
data: formData,
|
||||
success: function(response) {
|
||||
if (response && response.success) {
|
||||
alert('단속 정보가 성공적으로 저장되었습니다.');
|
||||
// 현재 데이터 업데이트
|
||||
self.currentData = formData;
|
||||
// 그리드 새로고침
|
||||
self.refreshAllGrids();
|
||||
} else {
|
||||
alert(response.message || '저장에 실패했습니다.');
|
||||
}
|
||||
},
|
||||
error: function(xhr, status, error) {
|
||||
console.error('저장 오류:', error);
|
||||
alert('저장 중 오류가 발생했습니다.');
|
||||
}
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* 폼 초기화 (취소 기능)
|
||||
*/
|
||||
resetForm: function() {
|
||||
if (confirm('변경사항을 취소하고 원래 데이터로 되돌리시겠습니까?')) {
|
||||
if (this.currentData) {
|
||||
this.populateForm(this.currentData);
|
||||
} else {
|
||||
this.loadCrdnData();
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* 모든 그리드 새로고침
|
||||
*/
|
||||
refreshAllGrids: function() {
|
||||
// 각 그리드 모듈의 검색 함수 호출
|
||||
if (this.grids.grid1 && this.grids.grid1.search) {
|
||||
this.grids.grid1.search();
|
||||
}
|
||||
if (this.grids.grid2 && this.grids.grid2.search) {
|
||||
this.grids.grid2.search();
|
||||
}
|
||||
if (this.grids.grid3 && this.grids.grid3.search) {
|
||||
this.grids.grid3.search();
|
||||
}
|
||||
if (this.grids.grid4 && this.grids.grid4.search) {
|
||||
this.grids.grid4.search();
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* 이벤트 핸들러 설정
|
||||
*/
|
||||
eventBindEvents: function() {
|
||||
var self = this;
|
||||
|
||||
// 저장 버튼 클릭 이벤트
|
||||
$('#save_btn').on('click', function() {
|
||||
self.saveCrdnData();
|
||||
});
|
||||
|
||||
// 취소 버튼 클릭 이벤트
|
||||
$('#cancel_btn').on('click', function() {
|
||||
self.resetForm();
|
||||
});
|
||||
|
||||
// 닫기 버튼 클릭 이벤트
|
||||
$("#closeBtn").on('click', function() {
|
||||
if (confirm('페이지를 닫으시겠습니까?')) {
|
||||
// list 페이지로 이동 (선택 파라미터 제거)
|
||||
window.location.href = removeUrlParam(["selectCrdnYr", "selectCrdnNo"], "<c:url value="/crdn/crndRegistAndView/list.do"/>");
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
/**
|
||||
* 그리드 모듈 등록 함수
|
||||
* 각 개별 그리드 모듈에서 자신을 등록할 때 사용
|
||||
*/
|
||||
registerGrid: function(gridName, gridModule) {
|
||||
this.grids[gridName] = gridModule;
|
||||
console.log(gridName + ' 그리드 모듈이 등록되었습니다.');
|
||||
},
|
||||
|
||||
/**
|
||||
* 공통 검색 조건 반환 함수
|
||||
* 각 그리드 모듈에서 검색 시 사용
|
||||
*/
|
||||
getSearchCondition: function() {
|
||||
setSearchCond();
|
||||
return SEARCH_COND;
|
||||
},
|
||||
|
||||
/**
|
||||
* 모듈 초기화
|
||||
*/
|
||||
init: function() {
|
||||
// 이벤트 핸들러 설정
|
||||
this.eventBindEvents();
|
||||
|
||||
// 단속 데이터 로딩
|
||||
this.loadCrdnData();
|
||||
|
||||
console.log('단속 상세보기 통합 모듈이 초기화되었습니다.');
|
||||
}
|
||||
};
|
||||
|
||||
// DOM 준비 완료 시 초기화
|
||||
$(document).ready(function() {
|
||||
CrdnDetailView.init();
|
||||
});
|
||||
|
||||
// 전역 네임스페이스에 모듈 노출
|
||||
window.CrdnDetailView = CrdnDetailView;
|
||||
|
||||
})(window, jQuery);
|
||||
</script>
|
||||
Loading…
Reference in New Issue