no message

main
이범준 1 year ago
parent b0abe401b7
commit 1296b69490

@ -1,220 +0,0 @@
<%--
================================================================================
File : /fims/biz/cmm/cmmCtznComplaintHistPopup.jsp
Name : 단속현황 시민 민원 이력 팝업 - 단속관리>초기자료 편집
Auth : lim.jong.uk
Date : 2023-03-20
Desc : 단속현황 시민 민원 이력 팝업
================================================================================
Date Author Description
================================================================================
================================================================================
--%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
<%@ include file="/WEB-INF/jsp/include/fims/taglib.jsp"%>
<div class="popup" style="min-width: 100px;">
<div class="container-window1" style="flex-direction: column; max-width: 900px;">
<p class="container-window-header2">차량&nbsp;&nbsp;[<span id="vhrno" name="vhrno" style="padding-left: 5px; padding-right: 5px; color:darkred;"></span>]&nbsp;&nbsp;단속 내역
</p>
<div class="container-page-btn">
<span>
<div class="clearfix" id="totCnt">전체 ㅣ <span></span></div>
</span>
</div>
<div id="grid"></div>
<div class="d-flex flex-row p-3 justify-content-between">
<label id="grid1PagingInfo" class="dataTables_info" role="status" aria-live="polite"></label>
<ul id="grid1Paging" class="pagination pagination-primary"></ul>
</div>
<div class="container-window-btn2">
<span class="container-window-btn-right">
<a href="#" id='btnClose' class="btn btn-lightgray">닫기</a>
</span>
</div>
</div><!--row -->
</div>
<script type="text/javaScript">
/**************************************************************************
* Global Variable
**************************************************************************/
let GRID = null;
let $$Control = new FimsDatasetControl({
prefix:"aaa",
prefixName:"ㅁㅁㅁ",
infoSize:"xl",
urls : {
load : fimsApiUrl.FIND_RT_REGLT_CAR_CRACKDOWN_CNT
},
keymapper:info => info ? info.SOME_KEY : "",
dataGetter:obj => obj.data.contents
});
$$Control.onDatasetChange = obj => {
let pagination = obj.data.pagination;
if(obj.data.pagination){
$$Control._paginationInfo.totalSize = pagination.totalSize;
$$Control._paginationInfo.pageNum = pagination.pageNum;
} else {
$$Control._paginationInfo.totalSize = obj.count;
}
$$Control.totalCountSetting(obj);
render$$List(obj.data);
if($$Control._paginationInfo.paging && $$Control._paginationInfo.pagingType == "nav"){
let start = 0;
if(pagination.pageNum > 1 && pagination.totalPage > 1 && pagination.totalSize > $$Control._paginationInfo.fetchSize){
start = $$Control._paginationInfo.fetchSize * (pagination.pageNum - 1);
}
$("#grid1Paging").setPaging({
list: $$Control.dataset,
prefix: "grid1",
start: start,
totalSize: pagination.totalSize,
fetchSize: $$Control._paginationInfo.fetchSize,
func: "$$$Control.load({index})",
});
}
};
function search$$s(){
$$Control.query = {vhrno: '${param.vhrno}', crdnId: '${param.crdnId}', crdnSeCd: '${param.crdnSeCd}'};
GRID.clear();
$$Control.load(1);
}
function render$$List(data) {
if($$Control._paginationInfo.paging && $$Control._paginationInfo.pagingType == "nav"){
GRID.clear();
}
GRID.appendRows(data.contents);
}
/* *******************************
* Biz function
******************************* */
/**************************************************************************
* event
**************************************************************************/
$(() => {
$("#btnClose").on('click', () => {
window.close()
});
});
/* ******************************
* Grid
****************************** */
const initPopupGrid = () => {
const gridColumns = [
{
header: '단속구분',
name: 'crdnSeCd',
minWidth: 100,
//editor: 'text',
sortable: false,
align: 'center',
formatter: 'listItemText',
disabled: true,
editor: {
type: "select",
options: {
listItems: [...ComboCodeData.crdnSeCd]
}
}
},
{
header: '위반일시',
name: 'crdnYmdTime',
minWidth: 120,
sortable: false,
align: 'center',
formatter({value}) {
return StrDateTimeFormat.format(value); //
}
},
{
header: '단속장소',
name: 'crdnPlc',
minWidth: 150,
sortable: false
},
{
header: '위반내역',
name: 'violtDtlsCode',
minWidth: 150,
//editor: 'text',
sortable: false,
align: 'center',
formatter: 'listItemText',
disabled: true,
editor: {
type: "select",
options: {
listItems: [...ComboCodeData.violtDtlsCode]
}
}
},
{
header: '위도',
name: 'gpsX',
minWidth: 120,
//editor: 'text',
sortable: false,
},
{
header: '경도',
name: 'gpsY',
minWidth: 120,
//editor: 'text',
sortable: false,
},
{
header: '등록일시',
name: 'regDt',
minWidth: 120,
//editor: 'text',
sortable: true,
align: 'center',
formatter({value}) {
return StrDateTimeFormat.format(value);
}
}
];
const gridOptions = {
el: 'grid',
minBodyHeight: 250,
bodyHeight: 250, //[선택]Grid 높이 (number(단위: px)|'auto'|'fitToParent')
rowHeaders: ['rowNum'],
columns: gridColumns,
columnOptions: {
frozenCount: 3
},
paginationInfoRef : $$Control._paginationInfo
};
GRID = TuiGrid.of(gridOptions);
};
/**************************************************************************
* initialize
**************************************************************************/
$(document).ready(function(){
$('#vhrno').html('${param.vhrno}')
initPopupGrid();
});
</script>

@ -1,367 +0,0 @@
<%--
================================================================================
File : /fims/biz/cmm/cmmCrackdownRcvFilePopup.jsp
Name : 외부연계파일 처리 - 단속관리>단속현황관리>외부자료연계탭>연계파일처리
Auth : lim.jong.uk
Date : 2022-01-20
Desc : 외부연계파일 처리
================================================================================
Date Author Description
================================================================================
================================================================================
--%>
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ include file="/WEB-INF/jsp/include/taglib.jsp" %>
<%@ include file="/WEB-INF/jsp/include/fims/taglib.jsp" %>
<div class="popup" style="min-width: 100%;">
<div class="container-window1" style="flex-direction: column; max-width: 800px;">
<p class="container-window-header2">외부 연계 자료 선택</p>
<form name="frmSearch" id="frmSearch">
<div class="container-search">
<table>
<caption>검색조건</caption>
<colgroup>
<col style="width: 30%"/>
<col/>
<col/>
<col/>
<col/>
<col/>
<col/>
</colgroup>
<tbody>
<tr>
<td>
<code:select type="CMM_ETC2" id="crdnSeCd" name="crdnSeCd" grpId="FIM002" defaultSelect="01"
onchange="fnBiz.onComboChange()" title="단속구분코드" cls="form-select" alt="단속구분코드" />
</td>
<td colspan="6">
<input id="folder" type="file" webkitdirectory multiple="false"/>
<input id="busInstallDirPath" name="dirPath" type="text" size="400" value="<c:out value='${busInstallDirPath}'/>" title="버스장착형데이타경로" style="display: none; width: 100%" readonly/>
<input id="ctznDirPath" name="dirPath" type="text" size="400" value="<c:out value='${ctznDirPath}'/>" title="시민신고" style="display: none; width: 100%" readonly/>
<span id="warnMsg" style="color: red; font-weight: bold; display: inline-block">동일한 데이타 선택시 중복 처리될수 있습니다.</span>
</td>
</tr>
</tbody>
</table>
</div>
</form>
<div class="container-window-btn1">
<span>
<div class="clearfix" id="totCnt">전체 ㅣ <span>0</span></div>
</span>
<%-- <div class="container-window-btn1">--%>
<span class="flr">
<a href="#" class="btn btn-blue" id="btnRegist">파일 처리</a>
<a href="#" id="btnClose" class="btn btn-lightgray">닫기</a>
</span>
</div>
<div id="grid"></div>
<div class="d-flex flex-row p-3 justify-content-between">
<label id="grid1PagingInfo" class="dataTables_info" role="status" aria-live="polite"></label>
<ul id="grid1Paging" class="pagination pagination-primary"></ul>
</div>
</div>
</div>
<!-- //popup -->
<script type="text/javaScript">
/**************************************************************************
* Global Variable
**************************************************************************/
let GRID = null;
let arrFiles = [];
let $$Control = new FimsDatasetControl({
prefix:"aaa",
prefixName:"ㅁㅁㅁ",
infoSize:"xl",
urls : {
load : fimsApiUrl.FIND_RCV_PATH_FILES
},
keymapper:info => info ? info.SOME_KEY : "",
dataGetter:obj => obj.data.contents
});
$$Control.onDatasetChange = obj => {
let pagination = obj.data.pagination;
if(obj.data.pagination){
$$Control._paginationInfo.totalSize = pagination.totalSize;
$$Control._paginationInfo.pageNum = pagination.pageNum;
} else {
$$Control._paginationInfo.totalSize = obj.count;
}
$$Control.totalCountSetting(obj);
render$$List(obj.data);
if($$Control._paginationInfo.paging && $$Control._paginationInfo.pagingType == "nav"){
let start = 0;
if(pagination.pageNum > 1 && pagination.totalPage > 1 && pagination.totalSize > $$Control._paginationInfo.fetchSize){
start = $$Control._paginationInfo.fetchSize * (pagination.pageNum - 1);
}
$("#grid1Paging").setPaging({
list: $$Control.dataset,
prefix: "grid1",
start: start,
totalSize: pagination.totalSize,
fetchSize: $$Control._paginationInfo.fetchSize,
func: "$$$Control.load({index})",
});
}
};
function search$$s(){
$$Control.query = {"dirPath": $('#dirPath').val()};
GRID.clear();
$$Control.load(1);
}
function render$$List(data) {
if($$Control._paginationInfo.paging && $$Control._paginationInfo.pagingType == "nav"){
GRID.clear();
}
GRID.appendRows(data.contents);
}
/* *******************************
* Biz function
******************************* */
const fnBiz = {
getParams: function(){
if($('#crdnSeCd').val() === '07') {
return {dirPath: $('#busInstallDirPath').val()};
}else if($('#crdnSeCd').val() === '09') {
return {dirPath: $('#ctznDirPath').val()};
}
return {};
}
,fileSelect: (e) => {
//const output = document.querySelector("ul");
arrFiles = [];
const files = e.target.files;
const arrFile = [];
for (let i=0; i<files.length; i++) {
// const item = document.createElement("li");
// item.innerHTML = files[i].webkitRelativePath;
// output.appendChild(item);
arrFile.push({
filePath: '',
fileNm: files[i].name,
fileType: files[i].type,
fileSize: files[i].size,
//lastModified: files[i].lastModified
lastModified: files[i].lastModifiedDate
})
arrFiles.push(files[i]);
}
GRID.resetData(arrFile);
$('#totCnt span').text(arrFile.length);
}
,add: () => {
const arrChecks = GRID.getData();
if(arrChecks.length===0) {
alert("등록[변경]할 데이타가 없습니다.");
return false;
}
if(confirm("등록 하시겠습니까?")) {
const crdnSeCd = $('#crdnSeCd').val();
if(crdnSeCd !== '07' && crdnSeCd !== '09') {
const formData = new FormData();
arrFiles.forEach((f)=> {
formData.append("files", f)
})
$.ajax({
type: 'post'
, enctype: "multipart/form-data"
<%--, url: '<c:url value="/fims/biz/ec/saveCctvCrackdownDatas.do"/>'--%>
, url: fimsApiUrl.SAVE_CCTV_EC_EXTRL_REGLT_CNTCS
, data: formData
, processData: false
, contentType: false
, success: (res) => {
if (res) {
alert(res.message);
search$$s();
}
}
, error: (xhr, status, err) => {
}
})
}else {
const data = {
filePath: crdnSeCd === '07' ? $('#busInstallDirPath').val() : $('#ctznDirPath').val()
,fileInfoList: arrChecks.map((row) => {
return {fileNm: row.fileNm, fileType: row.fileType, fileSize: row.fileSize}
})
}
cmmAjax({
url: crdnSeCd === '07' ? fimsApiUrl.SAVE_BUS_INSTALL_EC_EXTRL_REGLT_CNTC : fimsApiUrl.SAVE_EC_NATL_NEWS_PAPER
,data: JSON.stringify(data)
,contentType: 'application/json; charset=utf-8'
,success: () => {
search$$s();
}
})
}
}
}
,onComboChange: () => {
$('#totCnt span').text(0);
if($('#crdnSeCd').val() === '07') {
$('#folder')
.css('display', 'none')
.attr('disabled', true);
$('#busInstallDirPath')
.css('display', 'inline-block')
.attr('disabled', false);
$('#ctznDirPath')
.css('display', 'none')
.attr('disabled', true);
$('#warnMsg').css('display', 'none')
.attr('disabled', true);
search$$s();
}else if($('#crdnSeCd').val() === '09'){
$('#folder')
.css('display', 'none')
.attr('disabled', true);
$('#busInstallDirPath')
.css('display', 'none')
.attr('disabled', true);
$('#ctznDirPath')
.css('display', 'inline-block')
.attr('disabled', false);
$('#warnMsg').css('display', 'none')
.attr('disabled', true);
search$$s();
}else{
$('#folder')
.css('display', 'inline-block')
.attr('disabled', false);
$('#busInstallDirPath')
.css('display', 'none')
.attr('disabled', true);
$('#ctznDirPath')
.css('display', 'none')
.attr('disabled', true);
$('#warnMsg').css('display', 'inline-block')
.attr('disabled', false);
GRID.resetData([]);
}
}
}
/**************************************************************************
* event
**************************************************************************/
$(() => {
$(window).on("unload", function (e) {
window.opener?.unblockUI();
window.opener?.callbackSearch();
return null;
});
$("#btnClose").on('click', () => {
window.close()
});
$('#folder').on('change', function(e) {
//document.getElementById("folder").select();
//document.selection.clear();
fnBiz.fileSelect(e)
});
$('#btnSearch').on('click', () => search$$s());
$('#btnRegist').on('click', () => {
fnBiz.add();
});
});
/* *******************************
* Grid
******************************* */
const initGrid = () => {
const gridColumns = [
{
header: '경로',
name: 'filePath',
hidden: true
},
{
header: '이름',
name: 'fileNm',
width: 420,
//minWidth: 250,
sortingType: 'desc',
sortable: true,
filter: 'select' //fiter 옵션(select/text/number/date/.. 등이 있으며 설정방법은 상이하므로 사이트 참조)
},
{
header: '타입',
name: 'fileType',
width: 30,
align: 'center',
sortable: true,
},
{
header: '크기',
name: 'fileSize',
width: 80,
sortable: true,
align: 'right',
formatter({value}){
return new Intl.NumberFormat('ko').format(value);
}
},
{
header: '생성일시',
name: 'lastModified',
width: 120,
sortable: true,
align: 'center',
formatter({value}){
//return StrDateTimeFormat.format(value);
return value;
}
}
];
const gridOptions = {
el: 'grid',
rowHeaders: ['rowNum'],
columns: gridColumns,
columnOptions: {
frozenCount: 1
},
bodyHeight: 400,
paginationInfoRef : $$Control._paginationInfo
};
GRID = TuiGrid.of(gridOptions);
}
/**************************************************************************
* initialize
**************************************************************************/
$(document).ready(function(){
initGrid();
$("#crdnSeCd option[value='09']").attr("disabled","disabled");
});
</script>

@ -1,199 +0,0 @@
<%@ page import="cokr.xit.fims.biz.FimsConst" %><%--
================================================================================
File : /fims/biz/cmm/cmmCtznAnswerPreviewPopup.jsp
Name : 답변내용 미리 보기 - 단속관리>단속현황관리>답변처리 탭
Auth : lim.jong.uk
Date : 2022-02-06
Desc : 답변내용 미리 보기 팝업
================================================================================
Date Author Description
================================================================================
================================================================================
--%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
<%@ include file="/WEB-INF/jsp/include/fims/taglib.jsp"%>
<c:set var="ansSeCodeImpose" value="<%= FimsConst.AnswerSeCode.IMPOSE.getCode() %>"/>
<c:set var="ansSeCodeDisallow" value="<%= FimsConst.AnswerSeCode.DISALLOW.getCode() %>"/>
<c:set var="ansSeCodeEnlight" value="<%= FimsConst.AnswerSeCode.ENLIGHT.getCode() %>"/>
<div class="popup" style="min-width: 100px;">
<div class="container-window1" style="flex-direction: column">
<p class="container-window-header2" id="txtTitle">${txtTitle}<span style='font-weight: normal; padding-left: 20px; color:darkred;' id="ansInfo"></span></p>
<form>
<input type="hidden" name="interfaceSeqN"/>
<table class="table-03">
<caption>답변미리보기</caption>
<colgroup>
<col style="width: 100%;"/>
<col/>
</colgroup>
<tbody>
<tr>
<td colspan="2">
<textarea id="cvlcptPrcsRsltCn" name='cvlcptPrcsRsltCn' cols="130" rows="20"></textarea>
</td>
</tr>
</tbody>
</table>
</form>
<div class="container-window-btn1">
<div class="container-window-btn-right">
<button type="button" id="double_prev" name="double_prev" class="btn btn-sm btn-pagination">
<i class="fa-solid fa-angles-left"></i>
</button>
<button type="button" id="prev" name="prev" class="btn btn-sm btn-pagination">
<i class="fa-solid fa-angle-left"></i>
</button>
<span id="totCnt" style="padding: 0 10px;"></span>
<button type="button" id="next" name="next" class="btn btn-sm btn-pagination">
<i class="fa-solid fa-angle-right"></i>
</button>
<button type="button" id="double_next" name="double_next" class="btn btn-sm btn-pagination">
<i class="fa-solid fa-angles-right"></i>
</button>
<a href="#" class="btn btn-blue" id="btnSave">변경</a>
<a href="#" id='btnClose' class="btn btn-lightgray">닫기</a>
</div>
</div>
</div>
</div>
<script defer type="text/javaScript">
/**************************************************************************
* Global Variable
**************************************************************************/
let orgData;
/* *******************************
* Biz function
******************************* */
const fnPopupBiz = {
search: (params) => {
cmmAjax({
showSuccessMsg: false
,url: fimsApiUrl.FIND_CTZN_ANS_INFO
,data: params
,success: (res) => {
let navObj = {};
if(window.opener.ARR_NAV != null){
navObj = window.opener.ARR_NAV[window.opener.CUR_TAB_IDX];
} else {
navObj = window.opener.pageNav;
}
navObj.reloadNav($('#prev'), $('#next'), $('span#totCnt'));
fnPopupBiz.setAnsDataInfo(params);
const data = res.data?.contents;
if(data){
let formFields = new FimsFormFields("form");
formFields.set(data);
orgData = $('form').serialize();
}
//TODO : 답변대기인 경우 템플릿 조회로 진행하도록 반영(변경 버튼 숨김)
//
// const ansTxts = [];
// if(!data){
// ansTxts.push('답변 불가');
// }else{
// ansTxts.push(data.prface);
// ansTxts.push(data.answerCn)
// ansTxts.push(data.tlface)
// }
//$('#ansPreviewTxt').text(ansTxts.join('\n\n'));
}
})
}
,setAnsDataInfo: (param) => {
let ansDiv = '';
let resnNm = '';
let ansInfoTxt = param.vhrno + ' [ ';
if(param.answerSeCode === '${ansSeCodeImpose}'){
ansInfoTxt += '부과 ]';
} else if(param.answerSeCode === '${ansSeCodeDisallow}'){
ansInfoTxt += '불수용(서손)';
resnNm = ComboCodeData.disallowAnswerSeCode.filter(d => d.value === param.resnCode)[0]?.text;
ansInfoTxt += resnNm ? ' : ' + resnNm + ' ]' : ' ]';
}
else if(param.answerSeCode === '${ansSeCodeEnlight}') {
ansInfoTxt += '계도';
resnNm = ComboCodeData.disallowAnswerSeCode.filter(d => d.value === param.resnCode)[0]?.text;
ansInfoTxt += resnNm ? ' : ' + resnNm + ' ]' : ' ]';
}
$('#ansInfo').text(ansInfoTxt);
}
}
/**************************************************************************
* event
**************************************************************************/
$(() => {
$("#btnClose").on('click', () => {
window.close()
});
$("#btnSave").on('click', () => {
if(orgData === $('form').serialize()){
alert('변경된 내용이 없습니다.');
return false;
}
cmmBizAjax('modify',{
url: fimsApiUrl.MODIFY_CTZN_ANS_TXT
,data: $('form').serialize()
// ,data: {
// interfaceSeqN: $('input[name=interfaceSeqN]').val()
// ,cvlcptPrcsRsltCn: $('textarea[name=cvlcptPrcsRsltCn]').val()
// }
})
});
$('#prev').on('click', () => {
let navObj = {};
if(window.opener.ARR_NAV != null){
navObj = window.opener.ARR_NAV[window.opener.CUR_TAB_IDX];
} else {
navObj = window.opener.pageNav;
}
navObj.onClickNavBtn('prev', (gridInfo) => {
fnPopupBiz.search(gridInfo.curRowData)
});
})
$('#next').on('click', () => {
let navObj = {};
if(window.opener.ARR_NAV != null){
navObj = window.opener.ARR_NAV[window.opener.CUR_TAB_IDX];
} else {
navObj = window.opener.pageNav;
}
navObj.onClickNavBtn('next', (gridInfo) => {
fnPopupBiz.search(gridInfo.curRowData);
});
});
})
/**************************************************************************
* initialize
**************************************************************************/
$(document).ready(function(){
const param = {
tmplatId: '${param.tmplatId}'
,answerSeCode: '${param.answerSeCode}'
,resnCode: '${param.resnCode}'
,interfaceSeqN: '${param.interfaceSeqN}'
,vhrno: '${param.vhrno}'
}
//fnPopupBiz.setAnsDataInfo(param);
fnPopupBiz.search(param);
});
</script>

@ -1,308 +0,0 @@
<%--
================================================================================
File : /fims/biz/cmm/cmmCtznComplaintHistPopup.jsp
Name : 단속현황 시민 민원 이력 팝업 - 단속관리>초기자료 편집
Auth : lim.jong.uk
Date : 2023-03-20
Desc : 단속현황 시민 민원 이력 팝업
================================================================================
Date Author Description
================================================================================
================================================================================
--%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
<%@ include file="/WEB-INF/jsp/include/fims/taglib.jsp"%>
<div class="popup" style="min-width: 100px;">
<div class="container-window2" style="max-width: 800px;">
<p class="container-window-header2">
민원 이력
</p>
<div class="container-fix05">
<div class="container-fix04 card">
<div class="card-header card-header-line">
<div class="card-title fw-bold">개별자료 민원 등록내역</div>
</div>
<div class="card-body">
<div id="grid_cplnt"></div>
</div>
</div>
<div class="container-fix04 card">
<div class="card-header card-header-line">
<div class="card-title fw-bold">차량번호 민원 등록내역</div>
</div>
<div class="card-body">
<div id="grid_vhrno_cplnt"></div>
</div>
</div>
</div>
<div class="container-fix05">
<div class="container-fix04 card mt-3">
<div class="card-header card-header-line">
<div class="card-title fw-bold">민원 내용</div>
</div>
<div class="card-body">
<textarea id="content0" name="content0" cols="0" rows="5" style="overflow-y: scroll; width:100%;"></textarea>
</div>
</div>
<div class="container-fix04 card mt-3">
<div class="card-header card-header-line">
<div class="card-title fw-bold">차량번호 민원 내용</div>
</div>
<div class="card-body">
<textarea id="content1" name="content1" cols="0" rows="5" style="overflow-y: scroll; width:100%;"></textarea>
</div>
</div>
</div>
<div class="container-window-btn1">
<div class="container-window-btn-right">
<span>
<a href="#" id='btnClose' class="btn btn-lightgray">닫기</a>
</span>
</div>
</div>
</div><!--row -->
</div>
<script type="text/javaScript">
let $$Control = new FimsDatasetControl({
prefix:"aaa",
prefixName:"ㅁㅁㅁ",
infoSize:"xl",
urls : {
load : fimsApiUrl.FIND_CTZN_STTEMNT_CMPLT
},
keymapper:info => info ? info.SOME_KEY : "",
dataGetter:obj => obj.data.contents
});
$$Control.onDatasetChange = obj => {
let pagination = obj.data.pagination;
if(obj.data.pagination){
$$Control._paginationInfo.totalSize = pagination.totalSize;
$$Control._paginationInfo.pageNum = pagination.pageNum;
} else {
$$Control._paginationInfo.totalSize = obj.count;
}
$$Control.totalCountSetting(obj);
render$$List(obj.data);
if($$Control._paginationInfo.paging && $$Control._paginationInfo.pagingType == "nav"){
let start = 0;
if(pagination.pageNum > 1 && pagination.totalPage > 1 && pagination.totalSize > $$Control._paginationInfo.fetchSize){
start = $$Control._paginationInfo.fetchSize * (pagination.pageNum - 1);
}
$("#grid1Paging").setPaging({
list: $$Control.dataset,
prefix: "grid_cplnt",
start: start,
totalSize: pagination.totalSize,
fetchSize: $$Control._paginationInfo.fetchSize,
func: "$$$Control.load({index})",
});
}
};
function search$$s(){
$$Control.query = {gubun: 0, rtpyrId: '${param.rtpyrId}', crdnId: '${param.crdnId}'};
$2$Control.query = {gubun: 1, vhrno: '${param.vhrno}'};
ARR_TAP_GRID[0].clear();
ARR_TAP_GRID[1].clear();
$$Control.load(1);
$2$Control.load(1);
}
function render$$List(data) {
if($$Control._paginationInfo.paging && $$Control._paginationInfo.pagingType == "nav"){
ARR_TAP_GRID[0].clear();
}
ARR_TAP_GRID[0].appendRows(data.contents);
}
let $2$Control = new FimsDatasetControl({
prefix:"aaa",
prefixName:"",
infoSize:"xl",
urls : {
load : fimsApiUrl.FIND_CTZN_STTEMNT_CMPLT
},
keymapper:info => info ? info.SOME_KEY : "",
dataGetter:obj => obj.data.contents
});
$2$Control.onDatasetChange = obj => {
let pagination = obj.data.pagination;
if(obj.data.pagination){
$2$Control._paginationInfo.totalSize = pagination.totalSize;
$2$Control._paginationInfo.pageNum = pagination.pageNum;
} else {
$2$Control._paginationInfo.totalSize = obj.count;
}
$2$Control.totalCountSetting(obj);
render$2$List(obj.data);
if($2$Control._paginationInfo.paging && $2$Control._paginationInfo.pagingType == "nav"){
let start = 0;
if(pagination.pageNum > 1 && pagination.totalPage > 1 && pagination.totalSize > $2$Control._paginationInfo.fetchSize){
start = $2$Control._paginationInfo.fetchSize * (pagination.pageNum - 1);
}
$("#grid2Paging").setPaging({
list: $2$Control.dataset,
prefix: "grid_vhrno_cplnt",
start: start,
totalSize: pagination.totalSize,
fetchSize: $2$Control._paginationInfo.fetchSize,
func: "$$$2Control.load({index})",
});
}
};
function render$2$List(data) {
if($2$Control._paginationInfo.paging && $2$Control._paginationInfo.pagingType == "nav"){
ARR_TAP_GRID[1].clear();
}
ARR_TAP_GRID[1].appendRows(data.contents);
}
/**************************************************************************
* Global Variable
**************************************************************************/
// 민원 등록 이력 / 차량 번호 민원 등록 이력
const ARR_TAP_GRID = [null,null];
const ARR_TAP_TOTCNT = [0, 0];
let CUR_TAB_SEQ = 0;
/* *******************************
* Biz function
******************************* */
const fnPopupBiz = {
onCplntHisClickGrid: (props) => {
const rowData = props.grid.getRow(props.rowKey);
if(props.grid.el.id === 'grid_cplnt'){
$('#content0').val(rowData.content);
}else{
$('#content1').val(rowData.content);
}
}
};
/**************************************************************************
* event
**************************************************************************/
$(() => {
$("#btnClose").on('click', () => {
window.close()
});
});
/* ******************************
* Grid
****************************** */
const initPopupGrid = () => {
const vhrnoCplntHisColumns = [
{
header: '내용',
name: 'content',
minWidth: 150,
//editor: 'text',
sortable: false,
align: 'center',
renderer: {
type: CustomButtonRenderer,
options: {
formatter: (props)=>{
return {
formatter: props.grid.getRow(props.rowKey).content
,element: "text"
}
}
,eventFunction: fnPopupBiz.onCplntHisClickGrid
,eventType: "click"
}
}
},
{
header: '차량번호',
name: 'vhrno',
minWidth: 90,
//editor: 'text',
sortable: false,
align: 'center'
},
{
header: '등록일시',
name: 'regDt',
minWidth: 120,
//editor: 'text',
sortable: true,
align: 'center',
formatter({value}) {
return StrDateTimeFormat.format(value);
}
},
{
header: '등록자',
name: 'rgtr',
minWidth: 120,
//editor: 'text',
sortable: false,
align: 'center'
}
];
const cplntHisColumns = vhrnoCplntHisColumns.filter((_, index) => index !== 1 );
const gridOptions = {
minBodyHeight: 200,
bodyHeight: 200, //[선택]Grid 높이 (number(단위: px)|'auto'|'fitToParent')
rowHeaders: ['rowNum']
};
// 민원 등록 내역
ARR_TAP_GRID[0] = TuiGrid.of({
...gridOptions,
el: 'grid_cplnt',
columns: cplntHisColumns,
paginationInfoRef : $$Control._paginationInfo
});
// 차량 번호 민원 등록 내역
ARR_TAP_GRID[1] = TuiGrid.of({
...gridOptions,
el: 'grid_vhrno_cplnt',
columns: vhrnoCplntHisColumns,
paginationInfoRef : $2$Control._paginationInfo
});
};
/**************************************************************************
* initialize
**************************************************************************/
$(document).ready(function(){
initPopupGrid();
const param = {
crdnId: '${param.crdnId}'
,rtpyrId: '${param.rtpyrId}'
,vhrno: '${param.vhrno}'
};
search$$s();
});
</script>

@ -1,160 +0,0 @@
<%--
================================================================================
File : /fims/biz/cmm/cmmEnlightDisallowPopup.jsp
Name : 서손 / 계도 처리 팝업 - 단속관리>단속현황관리
Auth : lim.jong.uk
Date : 2022-02-03
Desc : 서손 / 계도 처리 팝업
================================================================================
Date Author Description
================================================================================
================================================================================
--%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
<%@ include file="/WEB-INF/jsp/include/fims/taglib.jsp"%>
<style>
#crdnSttsCd {
width: 29%;
color: #2a48ff;
background-color: #d8e7ff;
font-weight: bold;
}
#crdnRegSeCd {
color: #2a48ff;
background-color: #d8e7ff;
}
.act_bg_color {
background-color: #d8e7ff; !important;
}
.bg_red_color {
background-color: darkred;
}
select[name=ffnlgCarmdlCd] {
width: 30%;
}
select[name=rtpyrSeCd] {
width: 25%;
}
</style>
<c:set var="isUpdate" value="${!empty infoDTO.crdnId}"/>
<c:set var="bizName" value="주민 신고"/>
<div class="popup" style="min-width: 100px;">
<div class="container-window1" style="flex-direction: column">
<p class="container-window-header2" id="txtTitle">${txtTitle}</p>
<form>
<table class="table-03">
<caption>위반정보 상세</caption>
<colgroup>
<col style="width: 20%;"/>
<col/>
</colgroup>
<tbody>
<tr id="t">
<th>처리일</th>
<td>
<span class="form-search-linebox">
<input type="text" id="processDt" name="processDt" style="width: 50%" class="form-control form-date" title="처리일 선택" placeholder="날짜를 선택하세요">
<button type="button" class="bx bx-calendar bg-white"></button>
</span>
</td>
</tr>
<tr>
<th>처리사유</th>
<td>
<code:select id="enlightResnCode" name="enlightResnCode" grpId="FIM025" defaultSelect="00" title="계도사유" cls="form-select" alt="계도사유"/>
<code:select id="levyExclRsnCd" name="levyExclRsnCd" grpId="FIM021" title="서손구분" defaultSelect="01" cls="form-select" alt="서손구분"/>
</td>
</tr>
<tr id="trErpp">
<th>특기사항</th>
<td>
<input type="text" id='etcCn' name="etcCn" />
</td>
</tr>
</tbody>
</table>
</form>
<div class="container-window-btn1">
<div class="container-window-btn-right">
<a href="#" class="btn btn-blue" id="btnSave">처리</a>
<a href="#" id='btnClose' class="btn btn-lightgray">닫기</a>
</div>
</div>
</div>
</div>
<script defer type="text/javaScript">
/**************************************************************************
* Global Variable
**************************************************************************/
let bizDiv;
/* *******************************
* Biz function
******************************* */
const fnPopupBiz = {
changeTag: () => {
if(bizDiv ==='ENLIGHT'){
$('#enlightResnCode').show();
$('#levyExclRsnCd').hide();
$('#trErpp').hide();
}else{
$('#enlightResnCode').hide();
$('#levyExclRsnCd').show();
$('#trErpp').show();
}
}
}
/**************************************************************************
* event
**************************************************************************/
$(() => {
$("#btnClose").on('click', () => {
window.close()
});
$("#btnSave").on('click', () => {
if(bizDiv ==='ENLIGHT'){
window.opener.callbackEnlightErpp({
bizDiv
,processDt: $('#processDt').val().replaceAll('-','')
,enlightResnCode: $('#enlightResnCode').val()
,levyExclRsnCd: ''
,etcCn: ''
})
}else{
window.opener.callbackEnlightErpp({
bizDiv
,processDt: $('#processDt').val().replaceAll('-','')
,enlightResnCode: ''
,levyExclRsnCd: $('#levyExclRsnCd').val()
,etcCn: $('#etcCn').val()
})
}
window.close()
});
})
/**************************************************************************
* initialize
**************************************************************************/
$(document).ready(function(){
$('#processDt').datepicker('setDate', new Date());
bizDiv = '${bizDiv}';
fnPopupBiz.changeTag();
});
</script>

@ -1,834 +0,0 @@
<%@ page import="cokr.xit.fims.biz.FimsConst" %><%--
================================================================================
File : /fims/biz/cmm/cmmCrackdownEditPopup.jsp
Name : 단속 데이타 처리 - 단속관리>단속현황관리
Auth : lim.jong.uk
Date : 2022-01-20
Desc : 단속 데이타 처리 팝업
================================================================================
Date Author Description
================================================================================
================================================================================
--%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
<%@ include file="/WEB-INF/jsp/include/fims/taglib.jsp"%>
<c:set var="citizen" value="<%= FimsConst.CrdnSeCd.CITIZEN.getCode() %>"/>
<style>
#crdnRegSeCd {
color: #2a48ff;
background-color: #d8e7ff;
}
.act_bg_color {
background-color: #d8e7ff; !important;
}
.bg_red_color {
background-color: darkred;
}
/* 단속 건수 */
.empCls {
color: #2a48ff;
background-color: #d8e7ff;
}
</style>
<div class="popup" style="min-width: 100px;">
<div class="container-window1 flex-row">
<div class="container-fix09 card">
<div class="card-header card-header-line">
<div id="txtTitle" class="card-title fw-bold"></div>
</div>
<div class="card-body">
<form id="frm">
<input type="hidden" name="crdnId" />
<input type="hidden" name="fileLinkId" />
<input type="hidden" name="interfaceSeqN" />
<input type="hidden" name="rtpyrId" />
<table class="table-03 col-12">
<caption>위반정보 상세</caption>
<colgroup>
<col style="width: 12%;"/>
<col style="width: 39%;"/>
<col style="width: 12%;"/>
<col style="width: 39%;"/>
</colgroup>
<tbody>
<tr>
<th>시스템구분</th>
<td>
<code:select id="sysSeCd" name="sysSeCd" grpId="FIM001" title="시스템구분" cls="form-select" alt="시스템구분" disabled="true"/>
</td>
</tr>
<tr>
<th>등록구분</th>
<td>
<code:select id="crdnRegSeCd" name="crdnRegSeCd" grpId="FIM026" title="단속자료등록구분" cls="form-select" alt="단속자료등록구분"/>
</td>
<th>자료출처</th>
<td>
<code:select id="crdnSeCd" name="crdnSeCd" grpId="FIM002" title="자료출처" cls="form-select" alt="자료출처" disabled="true"/>
</td>
</tr>
<tr id="t">
<th>위반일</th>
<td>
<span class="form-search-linebox">
<input type="text" data-fmt-type="day" id="crdnYmd" name="crdnYmd"
class="form-control form-date w-form-date" title="위반일 선택"
placeholder="날짜를 선택하세요">
<button type="button" class="bx bx-calendar bg-white"></button>
</span>
</td>
<th>위반시간</th>
<td>
<input type="text" data-fmt-type="time" name="crdnBgngTm" class="act_bg_color" />
</td>
</tr>
<tr>
<th>사진건수</th>
<td>
<div class="d-flex gap-1">
<input type="text" name="atchFileCnt" data-fmt-type="number" class="w-px-50" />
</div>
</td>
</tr>
<tr>
<th>GPS위도</th>
<td>
<input type="text" name="gpsX" readonly>
</td>
<th>GPS경도</th>
<td>
<input type="text" name="gpsY" readonly>
</td>
</tr>
<tr>
<th>처리상태</th>
<td>
<code:select id="trsmCd" name="trsmCd" grpId="FIM010" title="처리상태" cls="form-select" alt="처리상태" disabled="true"/>
</td>
</tr>
<tr id="ctzn1">
<th>신고자</th>
<td>
<input type="text" name="cvlcptAplcntNm" />
</td>
<th>연락처</th>
<td>
<input type="text" name="cvlcptAplcntMoblphonNo" />
</td>
</tr>
<tr id="ctzn2">
<th>신고내용</th>
<td colspan="3">
<textarea type="text" name="cvlcptAplyCn" col="180" rows="5"></textarea>
</td>
</tr>
<tr>
<th>위반장소</th>
<td colspan="3">
<input type="text" name="crdnPlc" />
</td>
</tr>
<tr>
<th>위반내역</th>
<td colspan="3">
<input type="text" name="vltnCn" />' readonly>
</td>
</tr>
<tr>
<th>시군구명</th>
<td>
<input type="text" name="sggNm" />
</td>
<th>법정동명</th>
<td>
<input type="text" name="crdnStdgNm" class="act_bg_color"/>
</td>
</tr>
<tr>
<th>접수일</th>
<td>
<input type="text" data-fmt-type="day" name="cvlcptRcptYmd" />
</td>
<th>답변기한</th>
<td>
<span class="form-search-linebox">
<input type="text" data-fmt-type="day" name="cvlcptPrcsPrnmntYmd"
class="form-control form-date w-form-date" title="답변기한 선택" placeholder="날짜를 선택하세요">
<button type="button" class="bx bx-calendar bg-white"></button>
</span>
</td>
</tr>
<tr><td colspan="4" style="padding-bottom: 10px"></td></tr>
<tr>
<th>
<label class="required">차량번호</label>
</th>
<td>
<input type="text" name="vhrno" style="width: 50%" class="act_bg_color"/>
<a href="javascript:void(0);" id="vhcleSearch">
<i class="bx bx-search"></i>
</a>
<a href="javascript:fnPopupBiz.goCarCrackdownCntPopup()">
<em id="crackdown" class="empCls">단속횟수: &nbsp;<span id="vhrnoCnt"></span>&nbsp;회</em>
</a>
</td>
<th>면제차량여부</th>
<td>
<input type="text" name="" style="width: 50%" readonly/>
</td>
</tr>
<tr>
<th>특기사항</th>
<td colspan="3">
<input type="text" name="etcCn" style="width: 70%" readonly/>
<%-- <em id="minwon" class="empCls">민원등록: &nbsp;<span id="minwonCnt"></span>&nbsp;회</em>--%>
<a href="javascript:fnPopupBiz.goMinwonPopup()"><em id="minwon" class="empCls">민원등록이력: &nbsp;<span id="minwonCnt"></span>&nbsp;회</em></a>
</td>
</tr>
<tr>
<th>소유자(차종)</th>
<td>
<div class="d-flex gap-1">
<input type="text" name="rtpyrNm" />
<code:select id="ffnlgCarmdlCd" name="ffnlgCarmdlCd" grpId="FIM009" title="차종" cls="form-select w-form-select" alt="차종"/>
</div>
</td>
<th>주민번호(구분)</th>
<td>
<div class="d-flex gap-1">
<code:select id="rtpyrSeCd" name="rtpyrSeCd" grpId="FIM011" title="납부자구분" cls="form-select w-form-select" alt="납부자구분"/>
<privacy:input id="rtpyrNo" name="rtpyrNo" />
</div>
</td>
</tr>
<tr>
<th>특별단속구역</th>
<td>
<code:select id="crdnSpareaCd" name="crdnSpareaCd" grpId="FIM007" title="특별단속구역" cls="form-select" alt="단속처리상태"/>
</td>
<th>위반내용</th>
<td>
<code:select id="violtDtlsCode" name="violtDtlsCode" grpId="FIM004" title="위반내용" cls="form-select" alt="위반내용"/>
</td>
</tr>
<tr>
<th>우편번호(주소)</th>
<td colspan="3">
<input type="text" name="zip" style="width: 30%" readonly/>
<a href="javascript:void(0);" id="addrSearch">
<i class="bx bx-search"></i>
</a>
</td>
</tr>
<tr>
<th>주소</th>
<td colspan="3">
<input type="text" name="adres" style="width: 65%" readonly/>
<input type="text" name="daddr" style="width: 33%" />
</td>
</tr>
<tr>
<th>차량명칭/색상</th>
<td>
<input type="text" name="vhclNm" style="width:65%" readonly/>
<input type="text" name="vhcleColor" value="" style="width:33%" readonly/>
</td>
<th>차대번호</th>
<td>
<input type="text" name="vin" />
</td>
</tr>
<tr>
<th>등록일시</th>
<td>
<input type="text" name="regDt" readonly>
</td>
</tr>
</tbody>
</table>
</form>
<div class="container-window-btn1">
<div id="pageNavDiv" class="container-window-btn-right">
<button type="button" id="double_prev" name="double_prev" class="btn btn-sm btn-pagination">
<i class="fa-solid fa-angles-left"></i>
</button>
<button type="button" id="prev" name="prev" class="btn btn-sm btn-pagination">
<i class="fa-solid fa-angle-left"></i>
</button>
<span id="totCnt" style="padding: 0 10px;"></span>
<button type="button" id="next" name="next" class="btn btn-sm btn-pagination">
<i class="fa-solid fa-angle-right"></i>
</button>
<button type="button" id="double_next" name="double_next" class="btn btn-sm btn-pagination">
<i class="fa-solid fa-angles-right"></i>
</button>
</div>
<a href="#" class="btn btn-blue" id="btnInst">등록</a>
<c:if test="${!isImpose}">
<a href="#" class="btn btn-blue" id="btnImposeTgt">부과대상</a>
<a href="#" class="btn btn-blue" id="btnEnlight">계도처리</a>
<a href="#" class="btn btn-blue" id="btnDisallow">서손처리</a>
</c:if>
<c:if test="${isImpose}">
<a href="#" class="btn btn-blue" id="btnImpose">부과</a>
</c:if>
<a href="#" id='btnClose' class="btn btn-lightgray">닫기</a>
</div>
</div>
</div>
<div class="container-fix09 card" style="width:0px; min-width:300px!important;">
<div class="card-header card-header-line">
<div class="card-title fw-bold">위반사진</div>
</div>
<div class="card-body">
<div id="imgList"></div>
<div>
<img id="uploadImage"/>
</div>
</div>
</div>
</div>
</div>
<script type="text/javascript" src="${pageContext.request.contextPath}/resources/js/fims/framework/cmm/cmmDownloadImg.js"></script>
<script type="text/javaScript">
/**************************************************************************
* Global Variable
**************************************************************************/
var fnCallbackZipSearch = (obj) => fnPopupBiz.setZipSearch(obj, document.querySelector('#frm'));
var imageEditorPopup = (flag, params) => fnPopupBiz.pagePopup(flag, params);
var callbackReloadImage = () => fnPopupBiz.downloadImg();
var callbackEnlightErpp = (data) => fnPopupBiz.callbackEnlightErpp(data);
let formFields = new FimsFormFields("#frm");
let orgData;
let callPopup;
let isCtzn = false;
let imgPk = '';
let crdnSeCd = '';
let schParam = null;
let extnlCarUrl = '${extnlCarUrl}';
let $$Control = new FimsDatasetControl({
prefix:"aaa",
prefixName:"ㅁㅁㅁ",
infoSize:"xl",
urls : {
imageEditor : frwkApiUrl.POPUP_PAINTWEB_IMG_EDITOR,
imageView : frwkApiUrl.POPUP_IMG_VIEW,
callEnlightErppPopup : fimsApiUrl.POPUP_ENLIGHT_DISALLOW,
minwonPopup : fimsApiUrl.POPUP_CTZN_CMPLNT_HIST,
carCrackdownCntPopup : fimsApiUrl.POPUP_CAR_CRACKDOWN_CNT
},
keymapper:info => info ? info.SOME_KEY : "",
dataGetter:obj => obj.data.contents
});
/* *******************************
* Biz function
******************************* */
const fnPopupBiz = {
search: (params) => {
cmmAjax({
showSuccessMsg: false
,url: fimsApiUrl.FIND_CRACKDOWN_INFO
,data: params
,success: (res) => {
let dataKey = '';
let curId = res.infoDTO.crdnId;
let vhrnoCnt = 0;
crdnSeCd = res.infoDTO.crdnSeCd;
if(crdnSeCd === '${citizen}'){
isCtzn = true;
imgPk = res.infoDTO.interfaceSeqN;
dataKey = imgPk + ' - ' + res.infoDTO.interfaceSeqN;
}else{
isCtzn = false;
imgPk = res.infoDTO.fileLinkId;
dataKey = imgPk;
}
let crdnSeNm = "";
if(crdnSeCd != null && crdnSeCd != ""){
crdnSeNm = ComboCodeData.crdnSeCd.filter(d => d.value === crdnSeCd)[0].text;
}
$('#txtTitle').html(crdnSeNm + '&nbsp;&nbsp;&nbsp;[&nbsp;' + dataKey + '&nbsp;]');
fnPopupBiz.showCrackdownVhrnoCnt(res.infoDTO.vhrnoCnt);
fnPopupBiz.showMinwonCnt(res.infoDTO.minwonCnt);
schParam = {
crdnId: res.infoDTO?.crdnId,
crdnSeCd: res.infoDTO?.crdnSeCd,
rtpyrId: res.infoDTO.rtpyrId,
vhrno: res.infoDTO.vhrno
}
cmmImgDownload('#imgList', res.attchFiles, fnPopupBiz.pagePopup, true, '60px',
() => ''
);
let navObj = {};
if(window.opener.ARR_NAV != null){
navObj = window.opener.ARR_NAV[window.opener.CUR_TAB_IDX];
} else {
navObj = window.opener.pageNav;
}
navObj.reloadNav($('#prev'), $('#next'), $('span#totCnt'));
fnPopupBiz.resetDisplay(res.ctznDTO?.cvlcptRcptNo);
let formFields = new FimsFormFields("#frm");
formFields.set({...res.ctznDTO, ...res.rtpyrDTO, ...res.infoDTO});
orgData = $('form').serialize();
}
})
}
,downloadImg: () => {
cmmAjax({
showSuccessMsg: false
,url: isCtzn? fimsApiUrl.FIND_EC_NATL_NEWS_PAPER_ATTCH_FILES : fimsApiUrl.FIND_EC_EXTRL_REGLT_CNTC_ATTCH_FILES
,data: isCtzn? {interfaceSeqN: imgPk} : {fileLinkId: imgPk, crdnSeCd: crdnSeCd}
,success: (res) => {
cmmImgDownload('#imgList', res.data?.contents, fnPopupBiz.pagePopup, true);
}
})
}
,pagePopup: function(flag, params) {
let url;
let popTitle;
let popOption;
switch (flag) {
//FIXME: 이미지에디터 팝업 width, height는 952, 800으로 fix
// paintweb config의 imageWidth, imageHeight, viewportWidth, viewPortHeight 와 같이 연관
case "imageEditor":
popOption = {width: 952, height: 800, resizable:false,scrollbars:'no'};
popTitle = "이미지 에디터";
window.opener.popup = CmmPopup.open($$Control.urls[flag], params, popOption, popTitle);
break;
case "imageView":
popOption = {width: 950, height: 750, resizable:false,scrollbars:'no'};
popTitle = "이미지 보기";
window.opener.popup = CmmPopup.open($$Control.urls[flag], params, popOption, popTitle);
break;
case "callEnlightErppPopup":
popOption = {width: 500, height: 400};
popTitle = "계도 / 서손 처리";
callPopup = CmmPopup.open($$Control.urls[flag], params, popOption, popTitle);
break;
default:
break;
}
}
,setZipSearch: function(zipObj, tgtObj){
//FIXME : 소유자 정보에 필요한 내용 추가 필요 - 법정동, 빌딩명, 주소구분 등
// hidden 필드로 추가도 함께
tgtObj.adres.value = zipObj.roadAddrPart1;
tgtObj.zip.value = zipObj.zipNo;
//tgtObj.zip_view.value = zipObj.zipNo;
tgtObj.daddr.value = zipObj.roadAddrPart2 + ' ' + zipObj.addrDetail;
}
,resetDisplay: (cvlcptRcptNo) => {
if(cvlcptRcptNo){
//$('tr[id*=cctv]').hide();
$('tr[id*=ctzn]').show();
} else{
//$('tr[id*=cctv]').show();
$('tr[id*=ctzn]').hide();
}
}
,findCarNo: () => {
if(!$('input[name=vhrno]').val()){
alert('먼처 차량번호를 입력해 주세요.');
$('input[name=vhrno]').focus();
return false;
}
///////////////////////////////////////////////////
// FIXME :: 차적조회 연계
///////////////////////////////////////////////////
/*
owner_mber_no(회원번호:주민/법인번호), vin:차대번호, vhrno: 차량번호 중 1개 필수
levy_stdde: 부과기준일(yyyyMMdd)
*/
const param = {
owner_mber_no: '',
vin: $('input[name=vin]').val(),
vhrno: $('input[name=vhrno]').val(),
levy_stdde: '20220122'
}
let url = extnlCarUrl + '/api/v1/car/findCar';
cmmApiCall({
url
, data: JSON.stringify(param)
, success: (res) => {
alert('차적조회 결과 : \n' + JSON.stringify(res));
///////////////////////////////////////////////////
// FIXME :: 차적조회 연계 완료후 binding 필요
///////////////////////////////////////////////////
$('input[name=vhclNm]').val(res.cnm);
$('input[name=vhcleColor]').val(res.color_nm);
cmmAjax({
showSuccessMsg: false
, url: fimsApiUrl.FIND_CRACKDOWN_VHRNO_CNT
, data: {vhrno: $('input[name=vhrno]').val()}
, success: (res) => {
fnPopupBiz.showCrackdownVhrnoCnt(res.data?.contents);
}
})
}
})
}
,callbackEnlightErpp: (data) => {
//if(!fnPopupBiz.validate()) return false;
let saveData = fnPopupBiz.getSaveData(data);
let url;
let confirmMsg;
if(data.bizDiv ==='ENLIGHT'){
url = '/fims/biz/cmm/saveEnlight.do';
confirmMsg = '계도'
}else{
const erppDTO = {
crdnId: saveData.crdnId
, levyExclYmd:data.processDt
, levyExclRsnCd: data.levyExclRsnCd
, etcCn: data.etcCn
}
saveData = {...saveData, erppDTO: erppDTO}
url = '/fims/biz/cmm/saveDisallow.do';
confirmMsg = '불수용(서손)'
}
//if(!confirm(confirmMsg + ' 처리 하시겠습니까?')) return false;
cmmAjax({
url: url
,contentType: 'application/json'
,data: JSON.stringify(saveData)
,success: (res) => {
let navObj = {};
if(window.opener.ARR_NAV != null){
navObj = window.opener.ARR_NAV[window.opener.CUR_TAB_IDX];
} else {
navObj = window.opener.pageNav;
}
navObj.onClickNavBtn('next', (gridInfo) => {
fnPopupBiz.search(gridInfo.curRowData);
});
}
})
}
,getSaveData: (data) => {
const infoDTO = {
crdnId: $('input[name=crdnId]').val()
,fileLinkId: $('input[name=fileLinkId]').val()
,interfaceSeqN: $('input[name=interfaceSeqN]').val()
,crdnSeCd: $('select[name=crdnSeCd]').val()
,crdnRegSeCd: $('select[name=crdnRegSeCd]').val()
,crdnYmd: $('input[name=crdnYmd]').val().replaceAll('-','')
,crdnBgngTm: $('input[name=crdnBgngTm]').val()
,sysSeCd: $('select[name=sysSeCd]').val()
,atchFileCnt: $('input[name=atchFileCnt]').val()
,crdnPlc: $('input[name=crdnPlc]').val()
//시군군 추가
,crdnStdgNm: $('input[name=crdnStdgNm]').val()
,vhrno: $('input[name=vhrno]').val()
//면제차량 여부 추가 : $('input:checkbox[name=sysSeCd]:checked').val()
,etcCn: $('input[name=etcCn]').val()
,ffnlgCarmdlCd: $('select[name=ffnlgCarmdlCd]').val()
,crdnSpareaCd: $('select[name=crdnSpareaCd]').val()
,violtDtlsCode: $('select[name=violtDtlsCode]').val()
,vhclNm: $('input[name=vhclNm]').val()
,vin: $('input[name=vin]').val()
,enlightProcessDe: data?.processDt
,enlightResnCode: data?.enlightResnCode
}
const ctznDTO = {
interfaceSeqN: $('input[name=interfaceSeqN]').val()
,cvlcptAplcntNm: $('input[name=cvlcptAplcntNm]').val()
,cvlcptAplcntMoblphonNo: $('input[name=cvlcptAplcntMoblphonNo]').val()
,cvlcptAplyCn: $('input[name=cvlcptAplyCn]').val()
,cvlcptRcptYmd: $('input[name=cvlcptRcptYmd]').val()
,cvlcptPrcsPrnmntYmd: $('input[name=cvlcptPrcsPrnmntYmd]').val()
,cvlcptAplyCn: $('input[name=cvlcptAplyCn]').val()
}
const rtpyrDTO = {
rtpyrId: $('input[name=rtpyrId]').val()
,rtpyrSeCd: $('input[name=rtpyrSeCd]').val()
,rtpyrNm: $('input[name=rtpyrNm]').val()
,rtpyrNo: $('input[name=rtpyrNo]').val()
,zip: $('input[name=zip]').val()
,adres: $('input[name=adres]').val()
,daddr: $('input[name=daddr]').val()
}
return {
crdnId: $('input[name=crdnId]').val()
,fileLinkId: $('input[name=fileLinkId]').val()
,interfaceSeqN: $('input[name=interfaceSeqN]').val()
,crdnSeCd: $('select[name=crdnSeCd]').val()
,infoDTO
,ctznDTO
,rtpyrDTO
}
}
,validate: () => {
if(orgData === $('form').serialize()){
alert('변경된 내용이 없습니다.');
return false;
}
if(!$('input[name=vhrno]').val()){
alert('차량번호는 필수 입니다.');
$('input[name=vhrno]').focus();
return false;
}
if(!$('input[name=vin]').val()){
if(!confirm('차대 번호가 입력되지 않았습니다.\n계속 하시겠습니까?')){
$('input[name=vin]').focus();
return false;
}
}
return true;
}
,add: () => {
if (!fnPopupBiz.validate()) return;
cmmBizAjax('add', {
url: fimsApiUrl.ADD_RT_REGLT
, data: formFields.get()
})
}
,modify: () => {
/*if (!fnBiz.validate()) return;*/
cmmBizAjax('modify', {
url: fimsApiUrl.MODIFY_RT_REGLT
,data: $("#frm").serialize()
});
}
,remove: () => {
$("input[name=useYn]").val('N');
cmmBizAjax('remove', {
url: fimsApiUrl.REMOVE_RT_REGLT
,data: $("#frm").serialize()
});
}
,erpp: (fileLinkId) => {
const data = {
fileLinkId
,crdnSeCd: ''
}
if(!confirm('서손 처리 하시겠습니까?')) return false;
cmmAjax({
url: fimsApiUrl.SAVE_EC_EXTRL_REGLT_CNTC_RT_ERPP
,data: $.param(data)
})
}
// 차량 단속 건수 표시
,showCrackdownVhrnoCnt: (cnt) => {
if(cnt > 0) {
$('#vhrnoCnt').html(cnt);
$('#crackdown').show();
}else{
$('#crackdown').hide();
}
}
// 민원 건수 표시
,showMinwonCnt: (cnt) => {
if(cnt > 0) {
$('#minwonCnt').html(cnt);
$('#minwon').show();
}else{
$('#minwon').hide();
}
}
,goMinwonPopup: () => {
const url = fimsApiUrl.POPUP_CTZN_CMPLNT_HIST;
const popOption = {width: 800, height:600};
const popTitle = "민원 내역 조회";
const params = {crdnId: schParam.crdnId, rtpyrId: schParam.rtpyrId, vhrno:schParam.vhrno}
const p = CmmPopup.open($$Control.urls.minwonPopup, params, popOption, popTitle);
}
,goCarCrackdownCntPopup: () => {
const url = fimsApiUrl.POPUP_CAR_CRACKDOWN_CNT;
const popOption = {width: 900, height:600};
const popTitle = "민원 내역 조회";
const params = {crdnId: schParam.crdnId, rtpyrId: schParam.rtpyrId, vhrno:schParam.vhrno}
const p = CmmPopup.open($$Control.urls.carCrackdownCntPopup, params, popOption, popTitle);
}
};
/**************************************************************************
* event
**************************************************************************/
$(() => {
$("#btnClose").on('click', () => {
window.opener?.callbackSearch();
if ( self !== top ) {
parent.$("#cmmModal").find(".btn-close").trigger("click");
} else {
window.close();
}
});
$("#btnInst").on('click', () => {
fnPopupBiz.add();
});
$('#addrSearch').on('click', () => CmmPopup.zipPopup());
$('#vhcleSearch').on('click', () => {
fnPopupBiz.findCarNo();
});
$('#btnImposeTgt').on('click', (e) => {
if(!fnPopupBiz.validate()) return false;
let saveData = fnPopupBiz.getSaveData();
cmmAjax({
url: '/fims/biz/cmm/saveImposeTgt.do'
,contentType: 'application/json'
,data: JSON.stringify(saveData)
})
});
$('#btnEnlight, #btnDisallow').on('click', (e) => {
if(!fnPopupBiz.validate()) return false;
const id = e.target.id;
let bizDiv;
switch(id){
case 'btnEnlight':
fnPopupBiz.pagePopup('callEnlightErppPopup', {bizDiv: 'ENLIGHT'})
break;
case 'btnDisallow':
fnPopupBiz.pagePopup('callEnlightErppPopup', {bizDiv: 'DISALLOW'})
break;
default:
return false;
}
});
$('#btnImpose').on('click', (e) => {
alert('과태료 시스템 인터페이스(세올)');
});
$('#btnRemove').on('click', () => {
fnPopupBiz.remove();
});
$('#prev').on('click', () => {
let navObj = {};
if(window.opener.ARR_NAV != null){
navObj = window.opener.ARR_NAV[window.opener.CUR_TAB_IDX];
} else {
navObj = window.opener.pageNav;
}
navObj.onClickNavBtn('prev', (gridInfo) => {
fnPopupBiz.search(gridInfo.curRowData)
});
})
$('#next').on('click', () => {
let navObj = {};
if(window.opener.ARR_NAV != null){
navObj = window.opener.ARR_NAV[window.opener.CUR_TAB_IDX];
} else {
navObj = window.opener.pageNav;
}
navObj.onClickNavBtn('next', (gridInfo) => {
fnPopupBiz.search(gridInfo.curRowData);
});
});
});
/**************************************************************************
* initialize
**************************************************************************/
$(document).ready(function(){
if('${param.crdnId}' != ""){
fnPopupBiz.search({
crdnId: '${param.crdnId}'
,crdnSeCd: '${param.crdnSeCd}'
,crdnSttsCd: '${param.crdnSttsCd}'
});
$("#btnInst").hide();
} else {
$("#pageNavDiv").hide();
$("#btnImposeTgt").hide();
$("#btnEnlight").hide();
$("#btnDisallow").hide();
$("#btnInst").show();
$("#crdnRegSeCd").val("20");
$("#crdnRegSeCd").attr("disabled","disabled");
$("#crdnSeCd").removeAttr("disabled");
$("#sysSeCd").removeAttr("disabled");
}
});
</script>

@ -1,130 +0,0 @@
<%--
================================================================================
File : /fims/biz/cmm/cmmEnlightDisallowPopup.jsp
Name : 서손 / 계도 처리 팝업 - 단속관리>단속현황관리
Auth : lim.jong.uk
Date : 2022-02-03
Desc : 서손 / 계도 처리 팝업
================================================================================
Date Author Description
================================================================================
================================================================================
--%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
<%@ include file="/WEB-INF/jsp/include/fims/taglib.jsp"%>
<style>
#crdnSttsCd {
width: 29%;
color: #2a48ff;
background-color: #d8e7ff;
font-weight: bold;
}
#crdnRegSeCd {
color: #2a48ff;
background-color: #d8e7ff;
}
.act_bg_color {
background-color: #d8e7ff; !important;
}
.bg_red_color {
background-color: darkred;
}
select[name=ffnlgCarmdlCd] {
width: 30%;
}
select[name=rtpyrSeCd] {
width: 25%;
}
</style>
<div class="popup" style="min-width: 100px;">
<div class="container-window1" style="flex-direction: column">
<p class="container-window-header2" id="txtTitle">${txtTitle}</p>
<form>
<table class="table-03">
<caption>위반정보 상세</caption>
<colgroup>
<col style="width: 20%;"/>
<col/>
</colgroup>
<tbody>
<tr>
<th>대상건수</th>
<td>
<input type="text" name="tgtCnt" title="대상건수" readonly/>
</td>
</tr>
</tbody>
</table>
</form>
<div class="container-window-btn1">
<div class="container-window-btn-right">
<a href="#" class="btn btn-blue" id="btnSave">처리</a>
<a href="#" id='btnClose' class="btn btn-lightgray">닫기</a>
</div>
</div>
</div>
</div>
<script defer type="text/javaScript">
/**************************************************************************
* Global Variable
**************************************************************************/
/* *******************************
* Biz function
******************************* */
const fnPopupBiz = {
}
/**************************************************************************
* event
**************************************************************************/
$(() => {
$("#btnClose").on('click', () => {
window.close()
});
$("#btnSave").on('click', () => {
if(!confirm('과태료 단속사진을 전송(부과처리) 하시겠습니까?')) return false;
cmmAjax({
url: fimsApiUrl.SEND_CRACKDOWN_PHOTO_FILE_TO_NTRI
,showSuccessMsg: false
,contentType: 'application/json'
,data: JSON.stringify(window.opener.IMPOSE_DATA)
,success: (res) => {
const data = res.data?.contents;
if(data.errorList.length == 0){
alert(data.successCnt + '건 처리 완료 했습니다.');
}else{
const msg = JSON.stringify(data.errorList).replaceAll("\"vhrno\"", "차량번호")
.replaceAll("\"fullFilePath\"", "미존재파일")
.replaceAll("\"orginlFileNm\"", "원본파일명")
alert('처리 : ' + data.successCnt + ' 건');
alert('에러['+ data.errorList.length + ' 건] : ' + msg);
}
}
})
//window.close()
});
})
/**************************************************************************
* initialize
**************************************************************************/
$(document).ready(function(){
$('input[name=tgtCnt]').val(window.opener.IMPOSE_DATA.length);
});
</script>

@ -1,736 +0,0 @@
<%--
================================================================================
File : /fims/biz/cmm/cmmIntegratedSearchForm.jsp
Name : 통합조회
Auth : 이범준
Date : 2023-04-19
Desc : 통합조회 메인 화면
================================================================================
Date Author Description
================================================================================
================================================================================
--%>
<%@ page import="cokr.xit.fims.biz.FimsConst" %>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
<%@ include file="/WEB-INF/jsp/include/fims/taglib.jsp"%>
<c:set var="ctznTmplatId" value="<%= FimsConst.TmplatId.CTZN.getCode() %>"/>
<c:set var="ansSeCodeImpose" value="<%= FimsConst.AnswerSeCode.IMPOSE.getCode() %>"/>
<c:set var="ansSeCodeDisallow" value="<%= FimsConst.AnswerSeCode.DISALLOW.getCode() %>"/>
<c:set var="ansSeCodeEnlight" value="<%= FimsConst.AnswerSeCode.ENLIGHT.getCode() %>"/>
<div>
<div class="container-window-btn1 mt-0">
<button type="button" class="btn btn-outline-dark">엑셀저장</button>
<button type="button" class="btn btn-darkgray" id="" title="">민원관리</button>
<button type="button" class="btn btn-darkgray" id="" title="">문자전송</button>
<button type="button" class="btn btn-darkgray" id="" title="">내역서출력</button>
<button type="button" class="btn btn-darkgray" id="" title="">고지서출력</button>
<button type="button" class="btn btn-darkgray" id="" title="">압류해제조서 출력</button>
<button type="button" class="btn btn-darkgray" id="" title="">납부확인서 출력</button>
<button type="button" class="btn btn-darkgray" id="" title="">교부청구서 출력</button>
<button type="button" class="btn btn-darkgray" id="" title="닫기">닫기</button>
</div>
<input type="hidden" id="schOpt$fastSearch" value="${schOpt}" />
<input type="hidden" id="schWord$fastSearch" value="${schWord}" />
<form id="frmSearch" name="frmSearch">
<div class="container-search">
<div class="row">
<div class="col-11">
<div class="row">
<div class="col-4">
<span class="form-search-linebox">
<label class="form-label fw-bold form-search-title">부서명</label>
<select id="" name="" class="form-select">
<option value="">주차관리과</option>
</select>
<input type="checkbox" id="" name="" value="Y" class="form-check-input" />전체
</span>
</div>
<div class="col-4">
<span class="form-search-linebox">
<label class="form-label fw-bold form-search-title">시스템구분</label>
<code:select id="sysSeCd" name="sysSeCd" defaultSelect='${sessionScope.XitLoginSession.orgId}'
grpId="FIM001" title="단속처리상태" cls="form-select" alt="시스템구분" />
<input type="checkbox" id="" name="" value="Y" class="form-check-input" />전체
</span>
</div>
</div>
<div class="row">
<div class="col-4">
<span class="form-search-linebox">
<label class="form-label fw-bold form-search-title">차량번호</label>
</span>
<input type="text" id="vhrno" name="vhrno" class="form-control" value="" />
</div>
<div class="col-4">
<span class="form-search-linebox">
<label class="form-label fw-bold form-search-title">납부자명</label>
</span>
<input type="text" id="rtpyrNm" name="rtpyrNm" class="form-control" value="" />
</div>
<div class="col-4">
<span class="form-search-linebox">
<label class="form-label fw-bold form-search-title">납부자번호</label>
</span>
<input type="text" id="rtpyrNo" name="rtpyrNo" class="form-control" value="" />
</div>
<div class="col-4">
<span class="form-search-linebox">
<label class="form-label fw-bold form-search-title">고지번호</label>
</span>
<input type="text" id="" name="" class="form-control" value="" />
</div>
<div class="col-4">
<span class="form-search-linebox">
<label class="form-label fw-bold form-search-title">전자납부번호</label>
</span>
<input type="text" id="" name="" class="form-control" value="" />
</div>
<div class="col-4">
<span class="form-search-linebox">
<label class="form-label fw-bold form-search-title">신고인명</label>
</span>
<input type="text" id="petitionerNm" name="petitionerNm" class="form-control" value="" />
</div>
<div class="col-12">
<span class="flr">
<button type="button" class="btn btn-open-detail btn-sm" data-bs-toggle="collapse" data-bs-target="#searchDetail">
<i class="bx bx-chevron-down"></i>
상세조회조건
</button>
</span>
</div>
</div>
</div>
<div class="col-1 d-flex align-items-center justify-content-center">
<button type="button" class="btn btn-search btn-square h-px-75" id="btnSearch" title="검색">검색</button>
</div>
</div>
</div>
<div id="searchDetail" class="container-search container-search-detail collapse">
<div class="row">
<div class="col-12">
<select id="schDateOpt" name="schDateOpt" class="form-select">
<option value="crdnYmd">단속일자</option>
<option value="regDt">등록일자</option>
</select>
<span class="form-search-linebox">
<input id="schDateFrom" class="form-control form-date" data-fmt-type="day" name="schDateFrom" type="text" title="시작 날짜 선택">
<button type="button" class="bx bx-calendar bg-white"></button>
~
<input id="schDateTo" class="form-control form-date" data-fmt-type="day" name="schDateTo" type="text" title="종료 날짜 선택">
<button type="button" class="bx bx-calendar bg-white"></button>
</span>
<code:select id="crdnSttsCd" name="crdnSttsCd"
grpId="FIM010" defaultSelect="01" title="단속처리상태" cls="form-select" alt="단속처리상태" disabled="false"/>
</div>
<div class="col-12">
<label class="form-label fw-bold form-search-title">단속구분</label>
<span class="form-search-linebox">
<code:radio type="CMM_ETC2" id="crdnSeCd" name="crdnSeCd" grpId="FIM002"
onclick="search$$s()" cls="form-check-input" alt="단속구분" />
</span>
</div>
</div>
</div>
</form>
<div>
<span class="container-page-btn bg-yellow">
<span class="fw-bold">단속, 부과내역</span>
<span class="container-window-btn-right">
<div id="totCnt">전체 ㅣ <span></span></div>
</span>
</span>
</div>
<div id="tabsa" class="nav-align-top mt-3">
<ul class="nav nav-tabs">
<li class="nav-item">
<button id="a0" type="button" class="nav-link active" data-bs-toggle="tab" data-bs-target="#tabContenta0">전체</button>
</li>
<li class="nav-item">
<button id="a1" type="button" class="nav-link" data-bs-toggle="tab" data-bs-target="#tabContenta0">단속</button>
</li>
<li class="nav-item">
<button id="a2" type="button" class="nav-link" data-bs-toggle="tab" data-bs-target="#tabContenta0">사전통보</button>
</li>
<li class="nav-item">
<button id="a3" type="button" class="nav-link" data-bs-toggle="tab" data-bs-target="#tabContenta0">의견제출</button>
</li>
<li class="nav-item">
<button id="a4" type="button" class="nav-link" data-bs-toggle="tab" data-bs-target="#tabContenta0">부과</button>
</li>
<li class="nav-item">
<button id="a5" type="button" class="nav-link" data-bs-toggle="tab" data-bs-target="#tabContenta0">체납</button>
</li>
</ul>
</div>
<div class="tab-content">
<div id="tabContenta0" style="flex-direction: column" class="tab-pane fade show active">
<div id="tabs_ta0">
<div id="grida"></div>
</div>
</div>
</div>
<div class="bg-yellowgreen">비고</div>
<div>
<span class="container-page-btn bg-yellow">
<span class="fw-bold">수납, 기타내역</span>
<span class="container-window-btn-right">
<div id="totCnt2">전체 ㅣ <span></span></div>
</span>
</span>
</div>
<div id="tabsb" class="nav-align-top mt-3">
<ul class="nav nav-tabs">
<li class="nav-item">
<button id="b0" type="button" class="nav-link active" data-bs-toggle="tab" data-bs-target="#tabContentb0">전체</button>
</li>
<li class="nav-item">
<button id="b1" type="button" class="nav-link" data-bs-toggle="tab" data-bs-target="#tabContentb0">수납</button>
</li>
<li class="nav-item">
<button id="b2" type="button" class="nav-link" data-bs-toggle="tab" data-bs-target="#tabContentb0">결손</button>
</li>
<li class="nav-item">
<button id="b3" type="button" class="nav-link" data-bs-toggle="tab" data-bs-target="#tabContentb0">기타</button>
</li>
</ul>
</div>
<div class="tab-content">
<div id="tabContentb0" style="flex-direction: column" class="tab-pane fade show active">
<div id="tabs_tb0">
<div id="gridb"></div>
</div>
</div>
</div>
<div class="bg-yellowgreen">비고</div>
</div>
<script defer type="text/javascript" src="${pageContext.request.contextPath}/resources/js/fims/biz/common/popupPageNavigation.js"></script>
<script type="text/javaScript">
/**************************************************************************
* Global Variable
**************************************************************************/
/**
* tab index : 0 부터 시작
* @type {number}
*/
var CUR_TAB_IDX = 0;
/**
* tui-grid array
* @type {*[]}
*/
var ARR_GRID = [];
/**
* PageNavigation
* @type {*[]}
*/
var ARR_NAV = [];
/**
* 부과대상 데이타 배열
* 단속ID, 접수번호
* @type {Array<{crdnId: string, cvlcptRcptNo: string}>}
*/
var IMPOSE_DATA;
/**
* 그리드 목록 총 건수
* @type {number[]}
*/
let ARR_TOTCNT = [0, 0, 0];
/**
* 단속진행 상태
* 01 - 초기등록
* 10 - 부과대상
* @type {string[]}
*/
let ARR_PRC_STS_CODE = ['01', '10']
/**
* 팝업 객체
* @type {null}
*/
popup = null;
/**
*
*/
let popupDiv;
/**
*
*/
var callbackSearch = () => search$$s();
let $$Control = new FimsDatasetControl({
prefix:"aaa",
prefixName:"ㅁㅁㅁ",
infoSize:"xl",
urls : {
load : "fimsApiUrl"
},
keymapper:info => info ? info.SOME_KEY : "",
dataGetter:obj => obj.data.contents
});
$$Control.onDatasetChange = obj => {
let pagination = obj.data.pagination;
if(obj.data.pagination){
$$Control._paginationInfo.totalSize = pagination.totalSize;
$$Control._paginationInfo.pageNum = pagination.pageNum;
} else {
$$Control._paginationInfo.totalSize = obj.count;
}
$$Control.totalCountSetting(obj);
render$$List(obj.data);
if($$Control._paginationInfo.paging && $$Control._paginationInfo.pagingType == "nav"){
let start = 0;
if(pagination.pageNum > 1 && pagination.totalPage > 1 && pagination.totalSize > $$Control._paginationInfo.fetchSize){
start = $$Control._paginationInfo.fetchSize * (pagination.pageNum - 1);
}
$("#grid1Paging").setPaging({
list: $$Control.dataset,
prefix: "grid1",
start: start,
totalSize: pagination.totalSize,
fetchSize: $$Control._paginationInfo.fetchSize,
func: "$$$Control.load({index})",
});
}
};
function search$$s(){
$$Control.query = fnBiz.getParams();
GRID.clear();
$$Control.load(1);
}
function render$$List(data) {
if($$Control._paginationInfo.paging && $$Control._paginationInfo.pagingType == "nav"){
GRID.clear();
}
GRID.appendRows(data.contents);
}
/*******************************
* Biz function
*******************************/
// tab 전체
const fnBiz = {
tabChangReload: () => {
ARR_GRID[CUR_TAB_IDX].refreshLayout()
}
,getParams: () => {
return {
schDateOpt: $('#schDateOpt').val()
,schDateFrom: $('#schDateFrom').val()
,schDateTo: $('#schDateTo').val()
,[$('#schOpt').val()]: $('#schWord').val()
,sysSeCd: $('input:radio[name=sysSeCd]:checked').val()
,crdnSeCd: CUR_TAB_IDX === 2 ? '09' : $('input:radio[name=crdnSeCd]:checked').val()
,crdnSttsCd: CUR_TAB_IDX === 2 ? 'NON-INIT' : $('#crdnSttsCd').val()
,ctznAnsYn: $('input:radio[name=ctznAnsYn]:checked').val()
,vhrno : $("#vhrno").val()
,rtpyrNm : $("#rtpyrNm").val()
,rtpyrNo : $("#rtpyrNo").val()
,petitionerNm : $("#petitionerNm").val()
}
}
,pagePopup: function(flag, params){
let url;
let popTitle;
let popOption;
switch (flag) {
case "total":
url = fimsApiUrl.POPUP_CRACKDOWN_TOTAL;
popOption = {width: 1200, height:900};
popTitle = "개별총정보";
break;
case "edit":
url = fimsApiUrl.POPUP_CRACKDOWN_EDIT;
popOption = {width: 1200, height:900};
popTitle = "정보 변경";
break;
case "file":
url = fimsApiUrl.POPUP_EXTR_CRACKDOWN_FILE_SEL;
popOption = {width: 900, height:750};
popTitle = "외부연계 데이타 선택";
break;
case "impose":
url = fimsApiUrl.POPUP_IMPOSE;
popOption = {width: 500, height: 400};
popTitle = "과태료 시스템 등록";
break;
case "answerPreview":
url = fimsApiUrl.POPUP_CTZN_ANS_PREVIEW;
popOption = {width: 600, height: 620};
popTitle = "답변 내용 미리 보기";
break;
default:
break;
}
popup = CmmPopup.openModal(url, params, popOption, popTitle);
}
,onClickGrid: function(props){
const selColumn = props.columnInfo.name;
switch (selColumn){
case 'cvlcptRcptNo':
popupDiv = 'edit';
const rowDatas = ARR_GRID[CUR_TAB_IDX].store.data.rawData.map(d => {
return {crdnSeCd: d.crdnSeCd, crdnId: d.crdnId, crdnSttsCd: d.crdnSttsCd}
})
ARR_NAV[CUR_TAB_IDX] = new PageNavigation(ARR_GRID[CUR_TAB_IDX], rowDatas, props.rowKey);
fnBiz.pagePopup(popupDiv, ARR_NAV[CUR_TAB_IDX].gridInfo.curRowData);
$(".tooltip").remove();
break;
default:
break;
}
}
,resetBtn: function() {
switch(CUR_TAB_IDX){
case 0:
$('#btnExtrRegist').show();
$('#divImpose').hide();
$('#divAnswer').hide();
$('#ansDiv').hide();
$('#crdnSttsCd').show();
$('#fldCrdnSeCd').show();
break;
case 1:
$('#btnExtrRegist').hide();
$('#divImpose').show();
$('#divAnswer').hide();
$('#ansDiv').hide();
$('#crdnSttsCd').show();
$('#fldCrdnSeCd').show();
break;
case 2:
$('#btnExtrRegist').hide();
$('#divImpose').hide();
$('#divAnswer').show();
$('#ansDiv').show();
$('#crdnSttsCd').show();
$('#fldCrdnSeCd').hide();
break;
}
}
,onDblClickGrid: function (idx) {
ARR_GRID[idx].off('dblclick');
ARR_GRID[idx].on('dblclick', function (props) {
popupDiv = 'total';
const rowDatas = ARR_GRID[idx].store.data.rawData.map(d => {
return {crdnSeCd: d.crdnSeCd, crdnId: d.crdnId, crdnSttsCd: d.crdnSttsCd}
})
ARR_NAV[idx] = new PageNavigation(ARR_GRID[idx], rowDatas, props.rowKey);
fnBiz.pagePopup(popupDiv, ARR_NAV[idx].gridInfo.curRowData);
});
}
,getAnswerSeCode: (stsCode) => {
let answerSeCode;
switch(stsCode){
// 부과
case '10':
case '20':
answerSeCode = '${ansSeCodeImpose}';
break;
// 서손
case '11':
answerSeCode = '${ansSeCodeDisallow}';
break;
// 계도
case '12':
answerSeCode = '${ansSeCodeEnlight}';
break;
}
return answerSeCode;
}
};
/**************************************************************************
* event
**************************************************************************/
$(() => {
$("#tabs").on("click", "li", function () {
CUR_TAB_IDX = $("#tabs .nav-link.active").attr("id");
$('#totCnt span').text(ARR_TOTCNT[CUR_TAB_IDX]);
if(ARR_GRID[CUR_TAB_IDX]) {
ARR_GRID[CUR_TAB_IDX].refreshLayout();
}
fnBiz.resetBtn();
});
$('#btnSearch').on('click', () => search$$s());
$('#btnExtrRegist').on('click', () => {
fnBiz.pagePopup('file');
});
});
/* *******************************
* Grid
******************************* */
const gridColumns = [
{
header: '등록구분',
name: 'crdnRegSeCd',
minWidth: 50,
sortable: false,
align: 'center',
formatter: 'listItemText',
disabled: true,
editor: {
type: "select",
options: {
listItems: ComboCodeData.crdnRegSeCd
}
}
},
{
header: '접수번호',
name: 'cvlcptRcptNo',
minWidth: 130,
sortable: false,
align: 'center',
renderer: {
type: CustomButtonRenderer,
options: {
formatter: (props)=>{
const rowData = props.grid.getRow(props.rowKey);
return {
formatter: rowData.crdnSeCd === '09' ? rowData.cvlcptRcptNo : rowData.fileLinkId
,element: "text"
,dataAttrs : {
bsToggle: "tooltip",
bsOffset: "0,4",
bsPlacement: "top",
bsHtml: "true"
}
,attrs : {
title : "<i class='bx bx-window bx-xs'></i> <span>단속현황 정보</span>"
}
}
}
,eventFunction: fnBiz.onClickGrid
,eventType: "click"
}
}
},
{
header: '차량번호',
name: 'vhrno',
minWidth: 80,
sortable: false,
align: 'center'
},
{
header: '신고자',
name: 'cvlcptAplcntNm',
minWidth: 80,
sortable: false,
align: 'center'
},
{
header: '신고방법',
name: 'crdnSeCd',
minWidth: 100,
sortable: false,
align: 'center',
formatter: 'listItemText',
disabled: true,
editor: {
type: "select",
options: {
listItems: [...ComboCodeData.crdnSeCd]
}
}
},
{
header: '위반내용',
name: 'vltnCn',
minWidth: 120,
sortable: false,
align: 'center'
},
{
header: '주민번호(전체)',
name: 'rtpyrNo',
minWidth: 110,
sortable: false,
align: 'center',
className: "privacy"
},
{
header: '주민번호(마스킹)',
name: 'rtpyrNoMask',
minWidth: 110,
sortable: false,
align: 'center',
className: "privacy-mask"
},
{
header: '담당자',
name: 'dutyIdV',
minWidth: 80,
sortable: false,
align: 'center'
},
{
header: '전화번호',
name: 'pcdTelV',
minWidth: 80,
sortable: false,
align: 'center'
},
{
header: '접수일자',
name: 'cvlcptRcptYmd',
minWidth: 80,
sortable: false,
align: 'center',
formatter({value}) {
return StrDateFormat.format(value); //
}
},
{
header: '처리기한',
name: 'cvlcptPrcsPrnmntDt',
minWidth: 80,
sortable: false,
align: 'center',
formatter({value}) {
return StrDateFormat.format(value); //
}
},
{
header: '위반일시',
name: 'crdnYmdTime',
minWidth: 120,
sortable: false,
align: 'center',
formatter({value}) {
return StrDateTimeFormat.format(value); //
}
},
{
header: '사진건수',
name: 'atchFileCnt',
minWidth: 40,
sortable: false,
align: 'center'
},
{
header: '특기사항',
name: 'etcCn',
width: 80,
sortable: false,
align: 'center'
},
{
header: '서손사유',
name: 'etcCn', //levyExclRsnCd
width: 80,
sortable: false,
align: 'center'
},
{
header: '',
name: 'crdnSttsCd',
hidden: true
},
{
header: '서손ID',
name: 'levyExclId',
hidden: true
},
{
header: '소유자ID',
name: 'rtpyrId',
hidden: true
},
{
header: '서손사유코드',
name: 'levyExclRsnCd',
hidden: true
},
{
header: 'interfaceSeqN',
name: 'interfaceSeqN',
hidden: true
}
];
const gridOptions = {
el : 'grida',
rowHeaders : ['rowNum'],
columns : gridColumns,
columnOptions : {
frozenCount: 6
},
bodyHeight: 150,
minBodyHeight : 150,
paginationInfoRef : $$Control._paginationInfo
};
const initGrid = () => {
ARR_GRID[0] = TuiGrid.of(gridOptions);
const options = $.extend(gridOptions, gridOptions.columns[1].renderer = null, true);
ARR_GRID[1] = TuiGrid.of({...options, el: 'gridb', rowHeaders: ['checkbox','rowNum']});
};
function fn_fastSearch(){
let fastSearchOpt = document.getElementById("schOpt$fastSearch").value;
let fastSearchWord = document.getElementById("schWord$fastSearch").value;
$("[name='"+fastSearchOpt +"']").val(fastSearchWord);
search$$s();
}
/**************************************************************************
* initialize
**************************************************************************/
$(document).ready(function(){
$('#schDateFrom').datepicker('setDate', DateUtil.getDateDay(-5475).date);
$('#schDateTo').datepicker('setDate', new Date());
CUR_TAB_IDX = 0;
fnBiz.resetBtn();
initGrid();
if(document.getElementById("schOpt$fastSearch").value != "" && document.getElementById("schWord$fastSearch").value != ""){
fn_fastSearch();
}
});
</script>

@ -1,209 +0,0 @@
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ include file="/WEB-INF/jsp/include/taglib.jsp" %>
<%@ include file="/WEB-INF/jsp/include/fims/taglib.jsp" %>
<c:set var="bizName" value="주민 신고 답변"/>
<c:set var="isUpdate" value="${!empty ansDTO.sysSeCd}"/>
<div class="popup" style="min-width: 100%;">
<div class="container-window1" style="max-width: 900px;">
<p class="container-window-header2">
<c:out value="${bizName}"/>(<c:out value="${ansDTO.interfaceSeqN}"/>)
</p>
<form name="frmStmt" id="frmStmt">
<input type="hidden" name="interfaceSeqN" value='<c:out value="${ansDTO.interfaceSeqN}"/>'>
<table class="table-03">
<caption><c:out value="${bizName}"/> 상세</caption>
<colgroup>
<col style="width: 13%;"/>
<col style="width: 20%;"/>
<col style="width: 13%;"/>
<col style="width: 20%;"/>
<col style="width: 13%;"/>
<col style="width: 20%;"/>
</colgroup>
<tbody>
<tr>
<th>기관코드</th>
<td>
<c:if test="${isUpdate}">
<code:select id="sggCd" name="sggCd" grpId="XIT025" defaultSelect="${ansDTO.sggCd}" title="기관코드" cls="form-select" alt="기관코드" disabled="true"/>
</c:if>
<c:if test="${!isUpdate}">
<input type="text" name="ancCodeV" value='<c:out value="${ansDTO.ancCodeV}"/>' readonly>
</c:if>
</td>
<th>시스템코드</th>
<td>
<c:if test="${isUpdate}">
<code:select id="sysSeCd" name="sysSeCd" grpId="FIM001" defaultSelect="${ansDTO.sysSeCd}" title="시스템코드" cls="form-select" alt="시스템코드" disabled="true"/>
</c:if>
<c:if test="${!isUpdate}">
<input type="text" name="sysGubunC" value='<c:out value="${ansDTO.sysGubunC}"/>' readonly>
</c:if>
</td>
<th>처리완료일시</th>
<td>
<fmt:parseDate value="${ansDTO.cvlcptPrcsCmptnDt}" var="cvlcptPrcsCmptnDt" pattern="yyyyMMddHHmmss"/>
<input type="text" name="cvlcptPrcsCmptnDt" value="<fmt:formatDate value="${cvlcptPrcsCmptnDt}" pattern="yyyy-MM-dd HH:mm:ss"/>" readonly>
</td>
</tr>
<tr>
<th>민원구분</th>
<td>
<code:select id="cvlcptAplySeCd" name="cvlcptAplySeCd" grpId="FIM016" defaultSelect="${ansDTO.cvlcptAplySeCd}" title="민원구분" cls="form-select" alt="민원구분" disabled="true"/>
</td>
<th>민원신청번호</th>
<td>
<input type="text" name="cvlcptAplyNo" value='<c:out value="${ansDTO.cvlcptAplyNo}"/>' readonly>
</td>
<th>민원접수번호</th>
<td>
<input type="text" name="cvlcptRcptNo" value='<c:out value="${ansDTO.cvlcptRcptNo}"/>' readonly>
</td>
</tr>
<tr>
<th>처리부서코드</th>
<td>
<input type="text" name="prcsDeptCode" value='<c:out value="${ansDTO.prcsDeptCode}"/>' readonly>
</td>
<th>처리부서</th>
<td>
<input type="text" name="cvlcptPrcsDeptnm" value='<c:out value="${ansDTO.cvlcptPrcsDeptnm}"/>' readonly>
</td>
<th>담당자</th>
<td>
<input type="text" name="chargerNm" value='<c:out value="${ansDTO.chargerNm}"/>' readonly>
</td>
</tr>
<tr>
<th>담당자 이메일</th>
<td>
<input type="text" name="chargerEmail" value='<c:out value="${ansDTO.chargerEmail}"/>' readonly>
</td>
<th>담당자 전화</th>
<td colspan="3">
<input type="text" name="chargerTlphonNo" value='<c:out value="${ansDTO.chargerTlphonNo}"/>' readonly>
</td>
</tr>
<tr>
<th>처리결과</th>
<td colspan="5">
<textarea name="cvlcptPrcsRsltCn" col="120" rows="12"><c:out value="${ansDTO.cvlcptPrcsRsltCn}"/></textarea>
</td>
</tr>
<tr>
<th>민원요지</th>
<td colspan="5">
<textarea name="cvlcptGist" rows="2"><c:out value="${ansDTO.cvlcptGist}"/></textarea>
</td>
</tr>
<tr>
<th>민원처리요약</th>
<td colspan="5">
<textarea name="cvlcptPrcsSumry" rows="2"><c:out value="${ansDTO.cvlcptPrcsSumry}"/></textarea>
</td>
</tr>
</tbody>
</table>
</form>
<div class="container-window-btn1">
<span>
<a href="#" class="btn btn-blue" id="btnRegist">저장</a>
<a href="#" id="btnClose" class="btn btn-lightgray">닫기</a>
</span>
</div>
</div>
</div>
<!-- //popup -->
<script type="text/javascript" src="${pageContext.request.contextPath}/resources/js/fims/framework/cmm/cmmDownloadImg.js" defer></script>
<script type="text/javascript">
/**************************************************************************
* Global Variable
**************************************************************************/
let orgData;
/* *******************************
* Biz function
******************************* */
const fnBiz = {
save: () => {
let confirmMsg = '답변 처리 하시겠습니까?';
const fileName = $('input[name=interfaceSeqN]').val()+'.xml';
if(${isUpdate}) {
if(!fnBiz.validate()) return false;
confirmMsg = '답변을 변경 처리 하시겠습니까?';
}
if(!confirm(confirmMsg)) return false;
cmmAjax({
showSuccessMsg: false
<%--,url: '<c:url value="/fims/biz/ec/saveCtznStmtAns.do"/>'--%>
,url: fimsApiUrl.SAVE_EC_CTZN_STMT_ANSWER
,data: $('#frmStmt').serialize()
,success: (res) => {
const data = {fileFullPath: res.data?.contents, fileName};
<%--fetch('<c:url value="/framework/biz/cmm/file/downloadFromFileFullPath.do"/>'--%>
fetch(frwkApiUrl.DOWNLOAD_BY_FILE_PATH
,{
method: 'post'
,body: JSON.stringify(data)
}
)
.then(response => response.blob())
.then(blob => {
if (confirm('답변 파일을 다운로드 하시겠습니까?')) {
downloadFile(blob, fileName);
return true;
}else{
window.close();
}
});
}
})
}
,validate: () => {
if(orgData === $('form').serialize()){
alert('변경된 내용이 없습니다.');
return false;
}
return true;
}
};
/**************************************************************************
* event
**************************************************************************/
$(() => {
$(window).on("unload", function (e) {
window.opener?.unblockUI();
window.opener?.callbackSearch();
return null;
});
$("#btnClose").on('click', () => {
window.close()
});
$('#btnRegist').on('click', () => {
fnBiz.save();
})
});
/**************************************************************************
* initialize
**************************************************************************/
$(document).ready(function () {
orgData = $('form').serialize();
});
</script>

@ -1,299 +0,0 @@
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ include file="/WEB-INF/jsp/include/taglib.jsp" %>
<%@ include file="/WEB-INF/jsp/include/fims/taglib.jsp" %>
<%--rcvXmlDTO--%>
<c:set var="files" value="${attchFiles}"/>
<c:set var="bizName" value="주민 신고 데이타"/>
<div class="popup" style="min-width: 100px;">
<div class="container-window2" style="max-width: 1000px;">
<p class="container-window-header2">
<c:out value="${bizName}"/>(<c:out value="${rcvXmlDTO.interfaceSeqN}"/>) 상세
</p>
<%--@elvariable id="boardMaster" type="validator"--%>
<form>
<table class="table-03">
<caption><c:out value="${bizName}"/> 상세</caption>
<colgroup>
<col style="width: 13%;"/>
<col style="width: 20%;"/>
<col style="width: 13%;"/>
<col style="width: 20%;"/>
<col style="width: 13%;"/>
<col style="width: 20%;"/>
</colgroup>
<tbody>
<tr>
<th>시스템구분</th>
<td>
<input type="text" name="sysGubunC" value="<c:out value="${rcvXmlDTO.sysGubunC}"/>" readonly>
</td>
<th>송신기관</th>
<td>
<input type="text" name="ancCodeV" value="<c:out value="${rcvXmlDTO.ancCodeV}"/>" readonly>
</td>
<th>민원구분</th>
<td>
<input type="text" name="petiGubunC" value="<c:out value="${rcvXmlDTO.petiGubunC}"/>" readonly>
</td>
</tr>
<tr>
<th>민원기관</th>
<td>
<input type="text" name="petiAncCodeV" value="<c:out value="${rcvXmlDTO.petiAncCodeV}"/>" readonly>
</td>
<th>민원신청번호</th>
<td>
<input type="text" name="petiNoC" value="<c:out value="${rcvXmlDTO.petiNoC}"/>" readonly>
</td>
<th>민원접수번호</th>
<td>
<input type="text" name="civilNoC" value="<c:out value="${rcvXmlDTO.civilNoC}"/>" readonly>
</td>
</tr>
<tr>
<th>민원신청인</th>
<td>
<input type="text" name="peterNameV" value="<c:out value="${rcvXmlDTO.peterNameV}"/>" readonly>
</td>
<th>신청인우편번호</th>
<td>
<input type="text" name="zipCodeC" value="<c:out value="${rcvXmlDTO.zipCodeC}"/>" readonly>
</td>
<th>신청인주소</th>
<td>
<input type="text" name="addressV" value="<c:out value="${rcvXmlDTO.addressV}"/>" readonly>
</td>
</tr>
<tr>
<th>신청인메일</th>
<td>
<input type="text" name="emailV" value="<c:out value="${rcvXmlDTO.emailV}"/>" readonly>
</td>
<th>신청인핸드폰</th>
<td>
<input type="text" name="celNoV" value="<c:out value="${rcvXmlDTO.celNoV}"/>" readonly>
</td>
<th>신청인전화</th>
<td>
<input type="text" name="telNoV" value="<c:out value="${rcvXmlDTO.telNoV}"/>" readonly>
</td>
</tr>
<tr>
<th>민원신청제목</th>
<td colspan="5">
<input type="text" name="petiTitleV" value="<c:out value="${rcvXmlDTO.petiTitleV}"/>" readonly>
</td>
</tr>
<tr>
<th>민원신청내용</th>
<td colspan="5">
<textarea name="petiReasonL" rows="10" readonly><c:out value="${rcvXmlDTO.petiReasonL}" /></textarea>
<%-- <textarea name="petiReasonL" rows="10" readonly><c:out value="${rcvXmlDTO.petiReasonL}" escapeXml="true"/></textarea>--%>
</td>
</tr>
<tr>
<th>공개여부</th>
<td>
<input type="text" name="openYnC" value="<c:out value="${rcvXmlDTO.openYnC}"/>" readonly>
</td>
<th>민원신청일시</th>
<td>
<fmt:parseDate value="${rcvXmlDTO.petiRegD}" var="petiRegD" pattern="yyyyMMddHHmmss"/>
<input type="text" name="petiRegD" value="<fmt:formatDate value="${petiRegD}" pattern="yyyy-MM-dd HH:mm:ss"/>" readonly>
</td>
<th>파일첨부여부</th>
<td>
<input type="text" name="petiReasonAttachYnC" value="<c:out value="${rcvXmlDTO.petiReasonAttachYnC}"/>" readonly>
</td>
</tr>
<%--
<tr>
<th>첨부파일크기</th>
<td>
<input type="text" name="petiFileSizeN" value='<fmt:formatNumber value="${rcvXmlDTO.petiFileSizeN}" pattern="#,###"/>' readonly>
</td>
<th>첨부파일명1</th>
<td>
<input type="text" name="petiFilePath1V" value="<c:out value="${rcvXmlDTO.petiFilePath1V}"/>" readonly>
</td>
<th>첨부파일명2</th>
<td>
<input type="text" name="petiFilePath2V" value="<c:out value="${rcvXmlDTO.petiFilePath2V}"/>" readonly>
</td>
</tr>
<tr>
<th>첨부파일명3</th>
<td>
<input type="text" name="petiFilePath3V" value="<c:out value="${rcvXmlDTO.petiFilePath3V}"/>" readonly>
</td>
<th>첨부파일명4</th>
<td>
<input type="text" name="petiFilePath4V" value="<c:out value="${rcvXmlDTO.petiFilePath4V}"/>" readonly>
</td>
<th>첨부파일명5</th>
<td>
<input type="text" name="petiFilePath5V" value="<c:out value="${rcvXmlDTO.petiFilePath5V}"/>" readonly>
</td>
</tr>
--%>
<tr>
<th>등록일시</th>
<td>
<fmt:parseDate value="${rcvXmlDTO.regD}" var="regD" pattern="yyyyMMddHHmmss"/>
<input type="text" name="petiRegD" value="<fmt:formatDate value="${regD}" pattern="yyyy-MM-dd HH:mm:ss"/>" readonly>
</td>
<th>송신여부</th>
<td>
<input type="text" name="sendYnC" value="<c:out value="${rcvXmlDTO.sendYnC}"/>" readonly>
</td>
<th>송신일시</th>
<td>
<fmt:parseDate value="${rcvXmlDTO.sendD}" var="sendD" pattern="yyyyMMddHHmmss"/>
<input type="text" name="petiRegD" value="<fmt:formatDate value="${sendD}" pattern="yyyy-MM-dd HH:mm:ss"/>" readonly>
</td>
</tr>
<tr>
<th>적용일시</th>
<td>
<fmt:parseDate value="${rcvXmlDTO.applyD}" var="applyD" pattern="yyyyMMddHHmmss"/>
<input type="text" name="applyD" value="<fmt:formatDate value="${applyD}" pattern="yyyy-MM-dd HH:mm:ss"/>" readonly>
</td>
<th>완료구분</th>
<td>
<input type="text" name="applyGubunC" value="<c:out value="${rcvXmlDTO.applyGubunC}"/>" readonly>
</td>
<th>처리구분1</th>
<td>
<input type="text" name="pcdGubunV" value="<c:out value="${rcvXmlDTO.pcdGubunV}"/>" readonly>
</td>
</tr>
<%--
<tr>
<th>처리구분2</th>
<td>
<input type="text" name="pcdGubun2V" value="<c:out value="${rcvXmlDTO.pcdGubun2V}"/>" readonly>
</td>
<th>처리구분3</th>
<td>
<input type="text" name="pcdGubun3V" value="<c:out value="${rcvXmlDTO.pcdGubun3V}"/>" readonly>
</td>
<th>인터페이스ID</th>
<td>
<input type="text" name="ifid" value="<c:out value="${rcvXmlDTO.ifid}"/>" readonly>
</td>
</tr>
<tr>
<th>소스기관코드</th>
<td>
<input type="text" name="srcorgcd" value="<c:out value="${rcvXmlDTO.srcorgcd}"/>" readonly>
</td>
<th>타겟기관코드</th>
<td>
<input type="text" name="tgtorgcd" value="<c:out value="${rcvXmlDTO.tgtorgcd}"/>" readonly>
</td>
<th>인터페이스ID</th>
<td>
<input type="text" name="ifid" value="<c:out value="${rcvXmlDTO.ifid}"/>" readonly>
</td>
</tr>
--%>
</tbody>
</table>
</form>
<div class="draggable" id="imgList" style="display: flex; flex-direction: column; align-items: center"></div>
<div class="container-window-btn1">
<span class="container-window-btn-right">
<a href="#" id="btnClose" class="btn btn-lightgray">닫기</a>
</span>
</div>
<!-- //등록버튼 -->
</div>
</div>
<!-- //popup -->
<script type="text/javascript" src="${pageContext.request.contextPath}/resources/js/fims/framework/cmm/cmmDownloadImg.js" defer></script>
<script type="text/javascript">
/**************************************************************************
* Global Variable
**************************************************************************/
let $$Control = new FimsDatasetControl({
prefix:"aaa",
prefixName:"ㅁㅁㅁ",
infoSize:"xl",
urls : {
imageView : frwkApiUrl.POPUP_IMG_VIEW
},
keymapper:info => info ? info.SOME_KEY : "",
dataGetter:obj => obj.data.contents
});
// let orgData;
/* *******************************
* Biz function
******************************* */
const fnBiz = {
downloadImg: () => {
cmmAjax({
showSuccessMsg: false
<%--,url: '<c:url value="/fims/biz/ec/findNatlNewspaperAttchFiles.do"/>' --%>
,url: fimsApiUrl.FIND_EC_NATL_NEWS_PAPER_ATTCH_FILES
,data: {interfaceSeqN: '${interfaceSeqN}'}
,success: (res) => {
cmmImgDownload('#imgList', res.data?.contents, fnBiz.pagePopup);
}
})
}
,pagePopup: function(flag, params) {
let url;
let popTitle;
let popOption;
switch (flag) {
case "imageView":
popOption = {width: 950, height: 750, resizable:false, scrollbars:'no'};
popTitle = "이미지 보기";
break;
default:
break;
}
window.opener.popup = CmmPopup.open($$Control.urls[flag], params, popOption, popTitle);
//var w = window.open("/imageEditor.do", "", "width=800,height=650,top=0px,left=200px,status=,resizable=false,scrollbars=no");
},
viewImg: () => {
}
};
/**************************************************************************
* event
**************************************************************************/
$(() => {
$('img').on('click', () => {
fnBiz.viewImg()
});
$(window).on("unload", function (e) {
window.opener?.unblockUI();
window.opener?.callbackSearch();
return null;
});
$("#btnClose").on('click', () => {
window.close()
});
});
/**************************************************************************
* initialize
**************************************************************************/
$(document).ready(function () {
// orgData = $('form').serialize();
fnBiz.downloadImg();
});
</script>

@ -1,762 +0,0 @@
<%--
* <pre>
* description :
*
* packageName :
* fileName : rtAnswerTargetDataForm.jsp
* author : 이범준
* date : 2023-05-30
* ======================================================================
* 변경일 변경자 변경 내용
* ----------------------------------------------------------------------
* 2023-05-30 이범준 최초 생성
*
* </pre>
--%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
<%@ include file="/WEB-INF/jsp/include/fims/taglib.jsp"%>
<%@ page import="cokr.xit.fims.biz.FimsConst" %>
<c:set var="ctznTmplatId" value="<%= FimsConst.TmplatId.CTZN.getCode() %>"/>
<c:set var="ansSeCodeImpose" value="<%= FimsConst.AnswerSeCode.IMPOSE.getCode() %>"/>
<c:set var="ansSeCodeDisallow" value="<%= FimsConst.AnswerSeCode.DISALLOW.getCode() %>"/>
<c:set var="ansSeCodeEnlight" value="<%= FimsConst.AnswerSeCode.ENLIGHT.getCode() %>"/>
<div>
<div class="container-page-btn">
<button type="button" class="btn btn-outline-dark">초기화</button>
<span class="container-window-btn-right">
</span>
</div>
<!-- tab 공통 -->
<form id="frmSearch" name="frmSearch">
<div class="container-search">
<div class="row">
<div class="col-11">
<div class="row">
<div class="col-12">
<label class="form-label fw-bold form-search-title">시스템구분</label>
<span class="form-search-linebox">
<code:radio grpId="FIM001" id="sysSeCd" name="sysSeCd" defaultSelect='${sessionScope.XitLoginSession.orgId}'
onclick="search$$s()" cls="form-check-input" alt="시스템구분"/>
</span>
</div>
<div class="col-12">
<select id="schDateOpt" name="schDateOpt" class="form-select">
<option value="crdnYmd">단속일자</option>
<option value="regDt">등록일자</option>
</select>
<span class="form-search-linebox">
<input id="schDateFrom" class="form-control form-date" data-fmt-type="day" name="schDateFrom" type="text" title="시작 날짜 선택">
<button type="button" class="bx bx-calendar bg-white"></button>
~
<input id="schDateTo" class="form-control form-date" data-fmt-type="day" name="schDateTo" type="text" title="종료 날짜 선택">
<button type="button" class="bx bx-calendar bg-white"></button>
</span>
</div>
<div class="col-12">
<label class="form-label fw-bold form-search-title">단속구분</label>
<span class="form-search-linebox">
<code:radio type="CMM_ETC2" id="crdnSeCd" name="crdnSeCd" grpId="FIM002"
onclick="search$$s()" cls="form-check-input" alt="단속구분" />
</span>
</div>
<div class="col-12">
<label class="form-label fw-bold form-search-title">자료상태</label>
<code:select id="crdnSttsCd" name="crdnSttsCd"
grpId="FIM010" defaultSelect="01" title="단속처리상태" cls="form-select" alt="단속처리상태" disabled="false"/>
<select id="schOpt" name="schOpt" class="form-select">
<option value="vhrno">차량번호</option>
</select>
<input type="text" id="schWord" name="schWord" class="form-control" value="" />
<span class="flr">
<button type="button" class="btn btn-open-detail btn-sm" data-bs-toggle="collapse" data-bs-target="#searchDetail">
<i class="bx bx-chevron-down"></i>
상세조회조건
</button>
</span>
</div>
</div>
</div>
<div class="col-1 d-flex align-items-center justify-content-center">
<button type="button" class="btn btn-search btn-square h-px-75" id="btnSearch" title="검색">검색</button>
</div>
</div>
</div>
<div id="searchDetail" class="container-search container-search-detail collapse">
상세조회조건
</div>
</form>
<div>
<span class="container-page-btn">
<div id="totCnt">전체 ㅣ <span></span></div>
<span class="container-window-btn-right">
선택 | n건
<a href="#" class="btn btn-blue" id="btnAnswerPreview" title="답변내용미리보기">답변내용미리보기</a>
<a href="#" class="btn btn-blue" id="btnAnswer" title="답변등록">선택자료 답변등록</a>
<a href="#" class="btn btn-blue" id="" title="">복사등록 원본자료 없음</a>
<a href="#" class="btn btn-blue" id="" title="">민원내용 원본</a>
<a href="#" class="btn btn-blue" id="" title="">개별답변완료로 수정</a>
<a href="#" class="btn btn-blue" id="" title="">표지정보 조회</a>
</span>
</span>
</div>
<div class="container-search">
<div class="row">
<div class="col-12">
<span class="me-5">결과내재검색</span>
<label class="form-label fw-bold form-search-title">클릭한 항목</label>
<input type="text" id="" name="" class="form-control" value="" />
</div>
</div>
</div>
<div id="tabs" class="nav-align-top mt-3">
<ul class="nav nav-tabs">
<li class="nav-item">
<button id="0" type="button" class="nav-link active" data-bs-toggle="tab" data-bs-target="#tabContent0">전체</button>
</li>
<li class="nav-item">
<button id="1" type="button" class="nav-link" data-bs-toggle="tab" data-bs-target="#tabContent0">부분1</button>
</li>
<li class="nav-item">
<button id="2" type="button" class="nav-link" data-bs-toggle="tab" data-bs-target="#tabContent0">부분2</button>
</li>
<li class="nav-item">
<button id="3" type="button" class="nav-link" data-bs-toggle="tab" data-bs-target="#tabContent0">부분3</button>
</li>
</ul>
</div>
<div class="tab-content">
<div id="tabContent0" style="flex-direction: column" class="tab-pane fade show active">
<div id="tabs_t0"></div>
</div>
<div id="tabContent1" class="tab-pane fade">
<div id="tabs_t1"></div>
</div>
<div id="tabContent2" class="tab-pane fade">
<div id="tabs_t2"></div>
</div>
</div>
<div id="grid"></div>
<div class="d-flex flex-row p-3 justify-content-between">
<label id="grid1PagingInfo" class="dataTables_info" role="status" aria-live="polite"></label>
<ul id="grid1Paging" class="pagination pagination-primary"></ul>
</div>
</div>
<script defer type="text/javascript" src="${pageContext.request.contextPath}/resources/js/fims/biz/common/popupPageNavigation.js"></script>
<script type="text/javaScript">
/**************************************************************************
* Global Variable
**************************************************************************/
/**
* tab index : 0 부터 시작
* @type {number}
*/
var CUR_TAB_IDX = 0;
/**
* tui-grid array
* @type {*[]}
*/
var GRID = {};
/**
* PageNavigation
* @type {*[]}
*/
var pageNav = {};
/**
* 부과대상 데이타 배열
* 단속ID, 접수번호
* @type {Array<{crdnId: string, cvlcptRcptNo: string}>}
*/
var IMPOSE_DATA;
/**
* 단속진행 상태
* 01 - 초기등록
* 10 - 부과대상
* @type {string[]}
*/
let ARR_PRC_STS_CODE = ['01', '10']
/**
* 팝업 객체
* @type {null}
*/
popup = null;
/**
*
*/
let popupDiv;
/**
*
*/
var callbackSearch = () => search$$s();
let $$Control = new FimsDatasetControl({
prefix:"initData",
prefixName:"초기자료",
infoSize:"xl",
urls : {
load : fimsApiUrl.FIND_CRACKDOWNS
},
keymapper:info => info ? info.CRACKDOWN_KEY : "",
dataGetter:obj => obj.data.contents
});
$$Control._paginationInfo.pagingType = "scroll";
$$Control._paginationInfo.fetchSize = 50;
$$Control._paginationInfo.scrollFuncName = scroll$$s;
$$Control.onDatasetChange = obj => {
let pagination = obj.data.pagination;
if(obj.data.pagination){
$$Control._paginationInfo.totalSize = pagination.totalSize;
$$Control._paginationInfo.pageNum = pagination.pageNum;
} else {
$$Control._paginationInfo.totalSize = obj.count;
}
$$Control.totalCountSetting(obj);
render$$List(obj.data);
if($$Control._paginationInfo.paging && $$Control._paginationInfo.pagingType == "nav"){
let start = 0;
if(pagination.pageNum > 1 && pagination.totalPage > 1 && pagination.totalSize > $$Control._paginationInfo.fetchSize){
start = $$Control._paginationInfo.fetchSize * (pagination.pageNum - 1);
}
$("#grid1Paging").setPaging({
list: $$Control.dataset,
prefix: "grid1",
start: start,
totalSize: pagination.totalSize,
fetchSize: $$Control._paginationInfo.fetchSize,
func: "$$$Control.load({index})",
});
}
};
function search$$s(){
$$Control.query = fnBiz.getParams();
GRID.clear();
$$Control.load(1);
}
function scroll$$s(){
$$Control.load($$Control._paginationInfo.pageNum + 1, "more");
}
function render$$List(data) {
if($$Control._paginationInfo.paging && $$Control._paginationInfo.pagingType == "nav"){
GRID.clear();
}
GRID.appendRows(data.contents);
}
/*******************************
* Biz function
*******************************/
// tab 전체
const fnBiz = {
getParams: () => {
return {
schDateOpt: $('#schDateOpt').val()
,schDateFrom: $('#schDateFrom').val()
,schDateTo: $('#schDateTo').val()
,[$('#schOpt').val()]: $('#schWord').val()
,sysSeCd: $('input:radio[name=sysSeCd]:checked').val()
,crdnSeCd: CUR_TAB_IDX === 2 ? '09' : $('input:radio[name=crdnSeCd]:checked').val()
,crdnSttsCd: CUR_TAB_IDX === 2 ? 'NON-INIT' : $('#crdnSttsCd').val()
,ctznAnsYn: $('input:radio[name=ctznAnsYn]:checked').val()
}
}
,pagePopup: function(flag, params){
let url;
let popTitle;
let popOption;
switch (flag) {
case "total":
url = fimsApiUrl.POPUP_CRACKDOWN_TOTAL;
popOption = {width: 1200, height:900};
popTitle = "개별총정보";
break;
case "edit":
url = fimsApiUrl.POPUP_CRACKDOWN_EDIT;
popOption = {width: 1200, height:900};
popTitle = "정보 변경";
break;
case "file":
url = fimsApiUrl.POPUP_EXTR_CRACKDOWN_FILE_SEL;
popOption = {width: 900, height:750};
popTitle = "외부연계 데이타 선택";
break;
case "impose":
url = fimsApiUrl.POPUP_IMPOSE;
popOption = {width: 500, height: 400};
popTitle = "과태료 시스템 등록";
break;
case "answerPreview":
url = fimsApiUrl.POPUP_CTZN_ANS_PREVIEW;
popOption = {width: 600, height: 620};
popTitle = "답변 내용 미리 보기";
break;
default:
break;
}
popup = CmmPopup.openModal(url, params, popOption, popTitle);
}
,onClickGrid: function(props){
const selColumn = props.columnInfo.name;
switch (selColumn){
case 'cvlcptRcptNo':
popupDiv = 'edit';
const rowDatas = GRID.store.data.rawData.map(d => {
return {crdnSeCd: d.crdnSeCd, crdnId: d.crdnId, crdnSttsCd: d.crdnSttsCd}
})
pageNav = new PageNavigation(GRID, rowDatas, props.rowKey);
fnBiz.pagePopup(popupDiv, pageNav.gridInfo.curRowData);
$(".tooltip").remove();
break;
default:
break;
}
}
,resetBtn: function() {
switch(CUR_TAB_IDX){
case 0:
$('#btnExtrRegist').show();
$('#divImpose').hide();
$('#divAnswer').hide();
$('#ansDiv').hide();
$('#crdnSttsCd').show();
$('#fldCrdnSeCd').show();
break;
case 1:
$('#btnExtrRegist').hide();
$('#divImpose').show();
$('#divAnswer').hide();
$('#ansDiv').hide();
$('#crdnSttsCd').show();
$('#fldCrdnSeCd').show();
break;
case 2:
$('#btnExtrRegist').hide();
$('#divImpose').hide();
$('#divAnswer').show();
$('#ansDiv').show();
$('#crdnSttsCd').show();
$('#fldCrdnSeCd').hide();
break;
}
}
,onDblClickGrid: function (props) {
popupDiv = 'total';
const rowDatas = GRID.store.data.rawData.map(d => {
return {crdnSeCd: d.crdnSeCd, crdnId: d.crdnId, crdnSttsCd: d.crdnSttsCd}
});
pageNav = new PageNavigation(GRID, rowDatas, props.rowKey);
fnBiz.pagePopup(popupDiv, pageNav.gridInfo.curRowData);
}
,getAnswerSeCode: (stsCode) => {
/*
,{value: '10', text: '부과대상'}
,{value: '11', text: '서손'}
,{value: '12', text: '계도'}
,{value: '20', text: '부과'}
*/
let answerSeCode;
switch(stsCode){
// 부과
case '10':
case '20':
answerSeCode = '${ansSeCodeImpose}';
break;
// 서손
case '11':
answerSeCode = '${ansSeCodeDisallow}';
break;
// 계도
case '12':
answerSeCode = '${ansSeCodeEnlight}';
break;
}
return answerSeCode;
}
};
/**************************************************************************
* event
**************************************************************************/
$(() => {
$("#tabs").on("click", "li", function () {
CUR_TAB_IDX = parseInt($("#tabs .nav-link.active").attr("id"));
});
$('#btnSearch').on('click', () => search$$s());
$('#btnMenualRegist').on('click', () => {
fnBiz.pagePopup('edit', {});
});
$('#btnExtrRegist').on('click', () => {
fnBiz.pagePopup('file');
});
$('#btnImpose').on('click', () => {
const arrChecks = GRID.getCheckedRows();
if(arrChecks.length === 0){
alert('부과 처리 대상을 먼저 선택해 주세요');
return false;
}
IMPOSE_DATA = arrChecks.map((row) => {
const extnlInterfaceId = row.crdnSeCd === '09' ? row.interfaceSeqN : row.fileLinkId
return {
crdnId: row.crdnId
,crdnSeCd: row.crdnSeCd
,extnlInterfaceId
,vhrno: row.vhrno
,cvlcptRcptNo: row.cvlcptRcptNo
}
})
fnBiz.pagePopup('impose');
});
$('#btnAnswerPreview').on('click', () => {
if(GRID.store.data.rawData.length == 0){
alert('대상 데이타가 존재하지 않습니다.');
return false;
}
const arrChecks = GRID.getCheckedRows();
let rowKey;
if(arrChecks.length > 0){
rowKey = arrChecks[0].rowKey;
} else {
rowKey = GRID.store.data.rawData[0]?.rowKey;
}
const rowDatas = GRID.store.data.rawData.map(d => {
return {tmplatId: '${ctznTmplatId}', answerSeCode: fnBiz.getAnswerSeCode(d.crdnSttsCd), resnCode: d.levyExclRsnCd, interfaceSeqN: d.interfaceSeqN, vhrno: d.vhrno}
})
popupDiv = 'answerPreview';
NAV = new PageNavigation(GRID, rowDatas, rowKey);
fnBiz.pagePopup(popupDiv, pageNav.gridInfo.curRowData);
});
$('#btnAnswer').on('click', () => {
const arrChecks = GRID.getCheckedRows();
if(arrChecks.length === 0){
alert('답변 처리할 대상을 먼저 선택해 주세요');
return false;
}
const arrData = arrChecks.map((row) => {
return {
interfaceSeqN: row.interfaceSeqN
}
})
// 중복제거
const datas = arrData.reduce(function(acc, current) {
if (acc.findIndex(({ interfaceSeqN }) => interfaceSeqN === current.interfaceSeqN) === -1) {
acc.push(current.interfaceSeqN);
}
return acc;
}, []);
cmmAjax({
url: fimsApiUrl.ADD_CTZN_ANS_LIST
,contentType: 'application/json'
,data: JSON.stringify(datas)
,success: (res) => {
}
});
});
});
/* *******************************
* Grid
******************************* */
const gridColumns = [
{
header: '등록구분',
name: 'crdnRegSeCd',
minWidth: 50,
sortable: false,
align: 'center',
formatter({value}) {
return (new CodeFormat(ComboCodeData.crdnRegSeCd)).format(value);
}
},
{
header: '접수번호',
name: 'cvlcptRcptNo',
minWidth: 130,
sortable: false,
align: 'center',
renderer: {
type: CustomButtonRenderer,
options: {
formatter: (props)=>{
const rowData = props.grid.getRow(props.rowKey);
return {
formatter: rowData.crdnSeCd === '09' ? rowData.cvlcptRcptNo : rowData.fileLinkId
,element: "text"
,dataAttrs : {
bsToggle: "tooltip",
bsOffset: "0,4",
bsPlacement: "top",
bsHtml: "true"
}
,attrs : {
title : "<i class='bx bx-window bx-xs'></i> <span>단속현황 정보</span>"
}
}
}
,eventFunction: fnBiz.onClickGrid
,eventType: "click"
}
}
},
{
header: '차량번호',
name: 'vhrno',
minWidth: 80,
sortable: false,
align: 'center'
},
{
header: '신고자',
name: 'cvlcptAplcntNm',
minWidth: 80,
sortable: false,
align: 'center'
},
{
header: '단속구분(신고방법)',
name: 'crdnSeCd',
minWidth: 100,
sortable: false,
align: 'center',
formatter: 'listItemText',
disabled: true,
editor: {
type: "select",
options: {
listItems: [...ComboCodeData.crdnSeCd]
}
}
},
{
header: '위반내용',
name: 'vltnCn',
minWidth: 120,
sortable: false,
align: 'center'
},
{
header: '주민번호(전체)',
name: 'rtpyrNo',
minWidth: 110,
sortable: false,
align: 'center',
className: "privacy"
},
{
header: '주민번호(마스킹)',
name: 'rtpyrNoMask',
minWidth: 110,
sortable: false,
align: 'center',
className: "privacy-mask"
},
{
header: '담당자',
name: 'dutyIdV',
minWidth: 80,
sortable: false,
align: 'center'
},
{
header: '전화번호',
name: 'pcdTelV',
minWidth: 80,
sortable: false,
align: 'center'
},
{
header: '접수일자',
name: 'cvlcptRcptYmd',
minWidth: 80,
sortable: false,
align: 'center',
formatter({value}) {
return StrDateFormat.format(value); //
}
},
{
header: '처리기한',
name: 'cvlcptPrcsPrnmntDt',
minWidth: 80,
sortable: false,
align: 'center',
formatter({value}) {
return StrDateFormat.format(value); //
}
},
{
header: '위반일시',
name: 'crdnYmdTime',
minWidth: 120,
sortable: false,
align: 'center',
formatter({value}) {
return StrDateTimeFormat.format(value); //
}
},
{
header: '사진건수',
name: 'atchFileCnt',
minWidth: 40,
sortable: false,
align: 'center'
},
{
header: '특기사항',
name: 'etcCn',
width: 80,
sortable: false,
align: 'center'
},
{
header: '서손사유',
name: 'etcCn', //levyExclRsnCd
width: 80,
sortable: false,
align: 'center'
},
{
header: '수납금액',
name: 'rcvmtAmt',
minWidth: 100,
sortable: false,
align: 'right'
},
{
header: '위반횟수',
name: 'vltnNmtm',
minWidth: 80,
sortable: false,
align: 'right'
},
{
header: '위반장소',
name: 'crdnPlc',
minWidth: 200,
sortable: false
},
{
header: '처리상태명',
name: 'crdnSttsNm',
hidden: true
},
{
header: '등록일시',
name: 'regDt',
minWidth: 150,
sortable: false,
align: 'center',
formatter({value}) {
return StrDateTimeFormat.format(value); //
}
},
{
header: '최종처리일시',
name: 'mdfcnDt',
minWidth: 150,
sortable: false,
align: 'center',
formatter({value}) {
return StrDateTimeFormat.format(value);
}
},
{
header: '',
name: 'crdnSttsCd',
hidden: true
},
{
header: '서손ID',
name: 'levyExclId',
hidden: true
},
{
header: '소유자ID',
name: 'rtpyrId',
hidden: true
},
{
header: '서손사유코드',
name: 'levyExclRsnCd',
hidden: true
},
{
header: 'interfaceSeqN',
name: 'interfaceSeqN',
hidden: true
}
];
const gridOptions = {
el: 'grid',
rowHeaders: ['rowNum'],
columns: gridColumns,
columnOptions: {
frozenCount: 6
},
paginationInfoRef : $$Control._paginationInfo
};
const initGrid = () => {
GRID = TuiGrid.of(gridOptions);
GRID.on('dblclick', function (props) { fnBiz.onDblClickGrid(props); });
};
/**************************************************************************
* initialize
**************************************************************************/
$(document).ready(function(){
$('#schDateFrom').datepicker('setDate', DateUtil.getDateDay(-5475).date);
$('#schDateTo').datepicker('setDate', new Date());
CUR_TAB_IDX = 0;
fnBiz.resetBtn();
initGrid();
});
</script>

@ -1,758 +0,0 @@
<%--
* <pre>
* description :
*
* packageName :
* fileName : rtAnswerWaitDataForm.jsp
* author : 이범준
* date : 2023-05-30
* ======================================================================
* 변경일 변경자 변경 내용
* ----------------------------------------------------------------------
* 2023-05-30 이범준 최초 생성
*
* </pre>
--%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
<%@ include file="/WEB-INF/jsp/include/fims/taglib.jsp"%>
<%@ page import="cokr.xit.fims.biz.FimsConst" %>
<c:set var="ctznTmplatId" value="<%= FimsConst.TmplatId.CTZN.getCode() %>"/>
<c:set var="ansSeCodeImpose" value="<%= FimsConst.AnswerSeCode.IMPOSE.getCode() %>"/>
<c:set var="ansSeCodeDisallow" value="<%= FimsConst.AnswerSeCode.DISALLOW.getCode() %>"/>
<c:set var="ansSeCodeEnlight" value="<%= FimsConst.AnswerSeCode.ENLIGHT.getCode() %>"/>
<div>
<div class="container-page-btn">
<button type="button" class="btn btn-outline-dark">초기화</button>
<span class="container-window-btn-right">
</span>
</div>
<!-- tab 공통 -->
<form id="frmSearch" name="frmSearch">
<div class="container-search">
<div class="row">
<div class="col-11">
<div class="row">
<div class="col-12">
<label class="form-label fw-bold form-search-title">시스템구분</label>
<span class="form-search-linebox">
<code:radio grpId="FIM001" id="sysSeCd" name="sysSeCd" defaultSelect='${sessionScope.XitLoginSession.orgId}'
onclick="search$$s()" cls="form-check-input" alt="시스템구분"/>
</span>
</div>
<div class="col-12">
<select id="schDateOpt" name="schDateOpt" class="form-select">
<option value="crdnYmd">단속일자</option>
<option value="regDt">등록일자</option>
</select>
<span class="form-search-linebox">
<input id="schDateFrom" class="form-control form-date" data-fmt-type="day" name="schDateFrom" type="text" title="시작 날짜 선택">
<button type="button" class="bx bx-calendar bg-white"></button>
~
<input id="schDateTo" class="form-control form-date" data-fmt-type="day" name="schDateTo" type="text" title="종료 날짜 선택">
<button type="button" class="bx bx-calendar bg-white"></button>
</span>
</div>
<div class="col-12">
<label class="form-label fw-bold form-search-title">단속구분</label>
<span class="form-search-linebox">
<code:radio type="CMM_ETC2" id="crdnSeCd" name="crdnSeCd" grpId="FIM002"
onclick="search$$s()" cls="form-check-input" alt="단속구분" />
</span>
</div>
<div class="col-12">
<label class="form-label fw-bold form-search-title">자료상태</label>
<code:select id="crdnSttsCd" name="crdnSttsCd"
grpId="FIM010" defaultSelect="01" title="단속처리상태" cls="form-select" alt="단속처리상태" disabled="false"/>
<select id="schOpt" name="schOpt" class="form-select">
<option value="vhrno">차량번호</option>
</select>
<input type="text" id="schWord" name="schWord" class="form-control" value="" />
<span class="flr">
<button type="button" class="btn btn-open-detail btn-sm" data-bs-toggle="collapse" data-bs-target="#searchDetail">
<i class="bx bx-chevron-down"></i>
상세조회조건
</button>
</span>
</div>
</div>
</div>
<div class="col-1 d-flex align-items-center justify-content-center">
<button type="button" class="btn btn-search btn-square h-px-75" id="btnSearch" title="검색">검색</button>
</div>
</div>
</div>
<div id="searchDetail" class="container-search container-search-detail collapse">
상세조회조건
</div>
</form>
<div>
<span class="container-page-btn">
<div id="totCnt">전체 ㅣ <span></span></div>
<span class="container-window-btn-right">
선택 | n건
<a href="#" class="btn btn-blue" id="" title="업무처리1">민원내용원본</a>
<a href="#" class="btn btn-blue" id="" title="업무처리2">답변내용 미리보기</a>
</span>
</span>
</div>
<div class="container-search">
<div class="row">
<div class="col-12">
<span class="me-5">결과내재검색</span>
<label class="form-label fw-bold form-search-title">클릭한 항목</label>
<input type="text" id="" name="" class="form-control" value="" />
</div>
</div>
</div>
<div id="tabs" class="nav-align-top mt-3">
<ul class="nav nav-tabs">
<li class="nav-item">
<button id="0" type="button" class="nav-link active" data-bs-toggle="tab" data-bs-target="#tabContent0">전체</button>
</li>
<li class="nav-item">
<button id="1" type="button" class="nav-link" data-bs-toggle="tab" data-bs-target="#tabContent0">부분1</button>
</li>
<li class="nav-item">
<button id="2" type="button" class="nav-link" data-bs-toggle="tab" data-bs-target="#tabContent0">부분2</button>
</li>
<li class="nav-item">
<button id="3" type="button" class="nav-link" data-bs-toggle="tab" data-bs-target="#tabContent0">부분3</button>
</li>
</ul>
</div>
<div class="tab-content">
<div id="tabContent0" style="flex-direction: column" class="tab-pane fade show active">
<div id="tabs_t0"></div>
</div>
<div id="tabContent1" class="tab-pane fade">
<div id="tabs_t1"></div>
</div>
<div id="tabContent2" class="tab-pane fade">
<div id="tabs_t2"></div>
</div>
</div>
<div id="grid"></div>
<div class="d-flex flex-row p-3 justify-content-between">
<label id="grid1PagingInfo" class="dataTables_info" role="status" aria-live="polite"></label>
<ul id="grid1Paging" class="pagination pagination-primary"></ul>
</div>
</div>
<script defer type="text/javascript" src="${pageContext.request.contextPath}/resources/js/fims/biz/common/popupPageNavigation.js"></script>
<script type="text/javaScript">
/**************************************************************************
* Global Variable
**************************************************************************/
/**
* tab index : 0 부터 시작
* @type {number}
*/
var CUR_TAB_IDX = 0;
/**
* tui-grid array
* @type {*[]}
*/
var GRID = {};
/**
* PageNavigation
* @type {*[]}
*/
var pageNav = {};
/**
* 부과대상 데이타 배열
* 단속ID, 접수번호
* @type {Array<{crdnId: string, cvlcptRcptNo: string}>}
*/
var IMPOSE_DATA;
/**
* 단속진행 상태
* 01 - 초기등록
* 10 - 부과대상
* @type {string[]}
*/
let ARR_PRC_STS_CODE = ['01', '10']
/**
* 팝업 객체
* @type {null}
*/
popup = null;
/**
*
*/
let popupDiv;
/**
*
*/
var callbackSearch = () => search$$s();
let $$Control = new FimsDatasetControl({
prefix:"initData",
prefixName:"초기자료",
infoSize:"xl",
urls : {
load : fimsApiUrl.FIND_CRACKDOWNS
},
keymapper:info => info ? info.CRACKDOWN_KEY : "",
dataGetter:obj => obj.data.contents
});
$$Control._paginationInfo.pagingType = "scroll";
$$Control._paginationInfo.fetchSize = 50;
$$Control._paginationInfo.scrollFuncName = scroll$$s;
$$Control.onDatasetChange = obj => {
let pagination = obj.data.pagination;
if(obj.data.pagination){
$$Control._paginationInfo.totalSize = pagination.totalSize;
$$Control._paginationInfo.pageNum = pagination.pageNum;
} else {
$$Control._paginationInfo.totalSize = obj.count;
}
$$Control.totalCountSetting(obj);
render$$List(obj.data);
if($$Control._paginationInfo.paging && $$Control._paginationInfo.pagingType == "nav"){
let start = 0;
if(pagination.pageNum > 1 && pagination.totalPage > 1 && pagination.totalSize > $$Control._paginationInfo.fetchSize){
start = $$Control._paginationInfo.fetchSize * (pagination.pageNum - 1);
}
$("#grid1Paging").setPaging({
list: $$Control.dataset,
prefix: "grid1",
start: start,
totalSize: pagination.totalSize,
fetchSize: $$Control._paginationInfo.fetchSize,
func: "$$$Control.load({index})",
});
}
};
function search$$s(){
$$Control.query = fnBiz.getParams();
GRID.clear();
$$Control.load(1);
}
function scroll$$s(){
$$Control.load($$Control._paginationInfo.pageNum + 1, "more");
}
function render$$List(data) {
if($$Control._paginationInfo.paging && $$Control._paginationInfo.pagingType == "nav"){
GRID.clear();
}
GRID.appendRows(data.contents);
}
/*******************************
* Biz function
*******************************/
// tab 전체
const fnBiz = {
getParams: () => {
return {
schDateOpt: $('#schDateOpt').val()
,schDateFrom: $('#schDateFrom').val()
,schDateTo: $('#schDateTo').val()
,[$('#schOpt').val()]: $('#schWord').val()
,sysSeCd: $('input:radio[name=sysSeCd]:checked').val()
,crdnSeCd: CUR_TAB_IDX === 2 ? '09' : $('input:radio[name=crdnSeCd]:checked').val()
,crdnSttsCd: CUR_TAB_IDX === 2 ? 'NON-INIT' : $('#crdnSttsCd').val()
,ctznAnsYn: $('input:radio[name=ctznAnsYn]:checked').val()
}
}
,pagePopup: function(flag, params){
let url;
let popTitle;
let popOption;
switch (flag) {
case "total":
url = fimsApiUrl.POPUP_CRACKDOWN_TOTAL;
popOption = {width: 1200, height:900};
popTitle = "개별총정보";
break;
case "edit":
url = fimsApiUrl.POPUP_CRACKDOWN_EDIT;
popOption = {width: 1200, height:900};
popTitle = "정보 변경";
break;
case "file":
url = fimsApiUrl.POPUP_EXTR_CRACKDOWN_FILE_SEL;
popOption = {width: 900, height:750};
popTitle = "외부연계 데이타 선택";
break;
case "impose":
url = fimsApiUrl.POPUP_IMPOSE;
popOption = {width: 500, height: 400};
popTitle = "과태료 시스템 등록";
break;
case "answerPreview":
url = fimsApiUrl.POPUP_CTZN_ANS_PREVIEW;
popOption = {width: 600, height: 620};
popTitle = "답변 내용 미리 보기";
break;
default:
break;
}
popup = CmmPopup.openModal(url, params, popOption, popTitle);
}
,onClickGrid: function(props){
const selColumn = props.columnInfo.name;
switch (selColumn){
case 'cvlcptRcptNo':
popupDiv = 'edit';
const rowDatas = GRID.store.data.rawData.map(d => {
return {crdnSeCd: d.crdnSeCd, crdnId: d.crdnId, crdnSttsCd: d.crdnSttsCd}
})
pageNav = new PageNavigation(GRID, rowDatas, props.rowKey);
fnBiz.pagePopup(popupDiv, pageNav.gridInfo.curRowData);
$(".tooltip").remove();
break;
default:
break;
}
}
,resetBtn: function() {
switch(CUR_TAB_IDX){
case 0:
$('#btnExtrRegist').show();
$('#divImpose').hide();
$('#divAnswer').hide();
$('#ansDiv').hide();
$('#crdnSttsCd').show();
$('#fldCrdnSeCd').show();
break;
case 1:
$('#btnExtrRegist').hide();
$('#divImpose').show();
$('#divAnswer').hide();
$('#ansDiv').hide();
$('#crdnSttsCd').show();
$('#fldCrdnSeCd').show();
break;
case 2:
$('#btnExtrRegist').hide();
$('#divImpose').hide();
$('#divAnswer').show();
$('#ansDiv').show();
$('#crdnSttsCd').show();
$('#fldCrdnSeCd').hide();
break;
}
}
,onDblClickGrid: function (props) {
popupDiv = 'total';
const rowDatas = GRID.store.data.rawData.map(d => {
return {crdnSeCd: d.crdnSeCd, crdnId: d.crdnId, crdnSttsCd: d.crdnSttsCd}
});
pageNav = new PageNavigation(GRID, rowDatas, props.rowKey);
fnBiz.pagePopup(popupDiv, pageNav.gridInfo.curRowData);
}
,getAnswerSeCode: (stsCode) => {
/*
,{value: '10', text: '부과대상'}
,{value: '11', text: '서손'}
,{value: '12', text: '계도'}
,{value: '20', text: '부과'}
*/
let answerSeCode;
switch(stsCode){
// 부과
case '10':
case '20':
answerSeCode = '${ansSeCodeImpose}';
break;
// 서손
case '11':
answerSeCode = '${ansSeCodeDisallow}';
break;
// 계도
case '12':
answerSeCode = '${ansSeCodeEnlight}';
break;
}
return answerSeCode;
}
};
/**************************************************************************
* event
**************************************************************************/
$(() => {
$("#tabs").on("click", "li", function () {
CUR_TAB_IDX = parseInt($("#tabs .nav-link.active").attr("id"));
});
$('#btnSearch').on('click', () => search$$s());
$('#btnMenualRegist').on('click', () => {
fnBiz.pagePopup('edit', {});
});
$('#btnExtrRegist').on('click', () => {
fnBiz.pagePopup('file');
});
$('#btnImpose').on('click', () => {
const arrChecks = GRID.getCheckedRows();
if(arrChecks.length === 0){
alert('부과 처리 대상을 먼저 선택해 주세요');
return false;
}
IMPOSE_DATA = arrChecks.map((row) => {
const extnlInterfaceId = row.crdnSeCd === '09' ? row.interfaceSeqN : row.fileLinkId
return {
crdnId: row.crdnId
,crdnSeCd: row.crdnSeCd
,extnlInterfaceId
,vhrno: row.vhrno
,cvlcptRcptNo: row.cvlcptRcptNo
}
})
fnBiz.pagePopup('impose');
});
$('#btnAnswerPreview').on('click', () => {
if(GRID.store.data.rawData.length == 0){
alert('대상 데이타가 존재하지 않습니다.');
return false;
}
const arrChecks = GRID.getCheckedRows();
let rowKey;
if(arrChecks.length > 0){
rowKey = arrChecks[0].rowKey;
} else {
rowKey = GRID.store.data.rawData[0]?.rowKey;
}
const rowDatas = GRID.store.data.rawData.map(d => {
return {tmplatId: '${ctznTmplatId}', answerSeCode: fnBiz.getAnswerSeCode(d.crdnSttsCd), resnCode: d.levyExclRsnCd, interfaceSeqN: d.interfaceSeqN, vhrno: d.vhrno}
})
popupDiv = 'answerPreview';
NAV = new PageNavigation(GRID, rowDatas, rowKey);
fnBiz.pagePopup(popupDiv, pageNav.gridInfo.curRowData);
});
$('#btnAnswer').on('click', () => {
const arrChecks = GRID.getCheckedRows();
if(arrChecks.length === 0){
alert('답변 처리할 대상을 먼저 선택해 주세요');
return false;
}
const arrData = arrChecks.map((row) => {
return {
interfaceSeqN: row.interfaceSeqN
}
})
// 중복제거
const datas = arrData.reduce(function(acc, current) {
if (acc.findIndex(({ interfaceSeqN }) => interfaceSeqN === current.interfaceSeqN) === -1) {
acc.push(current.interfaceSeqN);
}
return acc;
}, []);
cmmAjax({
url: fimsApiUrl.ADD_CTZN_ANS_LIST
,contentType: 'application/json'
,data: JSON.stringify(datas)
,success: (res) => {
}
});
});
});
/* *******************************
* Grid
******************************* */
const gridColumns = [
{
header: '등록구분',
name: 'crdnRegSeCd',
minWidth: 50,
sortable: false,
align: 'center',
formatter({value}) {
return (new CodeFormat(ComboCodeData.crdnRegSeCd)).format(value);
}
},
{
header: '접수번호',
name: 'cvlcptRcptNo',
minWidth: 130,
sortable: false,
align: 'center',
renderer: {
type: CustomButtonRenderer,
options: {
formatter: (props)=>{
const rowData = props.grid.getRow(props.rowKey);
return {
formatter: rowData.crdnSeCd === '09' ? rowData.cvlcptRcptNo : rowData.fileLinkId
,element: "text"
,dataAttrs : {
bsToggle: "tooltip",
bsOffset: "0,4",
bsPlacement: "top",
bsHtml: "true"
}
,attrs : {
title : "<i class='bx bx-window bx-xs'></i> <span>단속현황 정보</span>"
}
}
}
,eventFunction: fnBiz.onClickGrid
,eventType: "click"
}
}
},
{
header: '차량번호',
name: 'vhrno',
minWidth: 80,
sortable: false,
align: 'center'
},
{
header: '신고자',
name: 'cvlcptAplcntNm',
minWidth: 80,
sortable: false,
align: 'center'
},
{
header: '단속구분(신고방법)',
name: 'crdnSeCd',
minWidth: 100,
sortable: false,
align: 'center',
formatter: 'listItemText',
disabled: true,
editor: {
type: "select",
options: {
listItems: [...ComboCodeData.crdnSeCd]
}
}
},
{
header: '위반내용',
name: 'vltnCn',
minWidth: 120,
sortable: false,
align: 'center'
},
{
header: '주민번호(전체)',
name: 'rtpyrNo',
minWidth: 110,
sortable: false,
align: 'center',
className: "privacy"
},
{
header: '주민번호(마스킹)',
name: 'rtpyrNoMask',
minWidth: 110,
sortable: false,
align: 'center',
className: "privacy-mask"
},
{
header: '담당자',
name: 'dutyIdV',
minWidth: 80,
sortable: false,
align: 'center'
},
{
header: '전화번호',
name: 'pcdTelV',
minWidth: 80,
sortable: false,
align: 'center'
},
{
header: '접수일자',
name: 'cvlcptRcptYmd',
minWidth: 80,
sortable: false,
align: 'center',
formatter({value}) {
return StrDateFormat.format(value); //
}
},
{
header: '처리기한',
name: 'cvlcptPrcsPrnmntDt',
minWidth: 80,
sortable: false,
align: 'center',
formatter({value}) {
return StrDateFormat.format(value); //
}
},
{
header: '위반일시',
name: 'crdnYmdTime',
minWidth: 120,
sortable: false,
align: 'center',
formatter({value}) {
return StrDateTimeFormat.format(value); //
}
},
{
header: '사진건수',
name: 'atchFileCnt',
minWidth: 40,
sortable: false,
align: 'center'
},
{
header: '특기사항',
name: 'etcCn',
width: 80,
sortable: false,
align: 'center'
},
{
header: '서손사유',
name: 'etcCn', //levyExclRsnCd
width: 80,
sortable: false,
align: 'center'
},
{
header: '수납금액',
name: 'rcvmtAmt',
minWidth: 100,
sortable: false,
align: 'right'
},
{
header: '위반횟수',
name: 'vltnNmtm',
minWidth: 80,
sortable: false,
align: 'right'
},
{
header: '위반장소',
name: 'crdnPlc',
minWidth: 200,
sortable: false
},
{
header: '처리상태명',
name: 'crdnSttsNm',
hidden: true
},
{
header: '등록일시',
name: 'regDt',
minWidth: 150,
sortable: false,
align: 'center',
formatter({value}) {
return StrDateTimeFormat.format(value); //
}
},
{
header: '최종처리일시',
name: 'mdfcnDt',
minWidth: 150,
sortable: false,
align: 'center',
formatter({value}) {
return StrDateTimeFormat.format(value);
}
},
{
header: '',
name: 'crdnSttsCd',
hidden: true
},
{
header: '서손ID',
name: 'levyExclId',
hidden: true
},
{
header: '소유자ID',
name: 'rtpyrId',
hidden: true
},
{
header: '서손사유코드',
name: 'levyExclRsnCd',
hidden: true
},
{
header: 'interfaceSeqN',
name: 'interfaceSeqN',
hidden: true
}
];
const gridOptions = {
el: 'grid',
rowHeaders: ['rowNum'],
columns: gridColumns,
columnOptions: {
frozenCount: 6
},
paginationInfoRef : $$Control._paginationInfo
};
const initGrid = () => {
GRID = TuiGrid.of(gridOptions);
GRID.on('dblclick', function (props) { fnBiz.onDblClickGrid(props); });
};
/**************************************************************************
* initialize
**************************************************************************/
$(document).ready(function(){
$('#schDateFrom').datepicker('setDate', DateUtil.getDateDay(-5475).date);
$('#schDateTo').datepicker('setDate', new Date());
CUR_TAB_IDX = 0;
fnBiz.resetBtn();
initGrid();
});
</script>

@ -1,306 +0,0 @@
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ include file="/WEB-INF/jsp/include/taglib.jsp" %>
<%@ include file="/WEB-INF/jsp/include/fims/taglib.jsp" %>
<form name="frmSearch" id="frmSearch">
<div class="container-search">
<table>
<caption>검색조건</caption>
<colgroup>
<col style="width: 8%;"/>
<col style="width: 20%;"/>
<col style="width: 8%;"/>
<col style="width: 40%;"/>
<col/>
<col/>
<col/>
</colgroup>
<tbody>
<tr>
<th scope="row" nowrap>
<label for="tmplatNm" class="required">템플릿명 :</label>
</th>
<td>
<input title="템플릿명" id="tmplatNm" name="tmplatNm" type="text" size="35" maxlength="35" >
</td>
<th scope="row" nowrap>
<label for="answerSeCode">답변 구분명 :</label>
</th>
<td>
<select id="answerSeCode" name="answerSeCode" title="답변 구분명" onchange="fnBiz.onSearchChange()">
<option value="">전체</option>
<option value="FIM025">계도</option>
<option value="FIM021">서손</option>
</select>
<select style="width: 40%" name="ctgrId" id="ctgrId" class="select" title="계도코드" onchange="fnBiz.onSearchCodeChange(this)">
<option value="">전체</option>
<c:forEach var="result" items="${codeList25}" varStatus="status">
<option value='<c:out value="${result.code}"/>' ><c:out value="${result.code_val}"/></option>
</c:forEach>
</select>
<select style="width: 40%" name="ctgrId1" id="ctgrId1" class="select" title="서손코드" onchange="fnBiz.onSearchCodeChange(this)">
<option value="">전체</option>
<c:forEach var="result" items="${codeList21}" varStatus="status">
<option value='<c:out value="${result.code}"/>' ><c:out value="${result.code_val}"/></option>
</c:forEach>
</select>
<input type="hidden" id="resnCode" name="resnCode" value="">
</td>
<td rowspan="2">
<button type="button" id="btnSearch" class="btn btn-search" title="검색">검색</button>
</td>
</tr>
</tbody>
</table>
</div>
</form>
<!-- //검색 -->
<div class="container-page-btn">
<span>
<div class="clearfix" id="totCnt">전체 ㅣ <span></span></div>
</span>
<span class="flr">
<a href="#" class="btn btn-darkgray" id="btnRegist" title="권한등록">등록</a>
</span>
</div>
<!-- //버튼 및 페이지정보 -->
<!-- 데이터 출력 -->
<div id="grid"></div>
<div class="d-flex flex-row p-3 justify-content-between">
<label id="grid1PagingInfo" class="dataTables_info" role="status" aria-live="polite"></label>
<ul id="grid1Paging" class="pagination pagination-primary"></ul>
</div>
<script type="text/javaScript">
/**************************************************************************
* Global Variable
**************************************************************************/
let GRID = null;
var callbackSearch = () => search$$s();
let $$Control = new FimsDatasetControl({
prefix:"aaa",
prefixName:"ㅁㅁㅁ",
infoSize:"xl",
urls : {
load : frwkApiUrl.FIND_ANS_TMPLS,
getInfo : frwkApiUrl.POPUP_ANS_TMPLS
},
keymapper:info => info ? info.SOME_KEY : "",
dataGetter:obj => obj.data.contents
});
$$Control.onDatasetChange = obj => {
let pagination = obj.data.pagination;
if(obj.data.pagination){
$$Control._paginationInfo.totalSize = pagination.totalSize;
$$Control._paginationInfo.pageNum = pagination.pageNum;
} else {
$$Control._paginationInfo.totalSize = obj.count;
}
$$Control.totalCountSetting(obj);
render$$List(obj.data);
if($$Control._paginationInfo.paging && $$Control._paginationInfo.pagingType == "nav"){
let start = 0;
if(pagination.pageNum > 1 && pagination.totalPage > 1 && pagination.totalSize > $$Control._paginationInfo.fetchSize){
start = $$Control._paginationInfo.fetchSize * (pagination.pageNum - 1);
}
$("#grid1Paging").setPaging({
list: $$Control.dataset,
prefix: "grid1",
start: start,
totalSize: pagination.totalSize,
fetchSize: $$Control._paginationInfo.fetchSize,
func: "$$$Control.load({index})",
});
}
};
function search$$s(){
let formFields = new FimsFormFields("#frmSearch");
$$Control.query = formFields.get();
GRID.clear();
$$Control.load(1);
}
function render$$List(data) {
if($$Control._paginationInfo.paging && $$Control._paginationInfo.pagingType == "nav"){
GRID.clear();
}
GRID.appendRows(data.contents);
}
/* *******************************
* Biz function
******************************* */
const fnBiz = {
pagePopup: function(flag, params){
let popTitle;
let popOption = {width: 950, height:600};
switch (flag) {
case "add": //등록
popTitle = "공통 답변 템플릿 등록";
break;
case "detail": //상세
popTitle = "공통 답변 템플릿 상세";
break;
default:
break;
}
$.blockUI({message: '' ,css: {width: '100%', height: '100%'}
//모달창 외부 클릭시 닫기
,onOverlayClick: () => {
$.unblockUI();
popup.self.close();
}
});
CmmPopup.open($$Control.urls.getInfo, params, popOption, popTitle);
}
,onClickGrid: function(props){
const rowData = props.grid.getRow(props.rowKey);
fnBiz.pagePopup('detail', rowData);
}
,onSearchChange: () => {
if($('#answerSeCode').val() === ''){
$("input[name=resnCode]").val('');
$('select[name="ctgrId"]')
.css('display', 'none')
.attr('disabled', true);
$('select[name="ctgrId1"]')
.css('display', 'none')
.attr('disabled', true);
}else if($('#answerSeCode').val() === 'FIM025'){
$('select[name="ctgrId"]')
.css('display', 'inline-block')
.attr('disabled', false);
$('select[name="ctgrId1"]')
.css('display', 'none')
.attr('disabled', true);
}else if($('#answerSeCode').val() === 'FIM021'){
$('select[name="ctgrId"]')
.css('display', 'none')
.attr('disabled', true);
$('select[name="ctgrId1"]')
.css('display', 'inline-block')
.attr('disabled', false);
}
}
,onSearchCodeChange: (e) => {
$("input[name=resnCode]").val($(e).val());
}
}
/**************************************************************************
* event
**************************************************************************/
$(() => {
$('#btnSearch').on('click', () => search$$s());
$('#btnRegist').on('click', () => {
fnBiz.pagePopup('add', {});
});
});
/* *******************************
* Grid
******************************* */
const initGrid = () => {
const gridColumns = [
{
header: '템플릿',
name: 'tmplatNm',
minWidth: 170,
sortable: true,
sortingType: 'desc',
renderer: {
type: CustomButtonRenderer,
options: {
formatter: (props) => {
return {
formatter: props.grid.getRow(props.rowKey).tmplatNm + "-" + props.grid.getRow(props.rowKey).answerSeCodeNm + "-" + props.grid.getRow(props.rowKey).resnCodeNm
,element : "text"
}
}
,eventFunction: fnBiz.onClickGrid
,eventType: "click"
}
}
},
{
header: '답변 구분',
name: 'answerSeCodeNm',
minWidth: 80,
sortable: false,
align: 'center'
},
{
header: '사유',
name: 'resnCodeNm',
minWidth: 120,
sortable: false,
align: 'center'
},
{
header: '답변여부',
name: 'answerYn',
minWidth: 80,
sortable: false,
align: 'center'
},
{
header: '삭제여부',
name: 'delYn',
minWidth: 80,
sortable: false,
align: 'center'
},
{
header: '작성자',
name: 'rgtrNm',
minWidth: 80,
sortable: false,
align: 'center'
},
{
header: '작성일시',
name: 'regDt',
minWidth: 120,
sortable: false,
align: 'center',
formatter({value}){
return StrDateTimeFormat.format(value);
}
}
];
const gridOptions = {
el: 'grid',
rowHeaders: ['rowNum'],
columns: gridColumns,
paginationInfoRef : $$Control._paginationInfo
};
GRID = TuiGrid.of(gridOptions);
}
/**************************************************************************
* initialize
**************************************************************************/
$(document).ready(function(){
initGrid();
$('select[name="ctgrId"]')
.css('display', 'none')
.attr('disabled', true);
$('select[name="ctgrId1"]')
.css('display', 'none')
.attr('disabled', true);
});
</script>

@ -1,435 +0,0 @@
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ include file="/WEB-INF/jsp/include/taglib.jsp" %>
<%@ include file="/WEB-INF/jsp/include/fims/taglib.jsp" %>
<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %>
<c:set var="isUpdate" value="${!empty cmmAnsTmpl.tmplatId}"/>
<c:set var="bizName" value="공통 답변 템플릿"/>
<script type="text/javascript" src="<c:url value="/framework/util/validator.do"/>"></script>
<validator:javascript formName="cmmAnsTmpl" staticJavascript="false" xhtml="true" cdata="false"/>
<div class="popup" style="min-width: 100px;">
<div class="container-window2" style="max-width: 800px;">
<%@include file="/WEB-INF/jsp/include/fims/title-biz-popup.jsp" %>
<%--@elvariable id="cmmAnsTmpl" type="validator"--%>
<form:form modelAttribute="cmmAnsTmpl" name="cmmAnsTmpl">
<form:input path="resnCode" type="hidden"/>
<form:input path="tmplatNm" type="hidden"/>
<table class="table-03">
<caption><c:out value="${bizName}"/> 등록 / 변경</caption>
<colgroup>
<col style="width: 15%;"/>
<col style="width: 35%;"/>
<col style="width: 15%;"/>
<col style="width: 35%;"/>
</colgroup>
<tbody>
<tr>
<th scope="row" nowrap>
<label for="tmplatId" class="required">템플릿 유형</label>
</th>
<td colspan="3">
<select id="tmplatId" name="tmplatId" title="템플릿 유형"
<c:choose>
<c:when test="${isUpdate}">
onFocus='this.initialSelect = this.selectedIndex;' onChange='this.selectedIndex = this.initialSelect;' style='background-color:#ababab'
</c:when>
<c:otherwise>
onchange="fnBiz.onInitChange()"
</c:otherwise>
</c:choose>
>
<option value="">선택</option>
<c:forEach var="result" items="${codeList23}" varStatus="status">
<option <c:if test="${cmmAnsTmpl.tmplatId == result.code}">selected="selected"</c:if> value='<c:out value="${result.code}"/>' ><c:out value="${result.code_val}"/></option>
</c:forEach>
</select>
</td>
</tr>
<tr>
<th scope="row" nowrap>
<label for="answerSeCode" class="required">답변 구분명</label>
</th>
<td>
<select id="answerSeCode" name="answerSeCode" title="답변 구분명"
<c:choose>
<c:when test="${isUpdate}">
onFocus='this.initialSelect = this.selectedIndex;' onChange='this.selectedIndex = this.initialSelect;' style='background-color:#ababab'
</c:when>
<c:otherwise>
onchange="fnBiz.onSearchChange()"
</c:otherwise>
</c:choose>
>
<option value="">선택</option>
<option <c:if test="${cmmAnsTmpl.answerSeCode == 'FIM028'}">selected="selected"</c:if> value="FIM028">부과 답변</option>
<option <c:if test="${cmmAnsTmpl.answerSeCode == 'FIM025'}">selected="selected"</c:if> value="FIM025">계도</option>
<option <c:if test="${cmmAnsTmpl.answerSeCode == 'FIM021'}">selected="selected"</c:if> value="FIM021">서손</option>
</select>
</td>
<th scope="row" nowrap>
<label for="ctgrId1" class="required">사유</label>
</th>
<td>
<p></p>
<select name="ctgrId1" id="ctgrId1" class="select" title="부과코드"
<c:choose>
<c:when test="${isUpdate && cmmAnsTmpl.answerSeCode == 'FIM028'}">
onFocus='this.initialSelect = this.selectedIndex;' onChange='this.selectedIndex = this.initialSelect;' style='background-color:#ababab'
</c:when>
<c:when test="${isUpdate && cmmAnsTmpl.answerSeCode != 'FIM028'}">
style="display:none;"
</c:when>
<c:otherwise>
onchange="fnBiz.onSearchCodeChange(this)"
</c:otherwise>
</c:choose>
>
<option value="">전체</option>
<c:forEach var="result" items="${codeList28}" varStatus="status">
<option <c:if test="${cmmAnsTmpl.resnCode == result.code}">selected="selected"</c:if> value='<c:out value="${result.code}"/>' ><c:out value="${result.code_val}"/></option>
</c:forEach>
</select>
<select name="ctgrId2" id="ctgrId2" class="select" title="서손코드"
<c:choose>
<c:when test="${isUpdate && cmmAnsTmpl.answerSeCode == 'FIM025'}">
onFocus='this.initialSelect = this.selectedIndex;' onChange='this.selectedIndex = this.initialSelect;' style='background-color:#ababab'
</c:when>
<c:when test="${isUpdate && cmmAnsTmpl.answerSeCode != 'FIM025'}">
style="display:none;"
</c:when>
<c:otherwise>
onchange="fnBiz.onSearchCodeChange(this)"
</c:otherwise>
</c:choose>
>
<option value="">전체</option>
<c:forEach var="result" items="${codeList25}" varStatus="status">
<option <c:if test="${cmmAnsTmpl.resnCode == result.code}">selected="selected"</c:if> value='<c:out value="${result.code}"/>' ><c:out value="${result.code_val}"/></option>
</c:forEach>
</select>
<select name="ctgrId3" id="ctgrId3" class="select" title="계도코드"
<c:choose>
<c:when test="${isUpdate && cmmAnsTmpl.answerSeCode == 'FIM021'}">
onFocus='this.initialSelect = this.selectedIndex;' onChange='this.selectedIndex = this.initialSelect;' style='background-color:#ababab'
</c:when>
<c:when test="${isUpdate && cmmAnsTmpl.answerSeCode != 'FIM021'}">
style="display:none;"
</c:when>
<c:otherwise>
onchange="fnBiz.onSearchCodeChange(this)"
</c:otherwise>
</c:choose>
>
<option value="">전체</option>
<c:forEach var="result" items="${codeList21}" varStatus="status">
<option <c:if test="${cmmAnsTmpl.resnCode == result.code}">selected="selected"</c:if> value='<c:out value="${result.code}"/>' ><c:out value="${result.code_val}"/></option>
</c:forEach>
</select>
</td>
</tr>
<tr class="prfaceTr">
<th scope="row" nowrap>
<label for="prface" class="required">머리말</label>
</th>
<td colspan="3">
<form:textarea path="prface" cols="75" rows="4" title="머리말"/>
<form:errors path="prface" />
</td>
</tr>
<tr>
<th scope="row" nowrap>
<label for="answerCn" class="required">답변 내용</label>
</th>
<td colspan="3">
<form:textarea path="answerCn" cols="75" rows="4" title="답변내용"/>
<form:errors path="answerCn" />
</td>
</tr>
<tr class="tlfaceTr">
<th scope="row" nowrap>
<label for="tlface" class="required">꼬리말</label>
</th>
<td colspan="3">
<form:textarea path="tlface" cols="75" rows="4" title="꼬리말"/>
<form:errors path="tlface" />
</td>
</tr>
</tbody>
</table>
</form:form>
<table class="table-02" style="white-space:normal;">
<caption>민원 답변내용 미리보기</caption>
<colgroup>
<col style="width: 15%;"/>
<col style="width: 35%;"/>
<col style="width: 15%;"/>
<col style="width: 35%;"/>
</colgroup>
<tbody>
<td colspan="4">
<textarea id="ansPreview" cols="70" rows="17" readonly></textarea>
</td>
</tbody>
</table>
<div class="other_btn" style="position:absolute; bottom:0px;">
<span class="other_btn_02"> [매크로 문자 삽입]:
<a href="#" class="btn btn-blue" id="btnKey" onclick="fnBiz.onMacroInsert(this);">일련번호</a>
<a href="#" class="btn btn-blue" id="btnPhone" onclick="fnBiz.onMacroInsert(this);">전화번호</a>
<a href="#" class="btn btn-blue" id="btnCar" onclick="fnBiz.onMacroInsert(this);">차량번호</a>
</span>
<span class="other_btn_03"> [미리보기]:
<a href="#" class="btn btn-green" id="btnPreview">미리보기</a>
</span>
</div>
<%@include file="/WEB-INF/jsp/include/fims/btns-biz-popup-use.jsp" %>
<!-- //등록버튼 -->
</div>
</div>
<!-- //popup -->
<script type="text/javascript">
/**************************************************************************
* Global Variable
**************************************************************************/
let orgData;
let tAreaSelect = null;
/* *******************************
* Biz function
******************************* */
const fnBiz = {
add: () => {
if (!fnBiz.validate()) return;
cmmBizAjax('add', {
url: frwkApiUrl.SAVE_ANS_TMPLS
, data: $('form').serialize()
})
}
,modify: () => {
if (!fnBiz.validate()) return;
//머리말, 꼬리말 변경 사항 없어도 Update - 추후 작업 필요할 경우 비교 처리 필요.
cmmBizAjax('modify', {
url: frwkApiUrl.MODIFY_ANS_TMPLS
, data: $('form').serialize()
});
}
,remove: () => {
cmmBizAjax('remove', {
url: frwkApiUrl.MODIFY_ANS_TMPLS
, data: $('form').serialize()
});
}
,validate: () => {
if(orgData === $('form').serialize()){
alert('변경된 내용이 없습니다.');
return false;
}
if(!validateCmmAnsTmpl(document.getElementById("cmmAnsTmpl"))) return false;
const answerSeCode = $('#answerSeCode').val();
if($("input[name=resnCode]").val() === '') {
alert('사유는 필수 입력입니다.');
if(answerSeCode === 'FIM028') $('#ctgrId1').focus();
if(answerSeCode === 'FIM025') $('#ctgrId2').focus();
if(answerSeCode === 'FIM021') $('#ctgrId3').focus();
return false;
}
return true;
}
,onInitChange: () => {
const tmplatId = $('#tmplatId').val();
if(tmplatId === ''){
$('#answerSeCode').val('');
$('#ctgrId1').val('');
$('#ctgrId2').val('');
$('#ctgrId3').val('');
$('.prfaceTr').css('display', 'none');
$('.tlfaceTr').css('display', 'none');
fnBiz.onSearchChange();
}else{
$('#tmplatNm').val($('#tmplatId option:checked').text());
cmmAjax({
url: frwkApiUrl.FIND_ANS_TMPLS
, data: {tmplatId: tmplatId}
, type: "GET"
, showSuccessMsg: false
, success: (res) => {
if(res.data.contents.length > 0){
document.getElementById("prface").value = res.data.contents[0].prface;
document.getElementById("tlface").value = res.data.contents[0].tlface;
}
}
});
}
}
,onSearchChange: () => {
if($('#answerSeCode').val() === ''){
$("input[name=resnCode]").val('');
$('select[name="ctgrId1"]')
.css('display', 'none')
.attr('disabled', true);
$('select[name="ctgrId2"]')
.css('display', 'none')
.attr('disabled', true);
$('select[name="ctgrId3"]')
.css('display', 'none')
.attr('disabled', true);
}else{
if($('#tmplatId').val() === ''){
alert('템플릿 유형을 먼저 선택해주세요.');
$('#answerSeCode').val('');
document.getElementById("tmplatId").focus();
return false;
}else if($('#answerSeCode').val() === 'FIM028'){
$('select[name="ctgrId1"]')
.css('display', 'inline-block')
.attr('disabled', false);
$('select[name="ctgrId2"]')
.css('display', 'none')
.attr('disabled', true);
$('select[name="ctgrId3"]')
.css('display', 'none')
.attr('disabled', true);
$('.prfaceTr').css('display', 'table-row');
$('.tlfaceTr').css('display', 'table-row');
}else if($('#answerSeCode').val() === 'FIM025'){
$('select[name="ctgrId1"]')
.css('display', 'none')
.attr('disabled', true);
$('select[name="ctgrId2"]')
.css('display', 'inline-block')
.attr('disabled', false);
$('select[name="ctgrId3"]')
.css('display', 'none')
.attr('disabled', true);
$('.prfaceTr').css('display', 'none');
$('.tlfaceTr').css('display', 'none');
}else if($('#answerSeCode').val() === 'FIM021'){
$('select[name="ctgrId1"]')
.css('display', 'none')
.attr('disabled', true);
$('select[name="ctgrId2"]')
.css('display', 'none')
.attr('disabled', true);
$('select[name="ctgrId3"]')
.css('display', 'inline-block')
.attr('disabled', false);
$('.prfaceTr').css('display', 'none');
$('.tlfaceTr').css('display', 'none');
}
}
}
,onSearchCodeChange: (e) => {
$("input[name=resnCode]").val($(e).val());
}
,onMacroInsert: (e) => {
if(tAreaSelect === null){
alert("텍스트 영역을 먼저 선택한 후에 눌러주세요.");
return false;
}else{
const selectPos = tAreaSelect.line;
const txtArea = document.getElementById(tAreaSelect.id);
const beforeTxt = txtArea.value.substring(0, selectPos);
const afterTxt = txtArea.value.substring(selectPos, txtArea.value.length);
let addTxt = '';
if(e.id === 'btnKey') addTxt = "[" + $('#'+e.id).text() + "]";
if(e.id === 'btnPhone') addTxt = "[" + $('#'+e.id).text() + "]";
if(e.id === 'btnCar') addTxt = "[" + $('#'+e.id).text() + "]";
txtArea.value = beforeTxt + addTxt + afterTxt;
txtArea.selectionStart = selectPos + addTxt.length;
txtArea.selectionEnd = selectPos + addTxt.length;
txtArea.focus();
}
}
};
/**************************************************************************
* event
**************************************************************************/
$(() => {
$(window).on("unload", function (e) {
window.opener?.unblockUI();
return null;
});
$("#btnClose").on('click', () => {
window.opener?.unblockUI();
window.close()
});
$('#btnRegist').on('click', () => {
fnBiz.add();
});
$('#btnModify').on('click', () => {
fnBiz.modify();
});
$('#btnRemove').on('click', () => {
fnBiz.remove();
});
$('#btnPreview').on('click', (e) => {
const btnPre = e.target;
if(btnPre.text === '미리보기'){
$('.table-03').css('display', 'none');
$('.table-02').css('display', '');
$('.other_btn_02').css('display', 'none');
$('.container-window-btn2').css('display', 'none');
btnPre.text = '입력화면';
const pTxt = document.getElementById("prface").value + '\r\n \r\n' + document.getElementById("answerCn").value + '\r\n \r\n' + document.getElementById("tlface").value;
document.getElementById("ansPreview").value = pTxt.replaceAll('[일련번호]', '123456').replaceAll('[차량번호]', '11가1234').replaceAll('[전화번호]', '010-1234-5678');
}else{
$('.table-03').css('display', '');
$('.table-02').css('display', 'none');
$('.other_btn_02').css('display', '');
$('.container-window-btn2').css('display', '');
btnPre.text = '미리보기';
document.getElementById("ansPreview").value = "";
}
});
$('#prface').on('blur', (e) => {
tAreaSelect = null;
tAreaSelect = {id:e.target.id, line:$(e.target).prop("selectionStart")};
});
$('#answerCn').on('blur', (e) => {
tAreaSelect = null;
tAreaSelect = {id:e.target.id, line:$(e.target).prop("selectionStart")};
});
$('#tlface').on('blur', (e) => {
tAreaSelect = null;
tAreaSelect = {id:e.target.id, line:$(e.target).prop("selectionStart")};
});
});
/**************************************************************************
* initialize
**************************************************************************/
$(document).ready(function () {
orgData = $('form').serialize();
$('.table-02').css('display', 'none');
<c:if test="${!isUpdate}">
fnBiz.onInitChange();
</c:if>
<c:if test="${isUpdate}">
if($('#answerSeCode').val() != 'FIM028'){
$('.prfaceTr').css('display', 'none');
$('.tlfaceTr').css('display', 'none');
}
</c:if>
});
</script>

@ -1,20 +0,0 @@
<%@ 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="ui" uri="http://egovframework.gov/ctl/ui"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<table>
<c:forEach var="fileVO" items="${fileList}" varStatus="status">
<tr>
<td></td>
</tr>
<tr>
<td>
<img src='<c:url value='/_cmmn_/file/getImage.do'/>?atchFileId=<c:out value="${fileVO.atchFileId}"/>&fileSn=<c:out value="${fileVO.fileSn}"/>' width="640" alt="파일보기링크" />
</td>
</tr>
<tr>
<td></td>
</tr>
</c:forEach>
</table>

@ -1,61 +0,0 @@
<%@ 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="ui" uri="http://egovframework.gov/ctl/ui"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<script type="text/javascript">
function fn_egov_downFile(atchFileId, fileSn){
window.open("<c:url value='/_cmmn_/file/Download.do?atchFileId="+atchFileId+"&fileSn="+fileSn+"'/>");
}
function fn_egov_deleteFile(atchFileId, fileSn) {
if(!confirm('삭제하시겠습니까?'))
return false;
forms = document.getElementsByTagName("form");
for (var i = 0; i < forms.length; i++) {
if (typeof(forms[i].atchFileId) != "undefined" &&
typeof(forms[i].fileSn) != "undefined" &&
typeof(forms[i].fileListCnt) != "undefined") {
form = forms[i];
}
}
//form = document.forms[0];
form.atchFileId.value = atchFileId;
form.fileSn.value = fileSn;
form.action = "<c:url value='/_cmmn_/file/AttachFile_delete_proc.do'/>";
form.submit();
}
function fn_egov_check_file(flag) {
if (flag=="Y") {
document.getElementById('file_upload_posbl').style.display = "block";
document.getElementById('file_upload_imposbl').style.display = "none";
} else {
document.getElementById('file_upload_posbl').style.display = "none";
document.getElementById('file_upload_imposbl').style.display = "block";
}
}
</script>
<input type="hidden" name="atchFileId" value="${atchFileId}">
<input type="hidden" name="fileSn" >
<input type="hidden" name="fileListCnt" value="${fileListCnt}">
<c:forEach var="fileVO" items="${fileList}" varStatus="status">
<c:if test="${not status.first }"><br/></c:if>
<c:choose>
<c:when test="${updateFlag=='Y'}">
<c:out value="${fileVO.orignlFileNm}"/>&nbsp;[<c:out value="${fileVO.fileSize}"/>&nbsp;byte]
<img alt="파일 삭제" src="<c:url value='/resources/image/fims/framework/btn/bu5_close.gif'/>"
width="19" height="18" onClick="fn_egov_deleteFile('<c:out value="${fileVO.atchFileId}"/>','<c:out value="${fileVO.fileSn}"/>');" />
</c:when>
<c:otherwise>
<a href="#LINK" onclick="javascript:fn_egov_downFile('<c:out value="${fileVO.atchFileId}"/>','<c:out value="${fileVO.fileSn}"/>')">
<c:out value="${fileVO.orignlFileNm}"/>&nbsp;[<c:out value="${fileVO.fileSize}"/>&nbsp;byte]
</a>
</c:otherwise>
</c:choose>
</c:forEach>
<c:if test="${fn:length(fileList) == 0}">
</c:if>

@ -1,65 +0,0 @@
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ include file="/WEB-INF/jsp/include/taglib.jsp" %>
<%@ include file="/WEB-INF/jsp/include/fims/taglib.jsp" %>
<c:set var="bizName" value="이미지 보기"/>
<div class="popup" style="min-width: 100px;">
<div class="container-window1" style="max-width: 800px;">
<p class="container-window-header2">
<c:out value="${bizName}"/>(<c:out value="${fileDtlDTO.orginlFileNm}"/>) 이미지
</p>
<div>
<img id="uploadImage" src='<c:out value="${fileDtlDTO.downloadUrl}"/>' style="height: 520px; width: 750px; object-fit: contain"/>
<%-- FIXME: 이미지 크기별로 set하는 경우 사용 --%>
<!--img id="uploadImage" src='<c:out value="${fileDtlDTO.downloadUrl}"/>'/-->
</div>
<div class="container-window-btn1">
<span class="container-window-btn-right">
<c:if test="${fileDtlDTO.editor}">
<a href="#" class="btn btn-blue" onclick="paintwebImageEditor()">이미지편집</a>
</c:if>
<a href="#" class="btn btn-lightgray" onclick="window.close()">닫기</a>
</span>
</div>
</div>
</div>
<script type="text/javascript">
function paintwebImageEditor() {
window.opener.popup = window.opener.imageEditorPopup('imageEditor', {imageTagId: '<c:out value="${fileDtlDTO.fileId}"/>'});
}
$(document).ready(function () {
<%-- FIXME: 이미지 크기별로 set하는 경우 사용 --%>
/*
const img = document.getElementById('uploadImage');
let scaleRate = 1.0;
let width = img.naturalWidth;
let height = img.naturalHeight;
if(width > 750){
scaleRate = 750 / width;
width = Math.floor(width * scaleRate);
height = Math.floor(height * scaleRate);
}
if(height > 520){
scaleRate = 520 / height;
width = Math.floor(width * scaleRate);
height = Math.floor(height * scaleRate);
}
$(img).attr({
width
,height
,'object-fit': 'contain'
,'align-items': 'center'
});
*/
});
</script>

@ -1,110 +0,0 @@
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<title>PaintWeb</title>
<script type="text/javascript" src="/resources/lib/fims/biz/paintweb/paintweb.js"></script>
<script type="text/javascript" src="/resources/lib/fims/biz/paintweb/html2canvas.min.js"></script>
<script type="text/javascript" src="/resources/lib/fims/biz/paintweb/es6-promise.min.js"></script>
<script type="text/javascript" src="/resources/lib/fims/biz/paintweb/es6-promise.auto.min.js"></script>
<script type="text/javascript" src="/resources/js/fims/framework/cmm/cmmUtil.js"></script>
</head>
<body>
<img id="editableImage"/>
<div id="PaintWebTarget"></div>
<script type="text/javascript">
//FIXME: pw instance 변수명 변경시 paintweb.js의 imageSaveTo() 내의 2564 line if(pw.image.modified) 변경 필요
var pw;
//FIXME: srcImg 변수명 변경시 paintweb.js의 imageSaveTo() 내의 2669 line var url = srcImg.src; 변경 필요
var srcImg;
let editImg =null;
const afterImageSave = () => {
window.close();
}
const initEditor = () => {
pw = new PaintWeb();
pw.config.guiPlaceholder = document.getElementById('PaintWebTarget');
pw.config.configFile = 'paintweb-config.json';
pw.config.imageLoad = editImg;
//pw.config.imageSaveURL = "/saveImage.do"; // imageSave == image upload
pw.config.imageSaveURL = "/saveImage"; // imageSave == image upload
pw.config.imageDownloadURL = "/fileDownload.do";
//pw.config.afterImageSave = afterImageSave;
pw.config.imageSave = imageSaveTo;
pw.config.afterImageSave = afterImageSave;
pw.init();
}
function imageSaveTo(file, imgWidth, imgHeight, doc, _self){
const isDelete = imgWidth === 0;
if(isDelete){
if(!confirm('단속이미지를 정말로 삭제 하시겠습니까?')) return;
}else{
if(!confirm('편집한 단속이미지를 저장하시겠습니까?')) return;
}
const {fileMastrId, fileId, filePath} = srcImg.dataset;
// 삭제
if(isDelete){
const data = {
fileMastrId
, fileId
};
cmmAjax({
url: '<c:out value="/framework/biz/cmm/file/removeFile.do"/>'
,data: $.param(data)
,success: (res) => {
window.opener.callbackReloadImage();
window.close();
}
})
return true;
}
// 저장
const formData = new FormData();
formData.append('fileMastrId', fileMastrId);
formData.append('fileId', fileId);
formData.append('filePath', filePath);
formData.append('file', file);
cmmAjax({
type: 'post',
url: '<c:out value="/framework/biz/cmm/file/uploadPaintweb.do"/>',
processData: false,
contentType: false,
data: formData,
success: (res) => {
window.opener.callbackReloadImage();
window.close();
}
})
return true;
}
$(document).ready(function () {
srcImg = window.opener.document.getElementById('<c:out value="${imageTagId}"/>');
editImg = document.getElementById('editableImage');
editImg.src = srcImg.src;
editImg.onload = function () {
initEditor();
editImg.style.display = 'none';
}
});
</script>
</body>
</html>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -1,81 +0,0 @@
/****************************************************************
*
* 파일명 : showModalDialog.js
* : showModalDialog 기능을 대체하는 JavaScript
*
* 수정일 수정자 Version Function
* ------------ --------- ------------- ----------------------------
* 2014.09.25 Vincent Han 1.0 최초생성
*
*/
// fix for deprecated method in Chrome 37
this.otherParameters = new Array();
this.showModalDialogSupported = true;
this.callbackMethod = null;
if (!window.showModalDialog) {
showModalDialogSupported = false;
window.showModalDialog = function(arg1, arg2, arg3, callback) {
var w;
var h;
var resizable = "no";
var scroll = "no";
var status = "no";
// get the modal specs
var mdattrs = arg3.split(";");
for (i = 0; i < mdattrs.length; i++) {
var mdattr = mdattrs[i].split(":");
var n = mdattr[0];
var v = mdattr[1];
if (n) {
n = n.trim().toLowerCase();
}
if (v) {
v = v.trim().toLowerCase();
}
if (n == "dialogheight") {
h = v.replace("px", "");
} else if (n == "dialogwidth") {
w = v.replace("px", "");
} else if (n == "resizable") {
resizable = v;
} else if (n == "scroll") {
scroll = v;
} else if (n == "status") {
status = v;
} else {
// no-op
}
}
var left = window.screenX + (window.outerWidth / 2) - (w / 2);
var top = window.screenY + (window.outerHeight / 2) - (h / 2);
var targetWin = window.open(arg1, "ShowModalDialog" + arg1, 'toolbar=no, location=no, directories=no, status=' + status + ', menubar=no, scrollbars=' + scroll + ', resizable=' + resizable + ', copyhistory=no, width=' + w + ', height=' + h + ', top=' + top + ', left=' + left);
dialogArguments = arg2;
if (callback != null) {
callbackMethod = callback;
} else {
callbackMethod = null;
}
targetWin.focus();
};
window.getDialogArgumentsInner = function() {
return dialogArguments;
};
window.getCallbackMethodName = function() {
return callbackMethod;
}
}

@ -1,68 +0,0 @@
/****************************************************************
*
* 파일명 : showModalDialogCallee.js
* : showModalDialog 기능을 대체하는 JavaScript
*
* 수정일 수정자 Version Function
* ------------ --------- ------------- ----------------------------
* 2014.09.25 Vincent Han 1.0 최초생성
*
*/
//----------------------
//popped up page
//----------------------
function getDialogArguments() {
if (!window.showModalDialog) {
if (opener != null && !opener.closed) {
try {
window.dialogArguments = opener.getDialogArgumentsInner();
} catch (err) {
alert('팝업 처리 시 오류가 발생하였습니다. \n오류내용 : ' + err);
}
} else if (parent.opener != null && !parent.opener.closed) {
try {
window.dialogArguments = parent.opener.getDialogArgumentsInner();
parent.window.dialogArguments = window.dialogArguments;
} catch (err) {
alert('팝업 처리 시 오류가 발생하였습니다. \n오류내용 : ' + err);
}
} else {
alert('업무 화면에 대한 변동이 있습니다. 다시 시도해 주십시오.');
}
}
}
function setReturnValue(obj) {
if (!window.showModalDialog) {
if (opener != null && !opener.closed) {
var callbackMethod = opener.getCallbackMethodName();
try {
if (callbackMethod != null) {
opener[callbackMethod](obj);
} else {
opener.showModalDialogCallback(obj);
}
} catch (err) {
alert('팝업 처리 시 오류가 발생하였습니다. \n오류내용 : ' + err);
}
} else if (parent.opener != null && !parent.opener.closed) {
var callbackMethod = parent.opener.getCallbackMethodName();
try {
if (callbackMethod != null) {
parent.opener[callbackMethod](obj);
} else {
parent.opener.showModalDialogCallback(obj);
}
} catch (err) {
alert('팝업 처리 시 오류가 발생하였습니다. \n오류내용 : ' + err);
}
} else {
alert('업무 화면에 대한 변동이 있습니다. 다시 시도해 주십시오.');
}
}
}
Loading…
Cancel
Save