UIJIN_KIM 3 months ago
commit 1383659d67

2
.gitignore vendored

@ -32,3 +32,5 @@ replay_pid*
/.idea/
/src/main/UbiService/logs/
/src/main/UbiService/results/UBIHTML/
/src/main/webapp/ubi4/logs/ubidebug.log.2025-09-04
/src/main/webapp/ubi4/logs/ubiserver.log.2025-09-04

@ -15,6 +15,8 @@ import go.kr.project.crdn.crndRegistAndView.crdnActInfo.model.CrdnPhotoVO;
import go.kr.project.crdn.crndRegistAndView.crdnActInfo.model.CrdnPstnIdxVO;
import go.kr.project.crdn.crndRegistAndView.crdnActInfo.service.CrdnActInfoService;
import go.kr.project.crdn.crndRegistAndView.crdnActInfo.service.CrdnPhotoService;
import go.kr.project.crdn.crndRegistAndView.main.model.CrdnRegistAndViewVO;
import go.kr.project.crdn.crndRegistAndView.main.service.CrdnRegistAndViewService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
@ -57,6 +59,7 @@ import java.util.List;
@Tag(name = "불법위반행위정보", description = "불법위반행위정보 관리 API")
public class CrdnActInfoController {
private final CrdnRegistAndViewService crdnRegistAndViewService;
private final CrdnActInfoService service;
private final CommonCodeService commonCodeService;
private final CrdnPhotoService photoService;
@ -220,7 +223,13 @@ public class CrdnActInfoController {
log.debug("불법위반행위정보 등록 요청: {}, 파일 개수: {}", vo,
photoFiles != null ? photoFiles.size() : 0);
vo.setSggCd(SessionUtil.getSessionVO().getUser().getOrgCd());
CrdnRegistAndViewVO crdnVO = new CrdnRegistAndViewVO();
crdnVO.setCrdnYr(vo.getCrdnYr());
crdnVO.setCrdnNo(vo.getCrdnNo());
CrdnRegistAndViewVO data = crdnRegistAndViewService.selectOne(crdnVO);
vo.setSggCd(data.getSggCd());
vo.setRgtr(SessionUtil.getUserId());
vo.setMdfr(SessionUtil.getUserId());

@ -27,6 +27,7 @@ public class CrdnActInfoVO extends PagingVO {
private String pstnInfoId; // 위치 정보 ID
private String actBgngYmd; // 행위 시작 일자
private String actTypeCd; // 행위 유형 코드
private String actNo; // 행위 번호
private String vltnLwrgCd1; // 위반 법규 코드 1
private String vltnLwrgCd2; // 위반 법규 코드 2
private String strctIdxCd; // 구조 지수 코드

@ -5,6 +5,8 @@ import egovframework.util.SessionUtil;
import go.kr.project.crdn.crndRegistAndView.crdnActrInfo.mapper.CrdnActrInfoMapper;
import go.kr.project.crdn.crndRegistAndView.crdnActrInfo.model.CrdnActrInfoVO;
import go.kr.project.crdn.crndRegistAndView.crdnActrInfo.service.CrdnActrInfoService;
import go.kr.project.crdn.crndRegistAndView.main.model.CrdnRegistAndViewVO;
import go.kr.project.crdn.crndRegistAndView.main.service.CrdnRegistAndViewService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.egovframe.rte.fdl.cmmn.EgovAbstractServiceImpl;
@ -148,15 +150,12 @@ public class CrdnActrInfoServiceImpl extends EgovAbstractServiceImpl implements
* @throws Exception
*/
@Override
@Transactional(rollbackFor = Exception.class)
@Transactional
public int saveSelectedActrList(List<CrdnActrInfoVO> list) throws Exception {
int savedCount = 0;
String rgtr = SessionUtil.getUserId();
String sggCd = SessionUtil.getSessionVO().getUser().getOrgCd();
for (CrdnActrInfoVO vo : list) {
vo.setRgtr(rgtr);
vo.setSggCd(sggCd);
savedCount += this.insertActrInfo(vo);
}
return savedCount;

@ -109,11 +109,9 @@ public class CrdnOwnrInfoServiceImpl extends EgovAbstractServiceImpl implements
public int saveSelectedOwnrList(List<CrdnOwnrInfoVO> list) {
int savedCount = 0;
String rgtr = SessionUtil.getUserId();
String sggCd = SessionUtil.getSessionVO().getUser().getOrgCd();
for (CrdnOwnrInfoVO vo : list) {
vo.setRgtr(rgtr);
vo.setSggCd(sggCd);
savedCount += this.saveSelectedOwnr(vo);
}
return savedCount;

@ -8,6 +8,8 @@ import go.kr.project.common.model.CmmnCodeSearchVO;
import go.kr.project.common.service.CommonCodeService;
import go.kr.project.crdn.crndRegistAndView.crdnPstnInfo.model.CrdnPstnInfoVO;
import go.kr.project.crdn.crndRegistAndView.crdnPstnInfo.service.CrdnPstnInfoService;
import go.kr.project.crdn.crndRegistAndView.main.model.CrdnRegistAndViewVO;
import go.kr.project.crdn.crndRegistAndView.main.service.CrdnRegistAndViewService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
@ -43,6 +45,7 @@ import java.util.List;
@Tag(name = "단속 위치정보", description = "단속 자료 위치정보 API")
public class CrdnPstnInfoController {
private final CrdnRegistAndViewService crdnRegistAndViewService;
private final CrdnPstnInfoService service;
private final CommonCodeService commonCodeService;
@ -148,8 +151,11 @@ public class CrdnPstnInfoController {
log.debug("위치정보 등록 요청 - 단속년도: {}, 단속번호: {}", vo.getCrdnYr(), vo.getCrdnNo());
vo.setRgtr(SessionUtil.getUserId());
// 세션의 조직코드를 시군구 코드로 설정
vo.setSggCd(SessionUtil.getSessionVO().getUser().getOrgCd());
CrdnRegistAndViewVO crdnVO = new CrdnRegistAndViewVO();
crdnVO.setCrdnYr(vo.getCrdnYr());
crdnVO.setCrdnNo(vo.getCrdnNo());
CrdnRegistAndViewVO data = crdnRegistAndViewService.selectOne(crdnVO);
vo.setSggCd(data.getSggCd());
int result = service.insertPstnInfo(vo);
if (result > 0) {

@ -76,7 +76,8 @@ query-executor:
# Interceptor configuration
interceptor:
interceptorExclude:
- /** #ubi report test
- /ubi4/** #ubi report test
- /UbiServer/** #ubi report test
- /login/** #로그인
- / #루트 페이지
- /.well-known/** #개발 툴

@ -17,6 +17,7 @@
a.ACT_BGNG_YMD,
a.ACT_TYPE_CD,
act.CD_NM AS ACT_TYPE_CD_NM,
a.ACT_NO,
a.VLTN_LWRG_CD_1,
vltn1.VLTN_LAW AS VLTN_LAW_1,
a.VLTN_LWRG_CD_2,
@ -85,6 +86,7 @@
PSTN_INFO_ID,
ACT_BGNG_YMD,
ACT_TYPE_CD,
ACT_NO,
VLTN_LWRG_CD_1,
VLTN_LWRG_CD_2,
STRCT_IDX_CD,
@ -107,6 +109,11 @@
#{pstnInfoId},
replace(#{actBgngYmd},'-',''),
#{actTypeCd},
(SELECT next_act_no
FROM (SELECT IFNULL(MAX(CAST(act_no AS UNSIGNED)), 0) + 1 AS next_act_no
FROM tb_act_info
WHERE PSTN_INFO_ID = #{pstnInfoId}) AS temp
),
#{vltnLwrgCd1},
#{vltnLwrgCd2},
#{strctIdxCd},
@ -137,6 +144,7 @@
a.ACT_BGNG_YMD,
a.ACT_TYPE_CD,
act.CD_NM AS ACT_TYPE_CD_NM,
a.ACT_NO,
a.VLTN_LWRG_CD_1,
vltn1.VLTN_LAW AS VLTN_LAW_1,
a.VLTN_LWRG_CD_2,

@ -32,7 +32,7 @@
FROM tb_actr_info ar
LEFT JOIN tb_cd_detail sgg ON sgg.CD_GROUP_ID = 'ORG_CD' AND sgg.CD_ID = ar.SGG_CD
LEFT JOIN tb_user regUser ON regUser.USER_ID = ar.RGTR
LEFT JOIN tb_ownr o ON o.OWNR_ID = ar.OWNR_ID AND o.DEL_YN = 'N'
INNER JOIN tb_ownr o ON o.OWNR_ID = ar.OWNR_ID AND o.DEL_YN = 'N'
LEFT JOIN tb_cd_detail ownrSe ON ownrSe.CD_GROUP_ID = 'OWNR_SE_CD' AND ownrSe.CD_ID = o.OWNR_SE_CD
WHERE ar.DEL_YN = 'N'
AND ar.CRDN_YR = #{crdnYr}
@ -49,6 +49,7 @@
/* ActrInfoMapper.selectActrInfoListTotalCount : 위반행위자정보 총 개수 조회 */
SELECT COUNT(*)
FROM tb_actr_info ar
INNER JOIN tb_ownr o ON o.OWNR_ID = ar.OWNR_ID AND o.DEL_YN = 'N'
WHERE ar.DEL_YN = 'N'
AND ar.CRDN_YR = #{crdnYr}
AND ar.CRDN_NO = #{crdnNo}
@ -109,7 +110,7 @@
FROM tb_actr_info ar
LEFT JOIN tb_cd_detail sgg ON sgg.CD_GROUP_ID = 'ORG_CD' AND sgg.CD_ID = ar.SGG_CD
LEFT JOIN tb_user regUser ON regUser.USER_ID = ar.RGTR
LEFT JOIN tb_ownr o ON o.OWNR_ID = ar.OWNR_ID AND o.DEL_YN = 'N'
INNER JOIN tb_ownr o ON o.OWNR_ID = ar.OWNR_ID AND o.DEL_YN = 'N'
LEFT JOIN tb_cd_detail ownrSe ON ownrSe.CD_GROUP_ID = 'OWNR_SE_CD' AND ownrSe.CD_ID = o.OWNR_SE_CD
WHERE ar.ACTR_INFO_ID = #{actrInfoId}
AND ar.DEL_YN = 'N'

@ -87,26 +87,27 @@
<select id="selectOwnrInfoByPk" parameterType="String" resultType="CrdnOwnrInfoVO">
/* OwnrInfoMapper.selectOwnrInfoByPk : 소유자정보 상세 조회 */
SELECT
o.OWNR_INFO_ID,
o.SGG_CD,
o.CRDN_YR,
o.CRDN_NO,
o.PSTN_INFO_ID,
o.OWNR_ID,
o.REG_DT,
o.RGTR,
oi.OWNR_INFO_ID,
oi.SGG_CD,
oi.CRDN_YR,
oi.CRDN_NO,
oi.PSTN_INFO_ID,
oi.OWNR_ID,
oi.REG_DT,
oi.RGTR,
regUser.USER_ACNT AS RGTR_ACNT,
regUser.USER_NM AS RGTR_NM,
o.DEL_YN,
o.DEL_DT,
o.DLTR,
oi.DEL_YN,
oi.DEL_DT,
oi.DLTR,
delUser.USER_ACNT AS DLTR_ACNT,
delUser.USER_NM AS DLTR_NM
FROM tb_ownr_info o
LEFT JOIN tb_user regUser ON regUser.USER_ID = o.RGTR
LEFT JOIN tb_user delUser ON delUser.USER_ID = o.DLTR
WHERE o.OWNR_INFO_ID = #{ownrInfoId}
AND o.DEL_YN = 'N'
FROM tb_ownr_info oi
INNER JOIN tb_ownr o ON o.OWNR_ID = oi.OWNR_ID AND o.DEL_YN = 'N'
LEFT JOIN tb_user regUser ON regUser.USER_ID = oi.RGTR
LEFT JOIN tb_user delUser ON delUser.USER_ID = oi.DLTR
WHERE oi.OWNR_INFO_ID = #{ownrInfoId}
AND oi.DEL_YN = 'N'
</select>
<!-- 소유자정보 수정 - 필요시 사용 -->
@ -147,30 +148,31 @@
<!-- 중요로직: 중복된 소유자 정보 조회 (표출용) -->
<select id="selectDuplicateOwnrInfo" resultType="CrdnOwnrInfoVO">
/* OwnrInfoMapper.selectDuplicateOwnrInfo : 중복 소유자 정보 조회 */
SELECT
o.OWNR_INFO_ID,
o.SGG_CD,
o.CRDN_YR,
o.CRDN_NO,
o.PSTN_INFO_ID,
o.OWNR_ID,
o.REG_DT,
o.RGTR,
SELECT
oi.OWNR_INFO_ID,
oi.SGG_CD,
oi.CRDN_YR,
oi.CRDN_NO,
oi.PSTN_INFO_ID,
oi.OWNR_ID,
oi.REG_DT,
oi.RGTR,
regUser.USER_ACNT AS RGTR_ACNT,
regUser.USER_NM AS RGTR_NM,
o.DEL_YN,
o.DEL_DT,
o.DLTR,
oi.DEL_YN,
oi.DEL_DT,
oi.DLTR,
delUser.USER_ACNT AS DLTR_ACNT,
delUser.USER_NM AS DLTR_NM
FROM tb_ownr_info o
LEFT JOIN tb_user regUser ON regUser.USER_ID = o.RGTR
LEFT JOIN tb_user delUser ON delUser.USER_ID = o.DLTR
WHERE o.CRDN_YR = #{crdnYr}
AND o.CRDN_NO = #{crdnNo}
AND o.PSTN_INFO_ID = #{pstnInfoId}
AND o.OWNR_ID = #{ownrId}
AND o.DEL_YN = 'N'
FROM tb_ownr_info oi
INNER JOIN tb_ownr o ON o.OWNR_ID = oi.OWNR_ID AND o.DEL_YN = 'N'
LEFT JOIN tb_user regUser ON regUser.USER_ID = oi.RGTR
LEFT JOIN tb_user delUser ON delUser.USER_ID = oi.DLTR
WHERE oi.CRDN_YR = #{crdnYr}
AND oi.CRDN_NO = #{crdnNo}
AND oi.PSTN_INFO_ID = #{pstnInfoId}
AND oi.OWNR_ID = #{ownrId}
AND oi.DEL_YN = 'N'
LIMIT 1
</select>

@ -323,6 +323,7 @@
return {
crdnYr: crdnYr,
crdnNo: crdnNo,
sggCd: owner.sggCd,
pstnInfoId: pstnInfoId,
actInfoId: actInfoId,
ownrId: owner.ownrId

@ -81,11 +81,11 @@
</td>
</tr>
<tr>
<th class="th"><span class="required">*</span> 지적(PTOUT)</th>
<th class="th"><span class="required">*</span> 지적</th>
<td>
<input type="text" id="ptout" name="ptout" class="input ptoutMask" style="width: 180px;" maxlength="25" placeholder="예) 12345.67" validation-check="required number" value="${data.ptout}"/>
</td>
<th class="th"><span class="required">*</span> 공시지가(OALP)</th>
<th class="th"><span class="required">*</span> 공시지가</th>
<td>
<input type="text" id="oalp" name="oalp" class="input oalpMask" style="width: 180px;" maxlength="13" placeholder="예) 1000000" validation-check="required integer" value="${data.oalp}"/>
</td>

@ -37,10 +37,9 @@
gridConfig.setOptGridId('grid3'); // 그리드를 출력할 Element ID
gridConfig.setOptGridHeight(200); // 그리드 높이(단위: px)
gridConfig.setOptRowHeight(30); // 그리드 행 높이(단위: px)
gridConfig.setOptRowHeaderType('rowNum'); // 행 첫번째 셀 타입(rowNum: 순번)
gridConfig.setOptUseClientSort(true); // 클라이언트 사이드 정렬
gridConfig.setOptRowHeaderType('checkbox');
gridConfig.setOptRowHeaderType('');
gridConfig.setOptColumns(this.getGridColumns());
return gridConfig;
@ -68,13 +67,16 @@
width: 120
},
{
header: '위반법규',
name: 'vltnLaw1',
header: '행위유형',
name: 'actTypeCdNm',
align: 'center',
width: 120,
formatter: function (e) {
return e.row.vltnLaw1 || '';
}
width: 120
},
{
header: '행위번호',
name: 'actNo',
align: 'center',
width: 80,
},
{
header: '위반법규2',
@ -366,8 +368,13 @@
return;
}
var checkedRows = this.grid.instance.getCheckedRows();
if (checkedRows.length === 0) {
// checkbox 에서 focus 로 수정
//var checkedRows = this.grid.instance.getCheckedRows();
var focusedCell = this.grid.instance.getFocusedCell();
var rowKey = focusedCell.rowKey;
var rowData = this.grid.instance.getRow(rowKey);
var checkedRows = [rowData];
if (!rowData || checkedRows.length === 0) {
alert('삭제할 항목을 선택해 주세요.');
return;
}
@ -393,6 +400,8 @@
alert('불법행위 정보가 성공적으로 삭제되었습니다.');
// 중요로직: 그리드 리로드 처리
self.search();
// 삭제 시 삭제된 actInfoId 값을 찾아서 포커스 해주려고해서 그리드 깨짐
CrdnDetailView.actInfoId = null;
} else {
alert(response.message || '삭제 중 오류가 발생했습니다.');
}

@ -259,23 +259,8 @@
*/
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;
}
if (!this.validate()) return;
// 폼 데이터 수집
var formData = {
@ -309,17 +294,77 @@
});
}
},
/**
* 폼 유효성 검증
* baseData/bldgNewPrcCrtrAmt/popup.jsp 패턴과 동일하게 적용
* @returns {boolean} 유효성 검증 결과
*/
validate: function() {
// 기본 validation-check 속성 기반 검증
var isValid = validateFormByAttributes('crdnForm');
if (isValid) {
// 지역구분 검증
if (!$.trim($('#rgnSeCd').val())) {
var rgnSeElement = document.getElementById('rgnSeCd');
errorElementCreate(rgnSeElement, '지역구분을 선택하세요.', false);
$('#rgnSeCd').focus();
return false;
}
// 적발방법 검증
if (!$.trim($('#dsclMthdCd').val())) {
var dsclMthdElement = document.getElementById('dsclMthdCd');
errorElementCreate(dsclMthdElement, '적발방법을 선택하세요.', false);
$('#dsclMthdCd').focus();
return false;
}
// 재부과여부 검증
if (!$.trim($('#relevyYn').val())) {
var relevyElement = document.getElementById('relevyYn');
errorElementCreate(relevyElement, '재부과여부를 선택하세요.', false);
$('#relevyYn').focus();
return false;
}
// 비고 글자수 검증 (varchar(1000) 제한)
var rmrk = $.trim($('#rmrk').val());
if (rmrk && rmrk.length > 1000) {
var rmrkElement = document.getElementById('rmrk');
errorElementCreate(rmrkElement, '비고는 1000자 이내로 입력하세요. (현재: ' + rmrk.length + '자)', false);
$('#rmrk').focus();
return false;
}
}
return isValid;
},
/**
* 폼 초기화 (취소 기능)
*/
resetForm: function() {
/**
* 모든 유효성 검증 에러 메시지 제거
*/
clearValidationErrors: function () {
// 폼 내의 모든 에러 메시지 제거
$('#crdnForm').find('.error-message').remove();
// 에러 표시 스타일 제거
$('#crdnForm').find('.is-invalid').removeClass('is-invalid');
},
resetForm: function () {
if (confirm('변경사항을 취소하고 원래 데이터로 되돌리시겠습니까?')) {
if (this.currentData) {
this.populateForm(this.currentData);
} else {
this.loadCrdnData();
}
// 유효성 검증 에러 메시지 제거
this.clearValidationErrors();
}
},

@ -37,7 +37,7 @@
gridConfig.setOptGridId('pstnGrid'); // 그리드를 출력할 Element ID
gridConfig.setOptGridHeight(200); // 그리드 높이(단위: px)
gridConfig.setOptRowHeight(30); // 그리드 행 높이(단위: px)
gridConfig.setOptRowHeaderType('checkbox'); // 행 첫번째 셀 타입(checkbox: 체크박스)
gridConfig.setOptRowHeaderType(''); // 행 첫번째 셀 타입(checkbox: 체크박스)
gridConfig.setOptUseClientSort(true); // 클라이언트 사이드 정렬
gridConfig.setOptColumns(this.getGridColumns());
@ -58,8 +58,8 @@
{ header: '우편번호', name: 'zip', align: 'center', width: 90 },
{ header: '지번 전체주소', name: 'lotnoWholAddr', align: 'left', width: 300 },
{ header: '지목', name: 'ldcgCdNm', align: 'center', width: 90 },
{ header: '지적(PTOUT)', name: 'ptout', align: 'right', width: 180, formatter: function(e){ return e.value != null ? Number(e.value).toLocaleString(undefined, { minimumFractionDigits: 0, maximumFractionDigits: 2 }) : ''; } },
{ header: '공시지가(OALP)', name: 'oalp', align: 'right', width: 180, formatter: function(e){ return e.value != null ? Number(e.value).toLocaleString() : ''; } },
{ header: '지적', name: 'ptout', align: 'right', width: 180, formatter: function(e){ return e.value != null ? Number(e.value).toLocaleString(undefined, { minimumFractionDigits: 0, maximumFractionDigits: 2 }) : ''; } },
{ header: '공시지가', name: 'oalp', align: 'right', width: 180, formatter: function(e){ return e.value != null ? Number(e.value).toLocaleString() : ''; } },
{ header: '도로명 전체주소', name: 'roadNmWholAddr', align: 'left', width: 220, hidden: true },
{ header: '지번 주소', name: 'lotnoAddr', align: 'left', width: 180, hidden: true },
{ header: '도로명 주소', name: 'roadNmAddr', align: 'left', width: 200, hidden: true },
@ -197,7 +197,6 @@
this.instance.on('click', function(ev) {
if (ev.rowKey !== undefined && ev.rowKey !== null) {
var rowData = self.instance.getRow(ev.rowKey);
//console.log('위치 정보 행 클릭:', rowData);
CrdnDetailView.pstnInfoId = rowData.pstnInfoId;
// 아래는 위치정보가 여러개 일 경우 대비, 현재는 주석
//window.CrdnDetailView.refreshOtherGridsAfterLocation();
@ -208,7 +207,6 @@
this.instance.on('dblclick', function(ev) {
var rowKey = ev.rowKey;
var rowData = self.instance.getRow(rowKey);
//console.log('위치 정보 행 더블클릭:', rowData);
if (rowData) {
CrdnDetailView.pstnInfoId = rowData.pstnInfoId;
self.openEditPopup(rowData);
@ -284,9 +282,14 @@
alert('위치정보 그리드가 초기화되지 않았습니다.');
return;
}
var checkedRows = this.grid.instance.getCheckedRows();
if (checkedRows.length === 0) {
// checkbox 에서 focus 로 수정
//var checkedRows = this.grid.instance.getCheckedRows();
var focusedCell = this.grid.instance.getFocusedCell();
var rowKey = focusedCell.rowKey;
var rowData = this.grid.instance.getRow(rowKey);
var checkedRows = [rowData];
if (!rowData || checkedRows.length === 0) {
alert('삭제할 위치정보를 선택해주세요.');
return;
}
@ -327,6 +330,8 @@
alert('선택된 위치정보가 삭제되었습니다.');
// 중요로직: 그리드 리로드 처리
self.search();
// 삭제 시 삭제된 actInfoId 값을 찾아서 포커스 해주려고해서 그리드 깨짐
CrdnDetailView.pstnInfoId = null;
} else {
alert(response.message || '위치정보 삭제에 실패했습니다.');
}

@ -187,7 +187,7 @@
gridConfig.setOptGridHeight(470); // 그리드 높이(단위: px)
gridConfig.setOptRowHeight(30); // 그리드 행 높이(단위: px)
gridConfig.setOptRowHeaderType(''); // 행 첫번째 셀 타입 비활성화 (라디오 버튼을 컬럼으로 구현)
gridConfig.setOptUseClientSort(false); // 서버사이드 정렬 false
gridConfig.setOptUseClientSort(false); // 서버사이드 정렬 false
// 페이징 옵션 설정
gridConfig.setOptPageOptions({
@ -206,21 +206,6 @@
getGridColumns: function() {
var self = this;
return [
{
header: '선택',
name: '_radio',
align: 'center',
width: 50,
sortable: false,
renderer: {
type: XitRadioRenderer,
options: {
radioName: 'gridRowRadio',
targetObject: 'CrdnRegistAndViewList',
selectedRowProperty: 'selectedRow'
}
}
},
{
header: '번호',
name: '_rowNum',
@ -242,15 +227,13 @@
name: 'crdnYr',
align: 'center',
width: 80,
sortingType: 'desc',
sortable: true
sortingType: 'desc'
},
{
header: '단속번호',
name: 'crdnNo',
align: 'center',
width: 90,
sortable: true
width: 90
},
{
header: '지역구분',
@ -404,22 +387,19 @@
GRID_PAGINATION_INFO.perPage = responseObj.data.pagination.perPage;
}
// 라디오 버튼 모두 해제
document.querySelectorAll('input[name="gridRowRadio"]').forEach(function(radio) {
radio.checked = false;
});
// 선택된 행 초기화
CrdnRegistAndViewList.selectedRow = null;
});
this.instance.on('focusChange', function(ev) {
CrdnRegistAndViewList.selectedRow = self.instance.getRow(ev.rowKey);
});
// 행 선택 이벤트
this.instance.on('selection', function(ev) {
if (ev.range && ev.range.row && ev.range.row.length > 0) {
var rowKey = ev.range.row[0];
CrdnRegistAndViewList.selectedRow = self.instance.getRow(rowKey);
// XitRadioRenderer 동기화 함수 사용
XitRadioRenderer.syncRadioSelection(rowKey, 'gridRowRadio');
}
});
@ -427,9 +407,6 @@
this.instance.on('click', function(ev) {
if (ev.rowKey !== undefined && ev.rowKey !== null) {
CrdnRegistAndViewList.selectedRow = self.instance.getRow(ev.rowKey);
// XitRadioRenderer 동기화 함수 사용
XitRadioRenderer.syncRadioSelection(ev.rowKey, 'gridRowRadio');
}
});
@ -469,7 +446,7 @@
},
/**
* 목록 새로고침
* 목록 현재 페이징 새로고침
*/
refreshList: function() {
if (this.grid.instance) {
@ -477,6 +454,15 @@
}
},
/**
* 목록 조회
*/
search: function() {
if (this.grid.instance) {
this.grid.instance.readData();
}
},
/**
* 단속 상태를 업데이트합니다.
* 선택된 행이 있을 때만 상태를 업데이트합니다.
@ -608,11 +594,7 @@
$('#perPageSelect').on('change', function() {
var perPage = parseInt($(this).val(), 10);
self.grid.instance.setPerPage(perPage);
// 라디오 버튼 모두 해제
document.querySelectorAll('input[name="gridRowRadio"]').forEach(function(radio) {
radio.checked = false;
});
// 선택된 행 초기화
self.selectedRow = null;
@ -644,5 +626,8 @@
CrdnRegistAndViewList.init();
});
// 전역 네임스페이스에 모듈 노출
window.CrdnRegistAndViewList = CrdnRegistAndViewList;
})(window, jQuery);
</script>

@ -144,21 +144,6 @@
getGridColumns: function() {
var self = this;
return [
{
header: '선택',
name: '_radio',
align: 'center',
width: 50,
sortable: false,
renderer: {
type: XitRadioRenderer,
options: {
radioName: 'gridRowRadio',
targetObject: 'ExmnrList',
selectedRowProperty: 'selectedRow'
}
}
},
{
header: '번호',
name: '_rowNum',
@ -265,32 +250,18 @@
GRID_PAGINATION_INFO.perPage = responseObj.data.pagination.perPage;
}
// 라디오 버튼 모두 해제
document.querySelectorAll('input[name="gridRowRadio"]').forEach(function(radio) {
radio.checked = false;
});
// 선택된 행 초기화
ExmnrList.selectedRow = null;
});
// 행 선택 이벤트
this.instance.on('selection', function(ev) {
if (ev.range && ev.range.row && ev.range.row.length > 0) {
var rowKey = ev.range.row[0];
ExmnrList.selectedRow = self.instance.getRow(rowKey);
// XitRadioRenderer 동기화 함수 사용
XitRadioRenderer.syncRadioSelection(rowKey, 'gridRowRadio');
}
this.instance.on('focusChange', function(ev) {
ExmnrList.selectedRow = self.instance.getRow(ev.rowKey);
});
// 행 클릭 이벤트 - 라디오 버튼 즉시 체크를 위해 추가
this.instance.on('click', function(ev) {
if (ev.rowKey !== undefined && ev.rowKey !== null) {
ExmnrList.selectedRow = self.instance.getRow(ev.rowKey);
// XitRadioRenderer 동기화 함수 사용
XitRadioRenderer.syncRadioSelection(ev.rowKey, 'gridRowRadio');
}
});
@ -300,13 +271,6 @@
var rowData = self.instance.getRow(rowKey);
if (rowData) {
ExmnrList.openViewPopup(rowData.exmnrId);
// var paramCond = Object.assign({}, SEARCH_COND);
// paramCond.crdnYr = rowData.crdnYr;
// paramCond.crdnNo = rowData.crdnNo;
// 새 탭으로 열기 - 컨트롤러가 요구하는 파라미터명으로 전달 (crdnYr, crdnNo)
// var detailUrl = buildUrlWithParamCondAndMultipleKeys(null, {"crdnYr": rowData.crdnYr, "crdnNo": rowData.crdnNo}, "<c:url value="/crdn/crndRegistAndView/detailView.do"/>");
// window.open(detailUrl, 'crdnDetailView');
}
});
@ -385,11 +349,7 @@
$('#perPageSelect').on('change', function() {
var perPage = parseInt($(this).val(), 10);
self.grid.instance.setPerPage(perPage);
// 라디오 버튼 모두 해제
document.querySelectorAll('input[name="gridRowRadio"]').forEach(function(radio) {
radio.checked = false;
});
// 선택된 행 초기화
self.selectedRow = null;

@ -146,21 +146,6 @@
getGridColumns: function() {
var self = this;
return [
{
header: '선택',
name: '_radio',
align: 'center',
width: 50,
sortable: false,
renderer: {
type: XitRadioRenderer,
options: {
radioName: 'gridRowRadio',
targetObject: 'OwnActRegistAndViewList',
selectedRowProperty: 'selectedRow'
}
}
},
{
header: '번호',
name: '_rowNum',
@ -304,32 +289,18 @@
GRID_PAGINATION_INFO.perPage = responseObj.data.pagination.perPage;
}
// 라디오 버튼 모두 해제
document.querySelectorAll('input[name="gridRowRadio"]').forEach(function(radio) {
radio.checked = false;
});
// 선택된 행 초기화
OwnActRegistAndViewList.selectedRow = null;
});
// 행 선택 이벤트
this.instance.on('selection', function(ev) {
if (ev.range && ev.range.row && ev.range.row.length > 0) {
var rowKey = ev.range.row[0];
OwnActRegistAndViewList.selectedRow = self.instance.getRow(rowKey);
// XitRadioRenderer 동기화 함수 사용
XitRadioRenderer.syncRadioSelection(rowKey, 'gridRowRadio');
}
this.instance.on('focusChange', function(ev) {
OwnActRegistAndViewList.selectedRow = self.instance.getRow(ev.rowKey);
});
// 행 클릭 이벤트 - 라디오 버튼 즉시 체크를 위해 추가
this.instance.on('click', function(ev) {
if (ev.rowKey !== undefined && ev.rowKey !== null) {
OwnActRegistAndViewList.selectedRow = self.instance.getRow(ev.rowKey);
// XitRadioRenderer 동기화 함수 사용
XitRadioRenderer.syncRadioSelection(ev.rowKey, 'gridRowRadio');
}
});
@ -422,11 +393,7 @@
$('#perPageSelect').on('change', function() {
var perPage = parseInt($(this).val(), 10);
self.grid.instance.setPerPage(perPage);
// 라디오 버튼 모두 해제
document.querySelectorAll('input[name="gridRowRadio"]').forEach(function(radio) {
radio.checked = false;
});
// 선택된 행 초기화
self.selectedRow = null;

Loading…
Cancel
Save