단속 > 단속 등록&열람: 위치지수/용도지수/위반법규 VO 추가 및 조회 기능 구현, 등록 팝업에 드롭다운 연동, UI 개선

dev
박성영 4 months ago
parent ebe2289e39
commit baafd38c13

@ -7,6 +7,9 @@ import go.kr.project.common.model.CmmnCodeSearchVO;
import go.kr.project.common.service.CommonCodeService;
import go.kr.project.crdn.crndRegistAndView.crdnActInfo.model.CrdnActInfoVO;
import go.kr.project.crdn.crndRegistAndView.crdnActInfo.model.CrdnStrctIdxVO;
import go.kr.project.crdn.crndRegistAndView.crdnActInfo.model.CrdnVltnLwrgVO;
import go.kr.project.crdn.crndRegistAndView.crdnActInfo.model.CrdnUsgIdxVO;
import go.kr.project.crdn.crndRegistAndView.crdnActInfo.model.CrdnPstnIdxVO;
import go.kr.project.crdn.crndRegistAndView.crdnActInfo.service.CrdnActInfoService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
@ -133,6 +136,57 @@ public class CrdnActInfoController {
return ApiResponseUtil.success(list);
}
/**
* (AJAX)
* @return
*/
@Operation(summary = "전체 위반법규 조회", description = "전체 위반법규 목록을 조회합니다.")
@ApiResponses(value = {
@ApiResponse(responseCode = "200", description = "조회 성공"),
@ApiResponse(responseCode = "500", description = "서버 오류")
})
@PostMapping("/getAllVltnLwrg.ajax")
@ResponseBody
public ResponseEntity<?> getAllVltnLwrgAjax() {
log.debug("전체 위반법규 조회 요청");
List<CrdnVltnLwrgVO> list = service.getAllVltnLwrg();
return ApiResponseUtil.success(list);
}
/**
* (AJAX)
* @return
*/
@Operation(summary = "전체 용도지수 조회", description = "전체 용도지수 목록을 조회합니다.")
@ApiResponses(value = {
@ApiResponse(responseCode = "200", description = "조회 성공"),
@ApiResponse(responseCode = "500", description = "서버 오류")
})
@PostMapping("/getAllUsgIdx.ajax")
@ResponseBody
public ResponseEntity<?> getAllUsgIdxAjax() {
log.debug("전체 용도지수 조회 요청");
List<CrdnUsgIdxVO> list = service.getAllUsgIdx();
return ApiResponseUtil.success(list);
}
/**
* (AJAX)
* @return
*/
@Operation(summary = "전체 위치지수 조회", description = "전체 위치지수 목록을 조회합니다.")
@ApiResponses(value = {
@ApiResponse(responseCode = "200", description = "조회 성공"),
@ApiResponse(responseCode = "500", description = "서버 오류")
})
@PostMapping("/getAllPstnIdx.ajax")
@ResponseBody
public ResponseEntity<?> getAllPstnIdxAjax() {
log.debug("전체 위치지수 조회 요청");
List<CrdnPstnIdxVO> list = service.getAllPstnIdx();
return ApiResponseUtil.success(list);
}
/**
* (AJAX)
* @param vo

@ -2,6 +2,9 @@ package go.kr.project.crdn.crndRegistAndView.crdnActInfo.mapper;
import go.kr.project.crdn.crndRegistAndView.crdnActInfo.model.CrdnActInfoVO;
import go.kr.project.crdn.crndRegistAndView.crdnActInfo.model.CrdnStrctIdxVO;
import go.kr.project.crdn.crndRegistAndView.crdnActInfo.model.CrdnVltnLwrgVO;
import go.kr.project.crdn.crndRegistAndView.crdnActInfo.model.CrdnUsgIdxVO;
import go.kr.project.crdn.crndRegistAndView.crdnActInfo.model.CrdnPstnIdxVO;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@ -61,4 +64,22 @@ public interface CrdnActInfoMapper {
*/
List<CrdnStrctIdxVO> getAllStrctIdx(CrdnStrctIdxVO vo);
/**
*
* @return
*/
List<CrdnVltnLwrgVO> getAllVltnLwrg();
/**
*
* @return
*/
List<CrdnUsgIdxVO> getAllUsgIdx();
/**
*
* @return
*/
List<CrdnPstnIdxVO> getAllPstnIdx();
}

@ -0,0 +1,68 @@
package go.kr.project.crdn.crndRegistAndView.crdnActInfo.model;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
* VO
* : TB_PSTN_IDX VO
*/
@Data
public class CrdnPstnIdxVO {
/**
*
*/
private String pstnIdxNo;
/**
*
*/
private BigDecimal bldgAnxLandBgngPrc;
/**
*
*/
private BigDecimal bldgAnxLandEndPrc;
/**
*
*/
private BigDecimal pstnIdx;
/**
*
*/
private LocalDateTime regDt;
/**
*
*/
private String rgtr;
/**
*
*/
private LocalDateTime mdfcnDt;
/**
*
*/
private String mdfr;
/**
*
*/
private String delYn;
/**
*
*/
private LocalDateTime delDt;
/**
*
*/
private String dltr;
}

@ -0,0 +1,73 @@
package go.kr.project.crdn.crndRegistAndView.crdnActInfo.model;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
* VO
* : TB_USG_IDX VO
*/
@Data
public class CrdnUsgIdxVO {
/**
*
*/
private String usgIdxCd;
/**
*
*/
private String usgNm;
/**
*
*/
private BigDecimal usgIdx;
/**
*
*/
private String mainUsgNm;
/**
*
*/
private String lwrUsgNm;
/**
*
*/
private LocalDateTime regDt;
/**
*
*/
private String rgtr;
/**
*
*/
private LocalDateTime mdfcnDt;
/**
*
*/
private String mdfr;
/**
*
*/
private String delYn;
/**
*
*/
private LocalDateTime delDt;
/**
*
*/
private String dltr;
}

@ -0,0 +1,72 @@
package go.kr.project.crdn.crndRegistAndView.crdnActInfo.model;
import lombok.Data;
import java.time.LocalDateTime;
/**
* VO
* : TB_VLTN_LWRG VO
*/
@Data
public class CrdnVltnLwrgVO {
/**
*
*/
private String vltnLwrgCd;
/**
*
*/
private String vltnLwrgNm;
/**
*
*/
private String vltnLaw;
/**
*
*/
private LocalDateTime regDt;
/**
*
*/
private String rgtr;
/**
*
*/
private LocalDateTime mdfcnDt;
/**
*
*/
private String mdfr;
/**
*
*/
private String delYn;
/**
*
*/
private LocalDateTime delDt;
/**
*
*/
private String dltr;
/**
*
*/
private String crcLaw;
/**
*
*/
private String impltLaw;
}

@ -2,6 +2,9 @@ package go.kr.project.crdn.crndRegistAndView.crdnActInfo.service;
import go.kr.project.crdn.crndRegistAndView.crdnActInfo.model.CrdnActInfoVO;
import go.kr.project.crdn.crndRegistAndView.crdnActInfo.model.CrdnStrctIdxVO;
import go.kr.project.crdn.crndRegistAndView.crdnActInfo.model.CrdnVltnLwrgVO;
import go.kr.project.crdn.crndRegistAndView.crdnActInfo.model.CrdnUsgIdxVO;
import go.kr.project.crdn.crndRegistAndView.crdnActInfo.model.CrdnPstnIdxVO;
import java.util.List;
@ -66,4 +69,22 @@ public interface CrdnActInfoService {
*/
List<CrdnStrctIdxVO> getAllStrctIdx(CrdnStrctIdxVO vo);
/**
*
* @return
*/
List<CrdnVltnLwrgVO> getAllVltnLwrg();
/**
*
* @return
*/
List<CrdnUsgIdxVO> getAllUsgIdx();
/**
*
* @return
*/
List<CrdnPstnIdxVO> getAllPstnIdx();
}

@ -5,6 +5,9 @@ import egovframework.util.SessionUtil;
import go.kr.project.crdn.crndRegistAndView.crdnActInfo.mapper.CrdnActInfoMapper;
import go.kr.project.crdn.crndRegistAndView.crdnActInfo.model.CrdnActInfoVO;
import go.kr.project.crdn.crndRegistAndView.crdnActInfo.model.CrdnStrctIdxVO;
import go.kr.project.crdn.crndRegistAndView.crdnActInfo.model.CrdnVltnLwrgVO;
import go.kr.project.crdn.crndRegistAndView.crdnActInfo.model.CrdnUsgIdxVO;
import go.kr.project.crdn.crndRegistAndView.crdnActInfo.model.CrdnPstnIdxVO;
import go.kr.project.crdn.crndRegistAndView.crdnActInfo.service.CrdnActInfoService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@ -99,6 +102,24 @@ public class CrdnActInfoServiceImpl extends EgovAbstractServiceImpl implements C
return mapper.getAllStrctIdx(vo);
}
@Override
public List<CrdnVltnLwrgVO> getAllVltnLwrg() {
log.debug("전체 위반법규 조회");
return mapper.getAllVltnLwrg();
}
@Override
public List<CrdnUsgIdxVO> getAllUsgIdx() {
log.debug("전체 용도지수 조회");
return mapper.getAllUsgIdx();
}
@Override
public List<CrdnPstnIdxVO> getAllPstnIdx() {
log.debug("전체 위치지수 조회");
return mapper.getAllPstnIdx();
}
/**
* ()
* : .

@ -227,4 +227,45 @@
ORDER BY STRCT_IDX_CD
</select>
<!-- 전체 위반법규 목록 조회 -->
<select id="getAllVltnLwrg" resultType="CrdnVltnLwrgVO">
/* ActInfoMapper.getAllVltnLwrg : 전체 위반법규 목록 조회 */
SELECT
VLTN_LWRG_CD,
VLTN_LWRG_NM,
VLTN_LAW,
CRC_LAW,
IMPLT_LAW
FROM tb_vltn_lwrg
WHERE DEL_YN = 'N'
ORDER BY VLTN_LWRG_CD
</select>
<!-- 전체 용도지수 목록 조회 -->
<select id="getAllUsgIdx" resultType="CrdnUsgIdxVO">
/* ActInfoMapper.getAllUsgIdx : 전체 용도지수 목록 조회 */
SELECT
USG_IDX_CD,
USG_NM,
USG_IDX,
MAIN_USG_NM,
LWR_USG_NM
FROM tb_usg_idx
WHERE DEL_YN = 'N'
ORDER BY USG_IDX_CD
</select>
<!-- 전체 위치지수 목록 조회 -->
<select id="getAllPstnIdx" resultType="CrdnPstnIdxVO">
/* ActInfoMapper.getAllPstnIdx : 전체 위치지수 목록 조회 */
SELECT
PSTN_IDX_NO,
BLDG_ANX_LAND_BGNG_PRC,
BLDG_ANX_LAND_END_PRC,
PSTN_IDX
FROM tb_pstn_idx
WHERE DEL_YN = 'N'
ORDER BY PSTN_IDX_NO
</select>
</mapper>

@ -49,23 +49,15 @@
</tr>
<tr>
<th class="th">위반법규1</th>
<td>
<select id="vltnLwrgCd1" name="vltnLwrgCd1" class="input" style="width: 180px;">
<option value="">선택하세요</option>
<c:forEach var="code" items="${vltnLwrgCdList}">
<option value="${code.cdId}" <c:if test="${data.vltnLwrgCd1 eq code.cdId}">selected</c:if>>${code.cdNm}</option>
</c:forEach>
</select>
<td colspan="3">
<input type="text" id="vltnLwrgNm1" name="vltnLwrgNm1" class="input" style="width: 200px;" placeholder="위반법규를 입력하거나 선택하세요" autocomplete="off" value="${data.vltnLwrgCd1Nm}"/>
<input type="hidden" id="vltnLwrgCd1" name="vltnLwrgCd1" value="${data.vltnLwrgCd1}"/>
</td>
<th class="th">위반법규2</th>
<%--<th class="th">위반법규2</th>
<td>
<select id="vltnLwrgCd2" name="vltnLwrgCd2" class="input" style="width: 180px;">
<option value="">선택하세요</option>
<c:forEach var="code" items="${vltnLwrgCdList}">
<option value="${code.cdId}" <c:if test="${data.vltnLwrgCd2 eq code.cdId}">selected</c:if>>${code.cdNm}</option>
</c:forEach>
</select>
</td>
<input type="text" id="vltnLwrgNm2" name="vltnLwrgNm2" class="input" style="width: 200px;" placeholder="위반법규를 입력하거나 선택하세요" autocomplete="off" value="${data.vltnLwrgCd2Nm}"/>
<input type="hidden" id="vltnLwrgCd2" name="vltnLwrgCd2" value="${data.vltnLwrgCd2}"/>
</td>--%>
</tr>
<tr>
<th class="th">구조지수</th>
@ -75,12 +67,8 @@
</td>
<th class="th">용도지수</th>
<td>
<select id="usgIdxCd" name="usgIdxCd" class="input" style="width: 180px;">
<option value="">선택하세요</option>
<c:forEach var="code" items="${usgIdxCdList}">
<option value="${code.cdId}" <c:if test="${data.usgIdxCd eq code.cdId}">selected</c:if>>${code.cdNm}</option>
</c:forEach>
</select>
<input type="text" id="usgNm" name="usgNm" class="input" style="width: 200px;" placeholder="용도명을 입력하거나 선택하세요" autocomplete="off" value="${data.usgIdxCdNm}"/>
<input type="hidden" id="usgIdxCd" name="usgIdxCd" value="${data.usgIdxCd}"/>
</td>
</tr>
<tr>
@ -147,14 +135,19 @@
}
});
// 구조지수 드롭다운 초기화 (XIT 공통 컴포넌트 사용)
// 드롭다운 초기화 (XIT 공통 컴포넌트 사용)
initStrctIdxDropdown();
initVltnLwrgDropdowns();
initUsgIdxDropdown();
console.log('불법행위정보 팝업이 초기화되었습니다. 모드:', mode);
});
// 구조지수 드롭다운 인스턴스
// 드롭다운 인스턴스
var strctIdxDropdown;
var vltnLwrg1Dropdown;
var vltnLwrg2Dropdown;
var usgIdxDropdown;
/**
* 구조지수 드롭다운 초기화
@ -206,6 +199,131 @@
});
}
/**
* 위반법규 드롭다운들 초기화
* 중요한 로직 주석: 위반법규1과 위반법규2에 동일한 데이터를 사용하는 드롭다운을 생성한다.
*/
function initVltnLwrgDropdowns() {
// 위반법규1 드롭다운 초기화
vltnLwrg1Dropdown = new XitDropdown({
inputSelector: '#vltnLwrgNm1',
hiddenSelector: '#vltnLwrgCd1',
dataUrl: '<c:url value="/crdn/crndRegistAndView/crdnActInfo/getAllVltnLwrg.ajax"/>',
width: '400px',
maxHeight: '300px',
valueField: 'vltnLwrgCd',
textField: 'vltnLwrgNm',
searchField: 'vltnLwrgNm',
placeholder: '위반법규를 입력하거나 선택하세요',
noResultsText: '검색 결과가 없습니다',
cssClass: 'vltn-lwrg-dropdown',
displayFields: [
{
name: 'vltnLaw',
label: '위반법',
formatter: function(value) {
return value || '-';
}
},
{
name: 'crcLaw',
label: '시정법',
formatter: function(value) {
return value || '-';
}
},
{
name: 'impltLaw',
label: '이행법',
formatter: function(value) {
return value || '-';
}
}
]
});
// 위반법규2 드롭다운 초기화
vltnLwrg2Dropdown = new XitDropdown({
inputSelector: '#vltnLwrgNm2',
hiddenSelector: '#vltnLwrgCd2',
dataUrl: '<c:url value="/crdn/crndRegistAndView/crdnActInfo/getAllVltnLwrg.ajax"/>',
width: '400px',
maxHeight: '300px',
valueField: 'vltnLwrgCd',
textField: 'vltnLwrgNm',
searchField: 'vltnLwrgNm',
placeholder: '위반법규를 입력하거나 선택하세요',
noResultsText: '검색 결과가 없습니다',
cssClass: 'vltn-lwrg-dropdown',
displayFields: [
{
name: 'vltnLaw',
label: '위반법',
formatter: function(value) {
return value || '-';
}
},
{
name: 'crcLaw',
label: '시정법',
formatter: function(value) {
return value || '-';
}
},
{
name: 'impltLaw',
label: '이행법',
formatter: function(value) {
return value || '-';
}
}
]
});
}
/**
* 용도지수 드롭다운 초기화
* 중요한 로직 주석: XIT 공통 드롭다운 컴포넌트를 사용하여 용도지수 선택 기능을 구현한다.
*/
function initUsgIdxDropdown() {
usgIdxDropdown = new XitDropdown({
inputSelector: '#usgNm',
hiddenSelector: '#usgIdxCd',
dataUrl: '<c:url value="/crdn/crndRegistAndView/crdnActInfo/getAllUsgIdx.ajax"/>',
width: '500px',
maxHeight: '300px',
valueField: 'usgIdxCd',
textField: 'usgNm',
searchField: 'usgNm',
placeholder: '용도명을 입력하거나 선택하세요',
noResultsText: '검색 결과가 없습니다',
cssClass: 'usg-idx-dropdown',
displayFields: [
{
name: 'usgIdx',
label: '용도지수',
formatter: function(value) {
return value ? parseFloat(value).toFixed(2) : '-';
}
},
{
name: 'mainUsgNm',
label: '주요용도',
formatter: function(value) {
return value || '-';
}
},
{
name: 'lwrUsgNm',
label: '하위용도',
formatter: function(value) {
return value || '-';
}
}
]
});
}
/**
* 불법행위정보 저장 함수
* 중요한 로직 주석: validation 체크 후 mode에 따라 등록/수정 API를 호출한다.

@ -1647,7 +1647,7 @@ select[data-auto-color="true"] option[data-color] {
padding: 10px 12px;
cursor: pointer;
border-bottom: 1px solid #f5f5f5;
transition: background-color 0.2s;
transition: background-color 0.2s, color 0.2s;
}
.xit-dropdown-item:last-child {
@ -1655,12 +1655,13 @@ select[data-auto-color="true"] option[data-color] {
}
.xit-dropdown-item:hover {
background-color: #f8f9fa;
background-color: #e3f2fd !important;
color: #1976d2 !important;
}
.xit-dropdown-item.selected {
background-color: #e3f2fd;
color: #1976d2;
background-color: #e3f2fd !important;
color: #1976d2 !important;
}
.xit-dropdown-item.no-results {
@ -1682,6 +1683,10 @@ select[data-auto-color="true"] option[data-color] {
margin-bottom: 4px;
}
.xit-dropdown-item:hover .xit-dropdown-main {
color: #1976d2 !important;
}
/* 아이템 상세 정보 */
.xit-dropdown-details {
display: flex;
@ -1691,20 +1696,22 @@ select[data-auto-color="true"] option[data-color] {
}
.xit-dropdown-value {
color: #666;
background-color: #f8f9fa;
padding: 2px 6px;
color: #495057;
background-color: #f1f3f4;
padding: 3px 7px;
border-radius: 3px;
font-size: 11px;
font-weight: 500;
}
.xit-dropdown-item:hover .xit-dropdown-value {
background-color: #e9ecef;
background-color: #bbdefb !important;
color: #1565c0 !important;
}
.xit-dropdown-item.selected .xit-dropdown-value {
background-color: #bbdefb;
color: #1565c0;
background-color: #bbdefb !important;
color: #1565c0 !important;
}
/* 드롭다운 스크롤바 스타일 */

Loading…
Cancel
Save