히스토리 진행중...

internalApi
박성영 4 weeks ago
parent ee8fdeb045
commit 5bce83793a

@ -86,16 +86,16 @@ public class VehicleApiHistoryController {
/**
* .
*
* @param carBassMatterInqire ID
* @param carBassMatterInqireId ID
* @return
*/
@GetMapping("/carBassMatterInqire/selectOne.ajax")
@Operation(summary = "자동차 기본정보 조회 이력 상세 조회", description = "자동차 기본정보 조회 이력 상세를 조회합니다.")
public ResponseEntity<?> selectCarBassMatterInqireOne(
@Parameter(description = "자동차 기본 사항 조회 ID") @RequestParam String carBassMatterInqire) {
log.debug("자동차 기본정보 조회 이력 상세 조회 요청 - ID: {}", carBassMatterInqire);
@Parameter(description = "자동차 기본 사항 조회 ID") @RequestParam String carBassMatterInqireId) {
log.debug("자동차 기본정보 조회 이력 상세 조회 요청 - ID: {}", carBassMatterInqireId);
CarBassMatterInqireVO result = service.selectCarBassMatterInqireOne(carBassMatterInqire);
CarBassMatterInqireVO result = service.selectCarBassMatterInqireOne(carBassMatterInqireId);
if (result != null) {
return ApiResponseUtil.success(result, "조회가 완료되었습니다.");
} else {
@ -189,4 +189,40 @@ public class VehicleApiHistoryController {
return ApiResponseUtil.error("해당 정보를 찾을 수 없습니다.");
}
}
/**
*
*
* @param carBassMatterInqireId ID
* @param model
* @return
*/
@GetMapping("/carBassMatterInqire/popup.do")
@Operation(summary = "자동차 기본정보 조회 팝업", description = "자동차 기본정보를 조회하는 팝업 화면을 제공합니다.")
public String basicInfoPopup(@RequestParam String carBassMatterInqireId, Model model) {
log.debug("자동차 기본정보 조회 팝업 요청 - ID: {}", carBassMatterInqireId);
CarBassMatterInqireVO result = service.selectCarBassMatterInqireOne(carBassMatterInqireId);
model.addAttribute("data", result);
return "carInspectionPenalty/history/basicInfoPopup" + TilesConstants.POPUP;
}
/**
* ()
*
* @param carLedgerFrmbkId ID
* @param model
* @return ()
*/
@GetMapping("/carLedgerFrmbk/popup.do")
@Operation(summary = "자동차 등록원부(갑) 조회 팝업", description = "자동차 등록원부(갑) 정보를 조회하는 팝업 화면을 제공합니다.")
public String ledgerInfoPopup(@RequestParam String carLedgerFrmbkId, Model model) {
log.debug("자동차 등록원부(갑) 조회 팝업 요청 - ID: {}", carLedgerFrmbkId);
CarLedgerFrmbkVO result = service.selectCarLedgerFrmbkOne(carLedgerFrmbkId);
if (result != null) {
List<CarLedgerFrmbkDtlVO> details = service.selectCarLedgerFrmbkDtlList(carLedgerFrmbkId);
result.setRecord(details);
}
model.addAttribute("data", result);
return "carInspectionPenalty/history/ledgerInfoPopup" + TilesConstants.POPUP;
}
}

@ -5,6 +5,7 @@ import lombok.*;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import java.util.List;
/**
* packageName : go.kr.project.carInspectionPenalty.history.model
@ -268,4 +269,7 @@ public class CarLedgerFrmbkVO {
/** 등록자 */
private String rgtr;
/** 등록원부 변경 이력 */
private List<CarLedgerFrmbkDtlVO> record;
}

@ -84,7 +84,7 @@
.result-empty {
text-align: center;
padding: 40px;
padding: 0px;
color: #999;
font-size: 14px;
}
@ -120,6 +120,22 @@
margin-bottom: 10px;
font-weight: bold;
border-radius: 4px;
display: flex;
justify-content: space-between;
align-items: center;
}
.collapse-btn {
cursor: pointer;
font-size: 12px;
font-weight: normal;
padding: 2px 8px;
background-color: rgba(255,255,255,0.2);
border-radius: 3px;
}
.collapse-btn:hover {
background-color: rgba(255,255,255,0.4);
}
.result-section-title:first-child {
@ -324,7 +340,39 @@
emdNm: "역삼동",
prvntccnt: "0",
xportFlflAtSttemntDe: "",
partnRqrcno: ""
partnRqrcno: "",
record: [
{
mainchk: "Y",
changeJobSeCode: "01",
mainno: "001",
subno: "001",
dtls: "신규등록 - 차량번호: 12가3456, 소유자: 홍길동",
rqrcno: "2021031500001",
vhmno: "V202103150001",
ledgerGroupNo: "1234567890",
ledgerIndvdlzNo: "001",
gubunNm: "신규",
changeDe: "20210315",
detailSn: "001",
flag: "N"
},
{
mainchk: "N",
changeJobSeCode: "02",
mainno: "001",
subno: "002",
dtls: "주소변경 - 이전: 서울특별시 강남구 역삼동 123 -> 변경: 서울특별시 강남구 테헤란로 123",
rqrcno: "2022012000001",
vhmno: "V202103150001",
ledgerGroupNo: "1234567890",
ledgerIndvdlzNo: "001",
gubunNm: "변경",
changeDe: "20220120",
detailSn: "002",
flag: "N"
}
]
}
};
},
@ -667,36 +715,41 @@
* 통합 조회 결과 표시
*/
displayIntegratedResult: function(data) {
if (!data || (!data.basicInfo && !data.ledgerInfo)) {
$("#resultContent").html('<div class="result-empty">조회된 데이터가 없습니다.</div>');
return;
}
var html = '';
// 기본 정보 - displayBasicResult와 동일하게 모든 필드 표시
if (data.basicInfo) {
html += '<div class="result-section-title">자동차 기본사항 정보 (전체 필드)</div>';
html += '<table class="result-detail-table">';
html += '<colgroup><col style="width:20%"><col style="width:30%"><col style="width:20%"><col style="width:30%"></colgroup>';
// BasicResponse의 모든 90개 필드 표시
html += this.getBasicInfoTableRows(data.basicInfo);
html += '</table>';
html += this.getBasicInfoHtml(data.basicInfo);
}
// 등록원부 정보 - displayLedgerResult와 동일하게 모든 필드 표시
if (data.ledgerInfo) {
html += '<div class="result-section-title" style="margin-top: 30px;">자동차 등록원부 정보 (전체 필드)</div>';
html += '<table class="result-detail-table">';
html += '<colgroup><col style="width:20%"><col style="width:30%"><col style="width:20%"><col style="width:30%"></colgroup>';
// LedgerResponse의 모든 44개 필드 표시
html += this.getLedgerInfoTableRows(data.ledgerInfo);
html += '</table>';
html += this.getLedgerInfoHtml(data.ledgerInfo);
}
$("#resultContent").html(html);
},
/**
* BasicInfo 테이블 행 생성 (90개 필드)
* 기본사항 조회 결과 표시
*/
getBasicInfoTableRows: function(data) {
var html = '';
displayBasicResult: function(data) {
var html = this.getBasicInfoHtml(data);
$("#resultContent").html(html);
},
/**
* 기본사항 조회 결과 HTML 생성
*/
getBasicInfoHtml: function(data) {
var html = '<div class="result-section-title collapsible-title" data-target="#basicInfoContent">자동차 기본사항 정보<span class="collapse-btn">[접기]</span></div>';
html += '<div id="basicInfoContent" class="collapsible-content">';
html += '<table class="result-detail-table">';
html += '<colgroup><col style="width:20%"><col style="width:30%"><col style="width:20%"><col style="width:30%"></colgroup>';
html += '<tr><th>생산년도</th><td>' + this.nvl(data.prye) + '</td>';
html += '<th>등록일자</th><td>' + this.nvl(data.registDe) + '</td></tr>';
html += '<tr><th>말소등록구분코드</th><td>' + this.nvl(data.ersrRegistSeCode) + '</td>';
@ -781,11 +834,73 @@
html += '<th>최초최대적재량</th><td>' + this.nvl(data.frstMxmmLdg) + '</td></tr>';
html += '<tr><th>연료소비율</th><td>' + this.nvl(data.fuelCnsmpRt) + '</td>';
html += '<th>전기복합연료소비율</th><td>' + this.nvl(data.elctyCmpndFuelCnsmpRt) + '</td></tr>';
html += '</table>';
html += '</div>';
return html;
},
/**
* LedgerInfo 테이블 행 생성 (44개 필드)
* 등록원부 조회 결과 표시
*/
displayLedgerResult: function(data) {
var html = this.getLedgerInfoHtml(data);
$("#resultContent").html(html);
},
/**
* 등록원부 조회 결과 HTML 생성
*/
getLedgerInfoHtml: function(data) {
var html = '<div class="result-section-title collapsible-title" data-target="#ledgerInfoContent">자동차 등록원부 정보<span class="collapse-btn">[접기]</span></div>';
html += '<div id="ledgerInfoContent" class="collapsible-content">';
html += '<table class="result-detail-table">';
html += '<colgroup><col style="width:20%"><col style="width:30%"><col style="width:20%"><col style="width:30%"></colgroup>';
html += this.getLedgerInfoTableRows(data);
html += '</table>';
html += '</div>';
if (data.record && data.record.length > 0) {
html += '<div class="result-section-title collapsible-title" style="margin-top: 30px;" data-target="#ledgerHistoryContent">등록원부 변경 이력 (' + data.record.length + '건)<span class="collapse-btn">[접기]</span></div>';
html += '<div id="ledgerHistoryContent" class="collapsible-content">';
html += '<table class="result-history-table">';
html += '<thead>';
html += '<tr>';
html += '<th>번호</th><th>메인체크</th><th>변경작업구분코드</th><th>주번호</th><th>부번호</th><th>구분명</th>';
html += '<th>변경일자</th><th>원부그룹번호</th><th>원부개별번호</th><th>신청번호</th><th>차량관리번호</th>';
html += '<th>상세내역</th><th>상세일련번호</th><th>플래그</th>';
html += '</tr>';
html += '</thead>';
html += '<tbody>';
for (var i = 0; i < data.record.length; i++) {
var rec = data.record[i];
html += '<tr>';
html += '<td class="text-center">' + (i + 1) + '</td>';
html += '<td class="text-center">' + this.nvl(rec.mainchk) + '</td>';
html += '<td class="text-center">' + this.nvl(rec.changeJobSeCode) + '</td>';
html += '<td class="text-center">' + this.nvl(rec.mainno) + '</td>';
html += '<td class="text-center">' + this.nvl(rec.subno) + '</td>';
html += '<td class="text-center">' + this.nvl(rec.gubunNm) + '</td>';
html += '<td class="text-center">' + this.nvl(rec.changeDe) + '</td>';
html += '<td class="text-center">' + this.nvl(rec.ledgerGroupNo) + '</td>';
html += '<td class="text-center">' + this.nvl(rec.ledgerIndvdlzNo) + '</td>';
html += '<td class="text-center">' + this.nvl(rec.rqrcno) + '</td>';
html += '<td class="text-center">' + this.nvl(rec.vhmno) + '</td>';
html += '<td class="text-left">' + this.nvl(rec.dtls) + '</td>';
html += '<td class="text-center">' + this.nvl(rec.detailSn) + '</td>';
html += '<td class="text-center">' + this.nvl(rec.flag) + '</td>';
html += '</tr>';
}
html += '</tbody>';
html += '</table>';
html += '</div>';
}
return html;
},
/**
* LedgerInfo 테이블 행 생성
*/
getLedgerInfoTableRows: function(data) {
var html = '';
@ -852,166 +967,6 @@
return html;
},
/**
* 기본사항 조회 결과 표시
*/
displayBasicResult: function(data) {
var html = '<div class="result-section-title">자동차 기본사항 정보 (전체 필드)</div>';
html += '<table class="result-detail-table">';
html += '<colgroup><col style="width:20%"><col style="width:30%"><col style="width:20%"><col style="width:30%"></colgroup>';
html += '<tr><th>생산년도</th><td>' + this.nvl(data.prye) + '</td>';
html += '<th>등록일자</th><td>' + this.nvl(data.registDe) + '</td></tr>';
html += '<tr><th>말소등록구분코드</th><td>' + this.nvl(data.ersrRegistSeCode) + '</td>';
html += '<th>말소등록구분명</th><td>' + this.nvl(data.ersrRegistSeNm) + '</td></tr>';
html += '<tr><th>말소등록일자</th><td>' + this.nvl(data.ersrRegistDe) + '</td>';
html += '<th>등록상세코드</th><td>' + this.nvl(data.registDetailCode) + '</td></tr>';
html += '<tr><th>배기량</th><td>' + this.nvl(data.dsplvl) + '</td>';
html += '<th>사용본거지법정동코드</th><td>' + this.nvl(data.useStrnghldLegaldongCode) + '</td></tr>';
html += '<tr><th>사용본거지행정동코드</th><td>' + this.nvl(data.useStrnghldAdstrdCode) + '</td>';
html += '<th>사용본거지산</th><td>' + this.nvl(data.useStrnghldMntn) + '</td></tr>';
html += '<tr><th>사용본거지번지</th><td>' + this.nvl(data.useStrnghldLnbr) + '</td>';
html += '<th>사용본거지호</th><td>' + this.nvl(data.useStrnghldHo) + '</td></tr>';
html += '<tr><th>사용본거지주소명</th><td>' + this.nvl(data.useStrnghldAdresNm) + '</td>';
html += '<th>사용본거지도로명코드</th><td>' + this.nvl(data.useStrnghldRoadNmCode) + '</td></tr>';
html += '<tr><th>사용본거지지하건물구분코드</th><td>' + this.nvl(data.usgsrhldUndgrndBuldSeCode) + '</td>';
html += '<th>사용본거지건물본번</th><td>' + this.nvl(data.useStrnghldBuldMainNo) + '</td></tr>';
html += '<tr><th>사용본거지건물부번</th><td>' + this.nvl(data.useStrnghldBuldSubNo) + '</td>';
html += '<th>사용본거지우편번호코드</th><td>' + this.nvl(data.useStrnghldGrcCode) + '</td></tr>';
html += '<tr><th>사용본거지주소전체</th><td colspan="3">' + this.nvl(data.usgsrhldAdresFull) + '</td></tr>';
html += '<tr><th>소유자구분코드</th><td>' + this.nvl(data.mberSeCode) + '</td>';
html += '<th>소유자명</th><td>' + this.nvl(data.mberNm) + '</td></tr>';
html += '<tr><th>소유자구분번호</th><td>' + this.nvl(data.mberSeNo) + '</td>';
html += '<th>전화번호</th><td>' + this.nvl(data.telno) + '</td></tr>';
html += '<tr><th>소유자법정동코드</th><td>' + this.nvl(data.ownerLegaldongCode) + '</td>';
html += '<th>소유자행정동코드</th><td>' + this.nvl(data.ownerAdstrdCode) + '</td></tr>';
html += '<tr><th>소유자산</th><td>' + this.nvl(data.ownerMntn) + '</td>';
html += '<th>소유자번지</th><td>' + this.nvl(data.ownerLnbr) + '</td></tr>';
html += '<tr><th>소유자호</th><td>' + this.nvl(data.ownerHo) + '</td>';
html += '<th>소유자주소명</th><td>' + this.nvl(data.ownerAdresNm) + '</td></tr>';
html += '<tr><th>소유자도로명코드</th><td>' + this.nvl(data.ownerRoadNmCode) + '</td>';
html += '<th>소유자지하건물구분코드</th><td>' + this.nvl(data.ownerUndgrndBuldSeCode) + '</td></tr>';
html += '<tr><th>소유자건물본번</th><td>' + this.nvl(data.ownerBuldMainNo) + '</td>';
html += '<th>소유자건물부번</th><td>' + this.nvl(data.ownerBuldSubNo) + '</td></tr>';
html += '<tr><th>소유자주소전체</th><td colspan="3">' + this.nvl(data.ownerAdresFull) + '</td></tr>';
html += '<tr><th>변경후차량번호</th><td>' + this.nvl(data.aftrVhrno) + '</td>';
html += '<th>사용연료코드</th><td>' + this.nvl(data.useFuelCode) + '</td></tr>';
html += '<tr><th>용도구분코드</th><td>' + this.nvl(data.prposSeCode) + '</td>';
html += '<th>제작사명</th><td>' + this.nvl(data.mtrsFomNm) + '</td></tr>';
html += '<tr><th>변경전차량번호</th><td>' + this.nvl(data.frntVhrno) + '</td>';
html += '<th>차량번호</th><td>' + this.nvl(data.vhrno) + '</td></tr>';
html += '<tr><th>차대번호</th><td>' + this.nvl(data.vin) + '</td>';
html += '<th>차명</th><td>' + this.nvl(data.cnm) + '</td></tr>';
html += '<tr><th>차량총중량</th><td>' + this.nvl(data.vhcleTotWt) + '</td>';
html += '<th>자동차보험종료일자</th><td>' + this.nvl(data.caagEndde) + '</td></tr>';
html += '<tr><th>변경일자</th><td>' + this.nvl(data.changeDe) + '</td>';
html += '<th>차종분류코드</th><td>' + this.nvl(data.vhctyAsortCode) + '</td></tr>';
html += '<tr><th>차종유형코드</th><td>' + this.nvl(data.vhctyTyCode) + '</td>';
html += '<th>차종구분코드</th><td>' + this.nvl(data.vhctySeCode) + '</td></tr>';
html += '<tr><th>최대적재량</th><td>' + this.nvl(data.mxmmLdg) + '</td>';
html += '<th>차종분류명</th><td>' + this.nvl(data.vhctyAsortNm) + '</td></tr>';
html += '<tr><th>차종유형명</th><td>' + this.nvl(data.vhctyTyNm) + '</td>';
html += '<th>차종구분명</th><td>' + this.nvl(data.vhctySeNm) + '</td></tr>';
html += '<tr><th>최초등록일자</th><td>' + this.nvl(data.frstRegistDe) + '</td>';
html += '<th>형식명</th><td>' + this.nvl(data.fomNm) + '</td></tr>';
html += '<tr><th>취득일자</th><td>' + this.nvl(data.acqsDe) + '</td>';
html += '<th>취득종료일자</th><td>' + this.nvl(data.acqsEndDe) + '</td></tr>';
html += '<tr><th>연식월</th><td>' + this.nvl(data.yblMd) + '</td>';
html += '<th>이전등록일자</th><td>' + this.nvl(data.transrRegistDe) + '</td></tr>';
html += '<tr><th>특정등록상태코드</th><td>' + this.nvl(data.spcfRegistSttusCode) + '</td>';
html += '<th>색상명</th><td>' + this.nvl(data.colorNm) + '</td></tr>';
html += '<tr><th>저당건수</th><td>' + this.nvl(data.mrtgCo) + '</td>';
html += '<th>압류건수</th><td>' + this.nvl(data.seizrCo) + '</td></tr>';
html += '<tr><th>압인건수</th><td>' + this.nvl(data.stmdCo) + '</td>';
html += '<th>번호판보관여부</th><td>' + this.nvl(data.nmplCsdyAt) + '</td></tr>';
html += '<tr><th>번호판보관반납일자</th><td>' + this.nvl(data.nmplCsdyRemnrDe) + '</td>';
html += '<th>원산지구분코드</th><td>' + this.nvl(data.originSeCode) + '</td></tr>';
html += '<tr><th>번호판규격코드</th><td>' + this.nvl(data.nmplStndrdCode) + '</td>';
html += '<th>취득금액</th><td>' + this.nvl(data.acqsAmount) + '</td></tr>';
html += '<tr><th>검사유효기간시작일자</th><td>' + this.nvl(data.insptValidPdBgnde) + '</td>';
html += '<th>검사유효기간종료일자</th><td>' + this.nvl(data.insptValidPdEndde) + '</td></tr>';
html += '<tr><th>화물차승차정원수</th><td>' + this.nvl(data.tkcarPscapCo) + '</td>';
html += '<th>사양번호</th><td>' + this.nvl(data.spmnno) + '</td></tr>';
html += '<tr><th>주행거리</th><td>' + this.nvl(data.trvlDstnc) + '</td>';
html += '<th>최초등록신청번호</th><td>' + this.nvl(data.frstRegistRqrcno) + '</td></tr>';
html += '<tr><th>자진말소예방공지일자</th><td>' + this.nvl(data.vlntErsrPrvntcNticeDe) + '</td>';
html += '<th>등록기관명</th><td>' + this.nvl(data.registInsttNm) + '</td></tr>';
html += '<tr><th>처리불가사유코드</th><td>' + this.nvl(data.processImprtyResnCode) + '</td>';
html += '<th>처리불가사유상세</th><td>' + this.nvl(data.processImprtyResnDtls) + '</td></tr>';
html += '<tr><th>차체길이</th><td>' + this.nvl(data.cbdLt) + '</td>';
html += '<th>차체너비</th><td>' + this.nvl(data.cbdBt) + '</td></tr>';
html += '<tr><th>차체높이</th><td>' + this.nvl(data.cbdHg) + '</td>';
html += '<th>최초최대적재량</th><td>' + this.nvl(data.frstMxmmLdg) + '</td></tr>';
html += '<tr><th>연료소비율</th><td>' + this.nvl(data.fuelCnsmpRt) + '</td>';
html += '<th>전기복합연료소비율</th><td>' + this.nvl(data.elctyCmpndFuelCnsmpRt) + '</td></tr>';
html += '</table>';
$("#resultContent").html(html);
},
/**
* 등록원부 조회 결과 표시
*/
displayLedgerResult: function(data) {
var html = '<div class="result-section-title">등록원부 기본 정보 (전체 필드)</div>';
html += '<table class="result-detail-table">';
html += '<colgroup><col style="width:20%"><col style="width:30%"><col style="width:20%"><col style="width:30%"></colgroup>';
// LedgerResponse의 모든 44개 필드 표시
html += this.getLedgerInfoTableRows(data);
html += '</table>';
// 등록원부 변경 이력 (record 리스트) - 12개 필드 모두 표시
if (data.record && data.record.length > 0) {
html += '<div class="result-section-title" style="margin-top: 30px;">등록원부 변경 이력 (' + data.record.length + '건) - 전체 필드</div>';
html += '<table class="result-history-table">';
html += '<colgroup><col style="width:4%"><col style="width:6%"><col style="width:8%"><col style="width:8%"><col style="width:8%"><col style="width:6%"><col style="width:8%"><col style="width:10%"><col style="width:10%"><col style="width:8%"><col style="width:6%"><col style="width:auto"></colgroup>';
html += '<thead>';
html += '<tr>';
html += '<th>번호</th>';
html += '<th>메인체크</th>';
html += '<th>변경작업구분코드</th>';
html += '<th>주번호</th>';
html += '<th>부번호</th>';
html += '<th>구분명</th>';
html += '<th>변경일자</th>';
html += '<th>원부그룹번호</th>';
html += '<th>원부개별번호</th>';
html += '<th>신청번호</th>';
html += '<th>차량관리번호</th>';
html += '<th>상세내역</th>';
html += '<th>상세일련번호</th>';
html += '<th>플래그</th>';
html += '</tr>';
html += '</thead>';
html += '<tbody>';
for (var i = 0; i < data.record.length; i++) {
var rec = data.record[i];
html += '<tr>';
html += '<td class="text-center">' + (i + 1) + '</td>';
html += '<td class="text-center">' + this.nvl(rec.mainchk) + '</td>';
html += '<td class="text-center">' + this.nvl(rec.changeJobSeCode) + '</td>';
html += '<td class="text-center">' + this.nvl(rec.mainno) + '</td>';
html += '<td class="text-center">' + this.nvl(rec.subno) + '</td>';
html += '<td class="text-center">' + this.nvl(rec.gubunNm) + '</td>';
html += '<td class="text-center">' + this.nvl(rec.changeDe) + '</td>';
html += '<td class="text-center">' + this.nvl(rec.ledgerGroupNo) + '</td>';
html += '<td class="text-center">' + this.nvl(rec.ledgerIndvdlzNo) + '</td>';
html += '<td class="text-center">' + this.nvl(rec.rqrcno) + '</td>';
html += '<td class="text-center">' + this.nvl(rec.vhmno) + '</td>';
html += '<td class="text-left">' + this.nvl(rec.dtls) + '</td>';
html += '<td class="text-center">' + this.nvl(rec.detailSn) + '</td>';
html += '<td class="text-center">' + this.nvl(rec.flag) + '</td>';
html += '</tr>';
}
html += '</tbody>';
html += '</table>';
}
$("#resultContent").html(html);
},
/**
* null 값 처리
*/
@ -1078,6 +1033,21 @@
self.displayLedgerResult(sampleData);
$("#btnResultClose").show();
});
// 섹션 접기/펼치기 이벤트
$("#resultContent").on('click', '.collapsible-title', function() {
var targetId = $(this).data('target');
var $content = $(targetId);
var $btn = $(this).find('.collapse-btn');
$content.slideToggle('fast', function() {
if ($content.is(':visible')) {
$btn.text('[접기]');
} else {
$btn.text('[펼치기]');
}
});
});
},
/**

@ -0,0 +1,95 @@
<%--
~ Copyright (c) 2024.
~
~ @author : wck
~ @date : 2024-11-18
~ @description : 차량기본정보 상세 팝업
~
~ -----------------------------------------------------------------------------------------------------------------
~ Date | author | description
~ -----------------------------------------------------------------------------------------------------------------
~ 2024-11-18 wck 최초 생성
~ -----------------------------------------------------------------------------------------------------------------
~
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%--
참고: 이 JSP의 구조는 'IBMS_NEW' 프로젝트의 참조 파일 없이 'vehicleInfoPopup.js'를 기반으로 생성된 임시 placeholder입니다.
요청에 따라 정확한 HTML/CSS 구조를 적용하기 위해서는 원본 프로젝트('IBMS_NEW')의 JSP 파일 내용이 필요합니다.
--%>
<style>
.vehicle-info-table { width: 100%; border-collapse: collapse; }
.vehicle-info-table th, .vehicle-info-table td { border: 1px solid #ddd; padding: 8px; }
.vehicle-info-table th { background-color: #f2f2f2; text-align: left; }
</style>
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">자동차 기본사항 정보</h5>
</div>
<div class="modal-body" style="max-height: 70vh; overflow-y: auto;">
<c:if test="${not empty data}">
<table class="vehicle-info-table">
<colgroup>
<col style="width:20%">
<col style="width:30%">
<col style="width:20%">
<col style="width:30%">
</colgroup>
<tbody>
<tr><th>생산년도</th><td>${fn:escapeXml(data.prye)}</td><th>등록일자</th><td>${fn:escapeXml(data.registDe)}</td></tr>
<tr><th>말소등록구분코드</th><td>${fn:escapeXml(data.ersrRegistSeCode)}</td><th>말소등록구분명</th><td>${fn:escapeXml(data.ersrRegistSeNm)}</td></tr>
<tr><th>말소등록일자</th><td>${fn:escapeXml(data.ersrRegistDe)}</td><th>등록상세코드</th><td>${fn:escapeXml(data.registDetailCode)}</td></tr>
<tr><th>배기량</th><td>${fn:escapeXml(data.dsplvl)}</td><th>사용본거지법정동코드</th><td>${fn:escapeXml(data.useStrnghldLegaldongCode)}</td></tr>
<tr><th>사용본거지행정동코드</th><td>${fn:escapeXml(data.useStrnghldAdstrdCode)}</td><th>사용본거지산</th><td>${fn:escapeXml(data.useStrnghldMntn)}</td></tr>
<tr><th>사용본거지번지</th><td>${fn:escapeXml(data.useStrnghldLnbr)}</td><th>사용본거지호</th><td>${fn:escapeXml(data.useStrnghldHo)}</td></tr>
<tr><th>사용본거지주소명</th><td>${fn:escapeXml(data.useStrnghldAdresNm)}</td><th>사용본거지도로명코드</th><td>${fn:escapeXml(data.useStrnghldRoadNmCode)}</td></tr>
<tr><th>사용본거지지하건물구분코드</th><td>${fn:escapeXml(data.usgsrhldUndgrndBuldSeCode)}</td><th>사용본거지건물본번</th><td>${fn:escapeXml(data.useStrnghldBuldMainNo)}</td></tr>
<tr><th>사용본거지건물부번</th><td>${fn:escapeXml(data.useStrnghldBuldSubNo)}</td><th>사용본거지우편번호코드</th><td>${fn:escapeXml(data.useStrnghldGrcCode)}</td></tr>
<tr><th>사용본거지주소전체</th><td colspan="3">${fn:escapeXml(data.usgsrhldAdresFull)}</td></tr>
<tr><th>소유자구분코드</th><td>${fn:escapeXml(data.mberSeCode)}</td><th>소유자명</th><td>${fn:escapeXml(data.mberNm)}</td></tr>
<tr><th>소유자구분번호</th><td>${fn:escapeXml(data.mberSeNo)}</td><th>전화번호</th><td>${fn:escapeXml(data.telno)}</td></tr>
<tr><th>소유자법정동코드</th><td>${fn:escapeXml(data.ownerLegaldongCode)}</td><th>소유자행정동코드</th><td>${fn:escapeXml(data.ownerAdstrdCode)}</td></tr>
<tr><th>소유자산</th><td>${fn:escapeXml(data.ownerMntn)}</td><th>소유자번지</th><td>${fn:escapeXml(data.ownerLnbr)}</td></tr>
<tr><th>소유자호</th><td>${fn:escapeXml(data.ownerHo)}</td><th>소유자주소명</th><td>${fn:escapeXml(data.ownerAdresNm)}</td></tr>
<tr><th>소유자도로명코드</th><td>${fn:escapeXml(data.ownerRoadNmCode)}</td><th>소유자지하건물구분코드</th><td>${fn:escapeXml(data.ownerUndgrndBuldSeCode)}</td></tr>
<tr><th>소유자건물본번</th><td>${fn:escapeXml(data.ownerBuldMainNo)}</td><th>소유자건물부번</th><td>${fn:escapeXml(data.ownerBuldSubNo)}</td></tr>
<tr><th>소유자주소전체</th><td colspan="3">${fn:escapeXml(data.ownerAdresFull)}</td></tr>
<tr><th>변경후차량번호</th><td>${fn:escapeXml(data.aftrVhrno)}</td><th>사용연료코드</th><td>${fn:escapeXml(data.useFuelCode)}</td></tr>
<tr><th>용도구분코드</th><td>${fn:escapeXml(data.prposSeCode)}</td><th>제작사명</th><td>${fn:escapeXml(data.mtrsFomNm)}</td></tr>
<tr><th>변경전차량번호</th><td>${fn:escapeXml(data.frntVhrno)}</td><th>차량번호</th><td>${fn:escapeXml(data.vhrno)}</td></tr>
<tr><th>차대번호</th><td>${fn:escapeXml(data.vin)}</td><th>차명</th><td>${fn:escapeXml(data.cnm)}</td></tr>
<tr><th>차량총중량</th><td>${fn:escapeXml(data.vhcleTotWt)}</td><th>자동차보험종료일자</th><td>${fn:escapeXml(data.caagEndde)}</td></tr>
<tr><th>변경일자</th><td>${fn:escapeXml(data.changeDe)}</td><th>차종분류코드</th><td>${fn:escapeXml(data.vhctyAsortCode)}</td></tr>
<tr><th>차종유형코드</th><td>${fn:escapeXml(data.vhctyTyCode)}</td><th>차종구분코드</th><td>${fn:escapeXml(data.vhctySeCode)}</td></tr>
<tr><th>최대적재량</th><td>${fn:escapeXml(data.mxmmLdg)}</td><th>차종분류명</th><td>${fn:escapeXml(data.vhctyAsortNm)}</td></tr>
<tr><th>차종유형명</th><td>${fn:escapeXml(data.vhctyTyNm)}</td><th>차종구분명</th><td>${fn:escapeXml(data.vhctySeNm)}</td></tr>
<tr><th>최초등록일자</th><td>${fn:escapeXml(data.frstRegistDe)}</td><th>형식명</th><td>${fn:escapeXml(data.fomNm)}</td></tr>
<tr><th>취득일자</th><td>${fn:escapeXml(data.acqsDe)}</td><th>취득종료일자</th><td>${fn:escapeXml(data.acqsEndDe)}</td></tr>
<tr><th>연식월</th><td>${fn:escapeXml(data.yblMd)}</td><th>이전등록일자</th><td>${fn:escapeXml(data.transrRegistDe)}</td></tr>
<tr><th>특정등록상태코드</th><td>${fn:escapeXml(data.spcfRegistSttusCode)}</td><th>색상명</th><td>${fn:escapeXml(data.colorNm)}</td></tr>
<tr><th>저당건수</th><td>${fn:escapeXml(data.mrtgCo)}</td><th>압류건수</th><td>${fn:escapeXml(data.seizrCo)}</td></tr>
<tr><th>압인건수</th><td>${fn:escapeXml(data.stmdCo)}</td><th>번호판보관여부</th><td>${fn:escapeXml(data.nmplCsdyAt)}</td></tr>
<tr><th>번호판보관반납일자</th><td>${fn:escapeXml(data.nmplCsdyRemnrDe)}</td><th>원산지구분코드</th><td>${fn:escapeXml(data.originSeCode)}</td></tr>
<tr><th>번호판규격코드</th><td>${fn:escapeXml(data.nmplStndrdCode)}</td><th>취득금액</th><td>${fn:escapeXml(data.acqsAmount)}</td></tr>
<tr><th>검사유효기간시작일자</th><td>${fn:escapeXml(data.insptValidPdBgnde)}</td><th>검사유효기간종료일자</th><td>${fn:escapeXml(data.insptValidPdEndde)}</td></tr>
<tr><th>화물차승차정원수</th><td>${fn:escapeXml(data.tkcarPscapCo)}</td><th>사양번호</th><td>${fn:escapeXml(data.spmnno)}</td></tr>
<tr><th>주행거리</th><td>${fn:escapeXml(data.trvlDstnc)}</td><th>최초등록신청번호</th><td>${fn:escapeXml(data.frstRegistRqrcno)}</td></tr>
<tr><th>자진말소예방공지일자</th><td>${fn:escapeXml(data.vlntErsrPrvntcNticeDe)}</td><th>등록기관명</th><td>${fn:escapeXml(data.registInsttNm)}</td></tr>
<tr><th>처리불가사유코드</th><td>${fn:escapeXml(data.processImprtyResnCode)}</td><th>처리불가사유상세</th><td>${fn:escapeXml(data.processImprtyResnDtls)}</td></tr>
<tr><th>차체길이</th><td>${fn:escapeXml(data.cbdLt)}</td><th>차체너비</th><td>${fn:escapeXml(data.cbdBt)}</td></tr>
<tr><th>차체높이</th><td>${fn:escapeXml(data.cbdHg)}</td><th>최초최대적재량</th><td>${fn:escapeXml(data.frstMxmmLdg)}</td></tr>
<tr><th>연료소비율</th><td>${fn:escapeXml(data.fuelCnsmpRt)}</td><th>전기복합연료소비율</th><td>${fn:escapeXml(data.elctyCmpndFuelCnsmpRt)}</td></tr>
</tbody>
</table>
</c:if>
<c:if test="${empty data}">
<p>차량 기본정보를 조회할 수 없습니다.</p>
</c:if>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" onclick="window.close();">닫기</button>
</div>
</div>

@ -0,0 +1,117 @@
<%--
~ Copyright (c) 2024.
~
~ @author : wck
~ @date : 2024-11-18
~ @description : 차량등록원부(갑) 상세 팝업
~
~ -----------------------------------------------------------------------------------------------------------------
~ Date | author | description
~ -----------------------------------------------------------------------------------------------------------------
~ 2024-11-18 wck 최초 생성
~ -----------------------------------------------------------------------------------------------------------------
~
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%--
참고: 이 JSP의 구조는 'IBMS_NEW' 프로젝트의 참조 파일 없이 'vehicleInfoPopup.js'를 기반으로 생성된 임시 placeholder입니다.
요청에 따라 정확한 HTML/CSS 구조를 적용하기 위해서는 원본 프로젝트('IBMS_NEW')의 JSP 파일 내용이 필요합니다.
--%>
<style>
.vehicle-info-table, .vehicle-history-table { width: 100%; border-collapse: collapse; margin-top: 10px; }
.vehicle-info-table th, .vehicle-info-table td,
.vehicle-history-table th, .vehicle-history-table td { border: 1px solid #ddd; padding: 8px; }
.vehicle-info-table th, .vehicle-history-table th { background-color: #f2f2f2; text-align: left; }
.text-center { text-align: center; }
.text-left { text-align: left; }
</style>
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">자동차 등록원부 정보</h5>
</div>
<div class="modal-body" style="max-height: 70vh; overflow-y: auto;">
<c:if test="${not empty data}">
<table class="vehicle-info-table">
<colgroup>
<col style="width:20%"><col style="width:30%"><col style="width:20%"><col style="width:30%">
</colgroup>
<tbody>
<tr><th>연계결과코드</th><td>${fn:escapeXml(data.cntcResultCode)}</td><th>연계결과상세</th><td>${fn:escapeXml(data.cntcResultDtls)}</td></tr>
<tr><th>원부그룹번호</th><td>${fn:escapeXml(data.ledgerGroupNo)}</td><th>원부개별화번호</th><td>${fn:escapeXml(data.ledgerIndvdlzNo)}</td></tr>
<tr><th>차량관리번호</th><td>${fn:escapeXml(data.vhmno)}</td><th>차량번호</th><td>${fn:escapeXml(data.vhrno)}</td></tr>
<tr><th>차대번호</th><td>${fn:escapeXml(data.vin)}</td><th>차종분류코드</th><td>${fn:escapeXml(data.vhctyAsortCode)}</td></tr>
<tr><th>차종분류명</th><td>${fn:escapeXml(data.vhctyAsortNm)}</td><th>차명</th><td>${fn:escapeXml(data.cnm)}</td></tr>
<tr><th>색상코드</th><td>${fn:escapeXml(data.colorCode)}</td><th>색상명</th><td>${fn:escapeXml(data.colorNm)}</td></tr>
<tr><th>번호판규격코드</th><td>${fn:escapeXml(data.nmplStndrdCode)}</td><th>번호판규격명</th><td>${fn:escapeXml(data.nmplStndrdNm)}</td></tr>
<tr><th>용도구분코드</th><td>${fn:escapeXml(data.prposSeCode)}</td><th>용도구분명</th><td>${fn:escapeXml(data.prposSeNm)}</td></tr>
<tr><th>제작사명</th><td>${fn:escapeXml(data.mtrsFomNm)}</td><th>형식명</th><td>${fn:escapeXml(data.fomNm)}</td></tr>
<tr><th>취득금액</th><td>${fn:escapeXml(data.acqsAmount)}</td><th>등록상세코드</th><td>${fn:escapeXml(data.registDetailCode)}</td></tr>
<tr><th>등록상세명</th><td>${fn:escapeXml(data.registDetailNm)}</td><th>최초등록일자</th><td>${fn:escapeXml(data.frstRegistDe)}</td></tr>
<tr><th>자동차보험종료일자</th><td>${fn:escapeXml(data.caagEndde)}</td><th>생산년도</th><td>${fn:escapeXml(data.prye)}</td></tr>
<tr><th>사양번호1</th><td>${fn:escapeXml(data.spmnno1)}</td><th>사양번호2</th><td>${fn:escapeXml(data.spmnno2)}</td></tr>
<tr><th>연식월</th><td>${fn:escapeXml(data.yblMd)}</td><th>주행거리</th><td>${fn:escapeXml(data.trvlDstnc)}</td></tr>
<tr><th>검사유효기간시작일자</th><td>${fn:escapeXml(data.insptValidPdBgnde)}</td><th>검사유효기간종료일자</th><td>${fn:escapeXml(data.insptValidPdEndde)}</td></tr>
<tr><th>점검유효기간시작일자</th><td>${fn:escapeXml(data.chckValidPdBgnde)}</td><th>점검유효기간종료일자</th><td>${fn:escapeXml(data.chckValidPdEndde)}</td></tr>
<tr><th>등록신청구분명</th><td>${fn:escapeXml(data.registReqstSeNm)}</td><th>최초등록신청번호</th><td>${fn:escapeXml(data.frstRegistRqrcno)}</td></tr>
<tr><th>번호판보관반납일자</th><td>${fn:escapeXml(data.nmplCsdyRemnrDe)}</td><th>번호판보관여부</th><td>${fn:escapeXml(data.nmplCsdyAt)}</td></tr>
<tr><th>영업용사용기간</th><td>${fn:escapeXml(data.bssUsePd)}</td><th>직권말소예방공지일자</th><td>${fn:escapeXml(data.octhtErsrPrvntcNticeDe)}</td></tr>
<tr><th>말소등록일자</th><td>${fn:escapeXml(data.ersrRegistDe)}</td><th>말소등록구분코드</th><td>${fn:escapeXml(data.ersrRegistSeCode)}</td></tr>
<tr><th>말소등록구분명</th><td>${fn:escapeXml(data.ersrRegistSeNm)}</td><th>저당건수</th><td>${fn:escapeXml(data.mrtgcnt)}</td></tr>
<tr><th>차량건수</th><td>${fn:escapeXml(data.vhclecnt)}</td><th>압인건수</th><td>${fn:escapeXml(data.stmdcnt)}</td></tr>
<tr><th>주소1</th><td>${fn:escapeXml(data.adres1)}</td><th>주소명1</th><td>${fn:escapeXml(data.adresNm1)}</td></tr>
<tr><th>주소</th><td>${fn:escapeXml(data.adres)}</td><th>주소명</th><td>${fn:escapeXml(data.adresNm)}</td></tr>
<tr><th>개인법인여부</th><td>${fn:escapeXml(data.indvdlBsnmAt)}</td><th>전화번호</th><td>${fn:escapeXml(data.telno)}</td></tr>
<tr><th>소유자명</th><td>${fn:escapeXml(data.mberNm)}</td><th>소유자구분코드</th><td>${fn:escapeXml(data.mberSeCode)}</td></tr>
<tr><th>소유자구분번호</th><td>${fn:escapeXml(data.mberSeNo)}</td><th>면세대상자구분코드</th><td>${fn:escapeXml(data.taxxmptTrgterSeCode)}</td></tr>
<tr><th>면세대상자구분코드명</th><td>${fn:escapeXml(data.taxxmptTrgterSeCodeNm)}</td><th>건수사항</th><td>${fn:escapeXml(data.cntMatter)}</td></tr>
<tr><th>읍면동명</th><td>${fn:escapeXml(data.emdNm)}</td><th>예방건수</th><td>${fn:escapeXml(data.prvntccnt)}</td></tr>
<tr><th>수출이행여부확인일자</th><td>${fn:escapeXml(data.xportFlflAtSttemntDe)}</td><th>협력사신청번호</th><td>${fn:escapeXml(data.partnRqrcno)}</td></tr>
</tbody>
</table>
<c:if test="${not empty data.record}">
<h6 style="margin-top: 30px; padding: 10px; background-color: #2c5aa0; color: white; border-radius: 4px;">
등록원부 변경 이력 (${fn:length(data.record)}건)
</h6>
<table class="vehicle-history-table">
<thead>
<tr>
<th>번호</th><th>메인체크</th><th>변경작업구분코드</th><th>주번호</th><th>부번호</th><th>구분명</th>
<th>변경일자</th><th>원부그룹번호</th><th>원부개별번호</th><th>신청번호</th><th>차량관리번호</th>
<th>상세내역</th><th>상세일련번호</th><th>플래그</th>
</tr>
</thead>
<tbody>
<c:forEach var="rec" items="${data.record}" varStatus="status">
<tr>
<td class="text-center">${status.count}</td>
<td class="text-center">${fn:escapeXml(rec.mainchk)}</td>
<td class="text-center">${fn:escapeXml(rec.changeJobSeCode)}</td>
<td class="text-center">${fn:escapeXml(rec.mainno)}</td>
<td class="text-center">${fn:escapeXml(rec.subno)}</td>
<td class="text-center">${fn:escapeXml(rec.gubunNm)}</td>
<td class="text-center">${fn:escapeXml(rec.changeDe)}</td>
<td class="text-center">${fn:escapeXml(rec.ledgerGroupNo)}</td>
<td class="text-center">${fn:escapeXml(rec.ledgerIndvdlzNo)}</td>
<td class="text-center">${fn:escapeXml(rec.rqrcno)}</td>
<td class="text-center">${fn:escapeXml(rec.vhmno)}</td>
<td class="text-left">${fn:escapeXml(rec.dtls)}</td>
<td class="text-center">${fn:escapeXml(rec.detailSn)}</td>
<td class="text-center">${fn:escapeXml(rec.flag)}</td>
</tr>
</c:forEach>
</tbody>
</table>
</c:if>
</c:if>
<c:if test="${empty data}">
<p>차량 등록원부 정보를 조회할 수 없습니다.</p>
</c:if>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" onclick="window.close();">닫기</button>
</div>
</div>

@ -460,8 +460,14 @@
// 더블클릭 이벤트
this.instance.on('dblclick', function(ev) {
var rowData = self.instance.getRow(ev.rowKey);
if (rowData) {
VehicleApiHistoryList.showDetailModalBasic(rowData.carBassMatterInqireId);
if (rowData && rowData.carBassMatterInqireId) {
// 공통 팝업 모듈 사용
if (window.VehicleInfoPopup) {
window.VehicleInfoPopup.openBasicInfoPopup(rowData.carBassMatterInqireId);
} else {
// 공통 모듈 로드 전 fallback
VehicleApiHistoryList.showDetailModalBasic(rowData.carBassMatterInqireId);
}
}
});
}
@ -649,8 +655,14 @@
// 더블클릭 이벤트
this.instance.on('dblclick', function(ev) {
var rowData = self.instance.getRow(ev.rowKey);
if (rowData) {
VehicleApiHistoryList.showDetailModalLedger(rowData.carLedgerFrmbkId);
if (rowData && rowData.carLedgerFrmbkId) {
// 공통 팝업 모듈 사용
if (window.VehicleInfoPopup) {
window.VehicleInfoPopup.openLedgerInfoPopup(rowData.carLedgerFrmbkId);
} else {
// 공통 모듈 로드 전 fallback
VehicleApiHistoryList.showDetailModalLedger(rowData.carLedgerFrmbkId);
}
}
});
}

@ -10,7 +10,7 @@
<div class="sub_title">과태료 대상 목록</div>
<button type="button" id="registerBtn" class="newbtn bg1">등록</button>
<button type="button" id="deleteBtn" class="newbtn bg6">삭제</button>
<button type="button" id="downloadBtn" class="newbtn bg3">목록 다운로드</button>
<button type="button" id="downloadBtn" class="newbtn bg3">txt 목록 다운로드</button>
</section>
</div>
</section>
@ -339,8 +339,30 @@
}
},
{ header: '비고', name: 'rmrk', align: 'left', width: 200 },
{ header: '차량기본사항조회ID', name: 'carBassMatterInqireId', align: 'center', width: 150 },
{ header: '차량등록원부ID', name: 'carLedgerFrmbkId', align: 'center', width: 150 },
{
header: '차량기본사항조회ID',
name: 'carBassMatterInqireId',
align: 'center',
width: 150,
formatter: function(e) {
if (e.value) {
return '<a href="javascript:void(0)" onclick="openBasicPopup(\'' + e.value + '\')" style="color: #0066cc; text-decoration: underline; cursor: pointer;">' + e.value + '</a>';
}
return '';
}
},
{
header: '차량등록원부ID',
name: 'carLedgerFrmbkId',
align: 'center',
width: 150,
formatter: function(e) {
if (e.value) {
return '<a href="javascript:void(0)" onclick="openLedgerPopup(\'' + e.value + '\')" style="color: #0066cc; text-decoration: underline; cursor: pointer;">' + e.value + '</a>';
}
return '';
}
},
{ header: '등록일시', name: 'regDt', align: 'center', width: 150 },
{ header: '등록자ID', name: 'rgtr', align: 'center', width: 100, hidden: true },
{ header: '등록자', name: 'rgtrNm', align: 'center', width: 100 },
@ -676,7 +698,6 @@
},
error: function(xhr, status, error) {
console.error("API 호출 실패:", error);
alert("API 호출 중 오류가 발생했습니다.");
}
});
}
@ -689,4 +710,24 @@
})(window, jQuery);
/**
* 차량 기본정보 팝업 열기 (전역 함수)
*/
function openBasicPopup(carBassMatterInqireId) {
console.log(carBassMatterInqireId);
var popupUrl = '<c:url value="/carInspectionPenalty/history/carBassMatterInqire/popup.do"/>?carBassMatterInqireId='
encodeURIComponent(carBassMatterInqireId);
var popup = openPopup(popupUrl, 800, 450, 'carBassMatterInqirePopup');
}
/**
* 차량 등록원부 팝업 열기 (전역 함수)
*/
function openLedgerPopup(carLedgerFrmbkId) {
console.log(carLedgerFrmbkId);
var popupUrl = '<c:url value="/carInspectionPenalty/history/carLedgerFrmbk/popup.do"/>?carLedgerFrmbkId='
encodeURIComponent(carLedgerFrmbkId);
var popup = openPopup(popupUrl, 800, 450, 'carLedgerFrmbkPopup');
}
</script>

@ -0,0 +1,232 @@
/**
* Vehicle Info Popup Common CSS
*
*/
/* 팝업 모달 스타일 */
.vehicle-info-modal .modal-dialog {
max-width: 90%;
margin: 1.75rem auto;
}
.vehicle-info-modal .modal-content {
border-radius: 8px;
}
.vehicle-info-modal .modal-header {
background-color: #f8f9fa;
border-bottom: 2px solid #dee2e6;
padding: 1rem 1.5rem;
}
.vehicle-info-modal .modal-title {
font-weight: 600;
color: #333;
font-size: 1.25rem;
}
.vehicle-info-modal .modal-body {
padding: 1.5rem;
max-height: calc(100vh - 200px);
overflow-y: auto;
}
.vehicle-info-modal .modal-footer {
border-top: 1px solid #dee2e6;
padding: 1rem 1.5rem;
}
/* 차량 정보 테이블 스타일 */
.vehicle-info-table {
width: 100%;
border-collapse: collapse;
margin-bottom: 1.5rem;
background-color: #fff;
font-size: 14px;
}
.vehicle-info-table th,
.vehicle-info-table td {
padding: 10px 12px;
border: 1px solid #dee2e6;
text-align: left;
vertical-align: middle;
}
.vehicle-info-table th {
background-color: #f1f3f5;
font-weight: 600;
color: #495057;
width: 20%;
white-space: nowrap;
}
.vehicle-info-table td {
background-color: #fff;
color: #212529;
width: 30%;
}
/* 테이블 행 호버 효과 */
.vehicle-info-table tbody tr:hover {
background-color: #f8f9fa;
}
/* 빈 값 스타일 */
.vehicle-info-table td:empty::before {
content: "-";
color: #adb5bd;
}
/* 변경 이력 테이블 스타일 */
.vehicle-history-section {
margin-top: 2rem;
padding-top: 1.5rem;
border-top: 2px solid #dee2e6;
}
.vehicle-history-section h5 {
font-weight: 600;
color: #333;
margin-bottom: 1rem;
font-size: 1.1rem;
}
.vehicle-history-table {
width: 100%;
border-collapse: collapse;
background-color: #fff;
font-size: 13px;
table-layout: auto;
}
.vehicle-history-table th,
.vehicle-history-table td {
padding: 8px 10px;
border: 1px solid #dee2e6;
text-align: center;
vertical-align: middle;
white-space: nowrap;
}
.vehicle-history-table th {
background-color: #e9ecef;
font-weight: 600;
color: #495057;
position: sticky;
top: 0;
z-index: 10;
}
.vehicle-history-table td {
background-color: #fff;
color: #212529;
}
/* 변경 이력 테이블 행 호버 */
.vehicle-history-table tbody tr:hover {
background-color: #f8f9fa;
}
/* 변경 이력 테이블 스크롤 컨테이너 */
.vehicle-history-wrapper {
max-height: 400px;
overflow-y: auto;
overflow-x: auto;
border: 1px solid #dee2e6;
border-radius: 4px;
margin-top: 0.5rem;
}
/* 변경 이력 없을 때 */
.no-history-message {
text-align: center;
padding: 2rem;
color: #6c757d;
font-style: italic;
}
/* 로딩 스피너 */
.vehicle-info-loading {
text-align: center;
padding: 3rem;
}
.vehicle-info-loading .spinner-border {
width: 3rem;
height: 3rem;
border-width: 0.3rem;
}
/* 에러 메시지 */
.vehicle-info-error {
text-align: center;
padding: 2rem;
color: #dc3545;
}
.vehicle-info-error i {
font-size: 3rem;
margin-bottom: 1rem;
}
/* 반응형 디자인 */
@media (max-width: 768px) {
.vehicle-info-modal .modal-dialog {
max-width: 95%;
margin: 0.5rem auto;
}
.vehicle-info-table th {
width: 30%;
}
.vehicle-info-table td {
width: 70%;
}
.vehicle-info-table,
.vehicle-history-table {
font-size: 12px;
}
.vehicle-info-table th,
.vehicle-info-table td,
.vehicle-history-table th,
.vehicle-history-table td {
padding: 6px 8px;
}
}
/* 작은 화면에서 테이블 스크롤 */
@media (max-width: 576px) {
.vehicle-info-modal .modal-dialog {
max-width: 100%;
margin: 0;
}
.vehicle-info-table {
display: block;
overflow-x: auto;
white-space: nowrap;
}
}
/* 데이터 강조 */
.vehicle-info-table .highlight-data {
font-weight: 600;
color: #0d6efd;
}
/* 날짜 데이터 스타일 */
.vehicle-info-table .date-data {
color: #6c757d;
}
/* 코드 데이터 스타일 */
.vehicle-info-table .code-data {
font-family: 'Courier New', monospace;
background-color: #f8f9fa;
padding: 2px 6px;
border-radius: 3px;
}
Loading…
Cancel
Save