From d91dae85ea3a849ed6fc43946b3e0087e7d7e9b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=B0=95=EC=84=B1=EC=98=81?= Date: Thu, 23 Oct 2025 15:21:36 +0900 Subject: [PATCH] =?UTF-8?q?=EC=8B=9C=EC=8A=A4=ED=85=9C=20=ED=91=9C?= =?UTF-8?q?=EC=A4=80=20=EC=A0=95=EB=A0=AC=20=EB=B0=A9=EC=8B=9D=20=EC=A0=81?= =?UTF-8?q?=EC=9A=A9=20=EB=B0=8F=20=EA=B4=80=EB=A0=A8=20JSP/Mapper=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mapper/levy/levy/LevyMapper_maria.xml | 14 +++++++- .../mybatis/mapper/noti/NotiMapper_maria.xml | 14 +++++++- .../webapp/WEB-INF/views/levy/levy/list.jsp | 36 +++++++++++++++---- .../WEB-INF/views/levy/levyRelevy/list.jsp | 2 +- src/main/webapp/WEB-INF/views/noti/list.jsp | 35 +++++++++++++++--- 5 files changed, 87 insertions(+), 14 deletions(-) diff --git a/src/main/resources/mybatis/mapper/levy/levy/LevyMapper_maria.xml b/src/main/resources/mybatis/mapper/levy/levy/LevyMapper_maria.xml index ad0bcd9..35bea1e 100644 --- a/src/main/resources/mybatis/mapper/levy/levy/LevyMapper_maria.xml +++ b/src/main/resources/mybatis/mapper/levy/levy/LevyMapper_maria.xml @@ -71,7 +71,19 @@ AND p.LOTNO_SNO = #{schLotnoSno} - ORDER BY CRDN_NO DESC + + + + + ORDER BY ii.CRDN_NO ASC + + + ORDER BY ii.CRDN_NO DESC + + + ORDER BY ii.CRDN_NO DESC + + LIMIT #{startIndex}, #{perPage} diff --git a/src/main/resources/mybatis/mapper/noti/NotiMapper_maria.xml b/src/main/resources/mybatis/mapper/noti/NotiMapper_maria.xml index 297057d..8179382 100644 --- a/src/main/resources/mybatis/mapper/noti/NotiMapper_maria.xml +++ b/src/main/resources/mybatis/mapper/noti/NotiMapper_maria.xml @@ -79,7 +79,19 @@ AND p.LOTNO_SNO = #{schLotnoSno} - ORDER BY ii.CRDN_NO DESC, a.ACT_NO ASC + + + + + ORDER BY ii.CRDN_NO ASC, a.ACT_NO ASC + + + ORDER BY ii.CRDN_NO DESC, a.ACT_NO ASC + + + ORDER BY ii.CRDN_NO DESC, a.ACT_NO ASC + + LIMIT #{startIndex}, #{perPage} diff --git a/src/main/webapp/WEB-INF/views/levy/levy/list.jsp b/src/main/webapp/WEB-INF/views/levy/levy/list.jsp index 18c70e3..88dac8d 100644 --- a/src/main/webapp/WEB-INF/views/levy/levy/list.jsp +++ b/src/main/webapp/WEB-INF/views/levy/levy/list.jsp @@ -128,6 +128,10 @@ var SEARCH_MASTER_COND = {}; + // 중요로직: 시스템 표준 정렬 패턴 적용 + // - 정렬 파라미터(sortColumn, sortAscending)는 그리드 기본 params에 자동 포함됨 + // - JSP에서 수동으로 정렬 파라미터를 바인딩하지 않음(시스템 메뉴 패턴 준수) + // 페이징 정보를 저장할 전역 변수 var GRID_PAGINATION_INFO = { totalCount: 0, @@ -211,7 +215,7 @@ gridConfig.setOptGridId('masterGrid'); // 그리드를 출력할 Element ID gridConfig.setOptGridHeight(170); // 그리드 높이(단위: px) gridConfig.setOptRowHeight(30); // 그리드 행 높이(단위: px) - gridConfig.setOptRowHeaderType('rowNum'); // 행 첫번째 셀 타입(rowNum: 순번, checkbox: 체크박스, '': 출력 안함) + gridConfig.setOptRowHeaderType(''); // 행 첫번째 셀 타입(rowNum: 순번, checkbox: 체크박스, '': 출력 안함) gridConfig.setOptUseClientSort(false); // 서버사이드 정렬 false // 페이징 옵션 설정 @@ -231,6 +235,22 @@ getGridColumns: function() { var self = this; return [ + { + header: '번호', + name: '_rowNum', + align: 'center', + width: 60, + sortable: false, + formatter: function(e) { + // 중요로직: 서버사이드 페이징에서 역순 번호 계산 + // totalCount - (현재페이지-1) * 페이지당항목수 - 현재행인덱스 + var totalCount = GRID_PAGINATION_INFO.totalCount; + var page = GRID_PAGINATION_INFO.page; + var perPage = GRID_PAGINATION_INFO.perPage; + var rowIndex = e.row.rowKey; + return totalCount - (page - 1) * perPage - rowIndex; + } + }, { header: '단속년도', name: 'crdnYr', @@ -312,11 +332,12 @@ }, initialRequest: false, // 초기 데이터 요청 여부 serializer: function(params) { - setMasterSearchCond(); - SEARCH_MASTER_COND.perPage = params.perPage; - SEARCH_MASTER_COND.page = params.page; - var searchParams = $.param(SEARCH_MASTER_COND); - return searchParams; + // 중요로직: 시스템 표준 serializer 적용 + // - 기본 params에는 page, perPage, sortColumn, sortAscending 등이 자동 포함됨 + // - 검색조건만 별도로 직렬화하여 결합한다. + setMasterSearchCond(); + var queryParams = Object.assign({}, params, SEARCH_MASTER_COND); + return $.param(queryParams); } }; }, @@ -392,6 +413,9 @@ } }); + // 중요로직: 정렬은 그리드 기본 params에 의해 서버로 자동 전달됨 + // - JSP에서 정렬 파라미터를 수동으로 세팅하지 않음(시스템 표준) + }, }, diff --git a/src/main/webapp/WEB-INF/views/levy/levyRelevy/list.jsp b/src/main/webapp/WEB-INF/views/levy/levyRelevy/list.jsp index 51317f7..f938dc9 100644 --- a/src/main/webapp/WEB-INF/views/levy/levyRelevy/list.jsp +++ b/src/main/webapp/WEB-INF/views/levy/levyRelevy/list.jsp @@ -259,7 +259,7 @@ } }, { header: '단속년도', name: 'crdnYr', align: 'center', width: 80, sortingType: 'desc' }, - { header: '단속번호', name: 'crdnNo', align: 'center', width: 90 }, + { header: '단속번호', name: 'crdnNo', align: 'center', width: 90, sortable: true }, { header: '법정동', name: 'stdgEmdCdNm', align: 'center', width: 90 }, { header: '지역구분', name: 'rgnSeCdNm', align: 'center', width: 100 }, { header: '적발방법', name: 'dsclMthdCdNm', align: 'center', width: 120 }, diff --git a/src/main/webapp/WEB-INF/views/noti/list.jsp b/src/main/webapp/WEB-INF/views/noti/list.jsp index 21263b5..5f03612 100644 --- a/src/main/webapp/WEB-INF/views/noti/list.jsp +++ b/src/main/webapp/WEB-INF/views/noti/list.jsp @@ -117,6 +117,10 @@ 'use strict'; var SEARCH_MASTER_COND = {}; + + // 중요로직: 시스템 표준 정렬 패턴 적용 + // - 정렬 파라미터(sortColumn, sortAscending)는 그리드 기본 params에 자동 포함됨 + // - JSP에서 수동으로 정렬 파라미터를 바인딩하지 않음(시스템 메뉴 패턴 준수) // 페이징 정보 저장 var GRID_PAGINATION_INFO = { @@ -174,7 +178,7 @@ gridConfig.setOptGridId('masterGrid'); gridConfig.setOptGridHeight(170); gridConfig.setOptRowHeight(30); - gridConfig.setOptRowHeaderType('rowNum'); + gridConfig.setOptRowHeaderType(''); gridConfig.setOptUseClientSort(false); gridConfig.setOptPageOptions({ useClient: false, @@ -187,6 +191,22 @@ getGridColumns: function() { return [ + { + header: '번호', + name: '_rowNum', + align: 'center', + width: 60, + sortable: false, + formatter: function(e) { + // 중요로직: 서버사이드 페이징에서 역순 번호 계산 + // totalCount - (현재페이지-1) * 페이지당항목수 - 현재행인덱스 + var totalCount = GRID_PAGINATION_INFO.totalCount; + var page = GRID_PAGINATION_INFO.page; + var perPage = GRID_PAGINATION_INFO.perPage; + var rowIndex = e.row.rowKey; + return totalCount - (page - 1) * perPage - rowIndex; + } + }, { header: '단속년도', name: 'crdnYr', align: 'center', width: 90 }, { header: '단속번호', name: 'crdnNo', align: 'center', width: 100, sortable: true }, { header: '행위번호', name: 'actNo', align: 'center', width: 60 }, @@ -231,10 +251,12 @@ }, initialRequest: false, serializer: function(params) { - setMasterSearchCond(); - SEARCH_MASTER_COND.perPage = params.perPage; - SEARCH_MASTER_COND.page = params.page; - return $.param(SEARCH_MASTER_COND); + // 중요로직: 시스템 표준 serializer 적용 + // - 기본 params에는 page, perPage, sortColumn, sortAscending 등이 자동 포함됨 + // - 검색조건만 별도로 직렬화하여 결합한다. + setMasterSearchCond(); + var queryParams = Object.assign({}, params, SEARCH_MASTER_COND); + return $.param(queryParams); }, }; }, @@ -296,6 +318,9 @@ NotiList.openImpltTaskPopup(NotiList.selectedRow.crdnYr, NotiList.selectedRow.crdnNo, NotiList.selectedRow.impltTaskSeCd); } }); + + // 중요로직: 정렬은 그리드 기본 params에 의해 서버로 자동 전달됨 + // - JSP에서 정렬 파라미터를 수동으로 세팅하지 않음(시스템 표준) } },