우편통합 안내문 수정.

main
JoJH 1 week ago
parent 4eef8a961f
commit dee17927e6

File diff suppressed because it is too large Load Diff

@ -1,207 +1,140 @@
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%> <%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
<c:set var="prefixName" scope="request">우편통합 안내문 정보</c:set> <c:set var="prefixName" scope="request">안내문 상세 정보</c:set>
<!-- inner page html --> <!-- inner page html -->
<div class="content-pop"> <div class="content-pop" data-doctx="${pageName}">
<!-- Content --> <!-- Content -->
<div class="container flex-grow-1 px-0"> <div class="container flex-grow-1 px-0">
<div class="card"> <div class="card">
<!-- 입력 영역 --> <!-- 입력 영역 -->
<form id="frmEdit--${pageName}" name="frmEdit"> <form name="frmEdit">
<!-- hidden --> <!-- hidden -->
<input type="hidden" id="sggCd--${pageName}" name="sggCd" data-map="SGG_CD" /> <input type="hidden" name="sggCd" data-map="SGG_CD" />
<input type="hidden" id="taskSeCd--${pageName}" name="taskSeCd" data-map="TASK_SE_CD" /> <input type="hidden" name="taskSeCd" data-map="TASK_SE_CD" />
<input type="hidden" id="gdntcId--${pageName}" name="gdntcId" data-map="GDNTC_ID" /> <input type="hidden" name="gdntcId" data-map="GDNTC_ID" />
<div class="row g-1"> <div class="row g-1">
<!-- 발송 구분 코드 --> <div class="col-md-12">
<div class="col-md-12"> <label is="name-label" class="col-form-label bg-lighter pe-2 w-px-120 text-sm-end required" for="sndngSeCdsndngSeCd">발송구분</label>
<label for="sndngSeCd--${pageName}" class="w-px-100 bg-lighter pe-2 col-form-label text-sm-end required">발송구분</label> <select is="id-select" class="form-select" name="sndngSeCd" data-map="SNDNG_SE_CD" required>
<select class="form-select" id="sndngSeCd--${pageName}" name="sndngSeCd" data-map="SNDNG_SE_CD" required> <option value="">선택하세요</option>
<option value="">선택하세요</option> <c:forEach items="${FIM047List}" var="item">
<c:forEach items="${FIM047List}" var="item"> <option value="${item.code}">${item.value}</option>
<option value="${item.code}">${item.value}</option> </c:forEach>
</c:forEach> </select>
</select> </div>
</div> <div class="col-md-12">
<!-- 제목 명 --> <label is="name-label" class="col-form-label bg-lighter pe-2 w-px-120 text-sm-end" for="ttlNm">제목</label>
<div class="col-md-12"> <input is="id-input" type="text" class="form-control w-70" name="ttlNm" data-map="TTL_NM" required autocomplete="off" />
<label for="ttlNm--${pageName}" class="w-px-100 bg-lighter pe-2 col-form-label text-sm-end required">제목</label> </div>
<input type="text" class="form-control w-75" id="ttlNm--${pageName}" name="ttlNm" data-map="TTL_NM" required autocomplete="off" /> <!-- 문구 내용 -->
</div> <div class="col-md-12">
<!-- 문구 내용 --> <label is="name-label" class="col-form-label bg-lighter pe-2 w-px-120 text-sm-end" for="wordsCn">문구내용</label>
<div class="col-md-12"> </div>
<label for="wordsCn--${pageName}" class="w-px-100 bg-lighter pe-2 col-form-label text-sm-end">문구내용</label> <div class="col-md-12">
</div> <textarea is="id-textarea" class="form-control w-100" name="wordsCn" data-map="WORDS_CN" rows="15" data-maxlengthb="4000" autocomplete="off"></textarea>
<div class="col-md-12"> </div>
<textarea class="form-control w-100" id="wordsCn--${pageName}" name="wordsCn" data-map="WORDS_CN" rows="15" data-maxlengthb="4000" autocomplete="off"></textarea> </div>
</div> </form>
</div> <!-- 입력 영역 -->
</form> </div> <!-- <div class="card"> -->
<!-- 입력 영역 -->
<!-- 업무 버튼 및 건수 표시 -->
<!-- 업무 버튼 및 건수 표시 --> <div>
<div> <span class="container-page-btn">
<span class="container-page-btn"> <!-- 업무 버튼 -->
<!-- 업무 버튼 --> <span class="container-window-btn-right">
<span class="container-window-btn-right"> <button type="button" class="btn btn-primary w-px-120" name="btnSave" title="저장">
<button type="button" class="btn btn-primary w-px-80" id="btnSave--${pageName}" title="저장"> 저장
저장 </button>
</button> </span>
</span> </span>
</span> </div>
</div> <!-- 업무 버튼 및 건수 표시 -->
<!-- 업무 버튼 및 건수 표시 --> </div> <!-- <div class="container flex-grow-1 px-0"> -->
</div> <!-- <div class="card"> --> <!-- Content -->
</div> <!-- <div class="container flex-grow-1 px-0"> -->
<!-- Content -->
</div> </div>
<!-- / inner page html <div class="content-pop"> --> <!-- / inner page html <div class="content-pop"> -->
<script> <script>
/************************************************************************** LoadScript("epst02020Script", wctx.url("/webjars/js/fims/epst/epst02020.js?ver=${ver}"));
* Global Variable
**************************************************************************/ /**************************************************************************
pageObject["${pageName}"] = {}; * Global Variable
**************************************************************************/
/************************************************************************** pageObject["${pageName}"] = newDoctxFinder("${pageName}");
* script 진입
**************************************************************************/ /**************************************************************************
$(document).ready(function() { * script 진입
// pageObject **************************************************************************/
let $P = pageObject["${pageName}"]; $(document).ready(function() {
// pageObject
// infoDialog 호출 용도(view 조회(편집불가), create 등록, update 수정) let $P = pageObject["${pageName}"];
$P.callPurpose = "${callPurpose}";
// FormFields // URL
$P.formFields = new FimsFormFields("#frmEdit--${pageName}"); $P.prefixUrl = "${prefixUrl}"
// infoDialog 호출 용도(view 조회(편집불가), create 등록, update 수정)
/************************************************************************** $P.callPurpose = "${callPurpose}";
* DatasetControl // datasetControl
**************************************************************************/ $P.ctrl = newEpst02020Control("${pageName}", "[data-doctx=${pageName}]");
$P.control = new DatasetControl({
prefix: "epostGdntc" /**************************************************************************
, prefixName: "안내문 정보" * 사용자 함수(function)
, keymapper: info => info ? info.GDNTC_ID : "" **************************************************************************/
, dataGetter: obj => obj.${infoPrefix}Info
});
/**************************************************************************
/************************************************************************** * 버튼 clickEvent
* DatasetControl 이벤트 **************************************************************************/
**************************************************************************/ // 저장
// 현재 선택 자료 변경 이벤트 $P.fnSave = () => {
$P.control.onCurrentChange = (item) => { // validate 확인
if (!item) return; if (!AppSupport.customValidate($P.$findn("frmEdit").find("input,select,textarea"))) return;
// Dataset 셋팅 // formFields
$P.formFields.set($P.control, item); let params = new FimsFormFields($P.selectorn("frmEdit")).get();
// 업무구분에 따른 URL 변경 dialog.alert({
$P.fnSetURL(item.data.TASK_SE_CD); content: "현재 " + $P.ctrl.prefixName + " 정보를 저장하시겠습니까?"
} , init: () => { AppSupport.setDialogZindex(); }
, onOK: () => { $P.ctrl.save(params); } // formFields
// 저장 callback });
$P.control.onSave = (resp) => { }
let dialogTitle = $("#" + $P.control.prefix + "Dialog--${openerPageName}").find("h5.modal-title").html();
let showMessage = resp.rtnMsg.replace(/[S]|[F]/g, dialogTitle); /**************************************************************************
* 초기 셋팅
// 메시지 출력 **************************************************************************/
dialog.alert({ // 이벤트 설정
content: showMessage $P.setEvent = () => {
, init: () => { AppSupport.setDialogZindex(); } // 버튼 이벤트
, onOK: () => { } $P.$findn("btnSave").on("click", () => { $P.fnSave() }); // 저장
}); }
if (resp.saved) { // 초기 화면 설정
dialog.close($P.control.prefix + "Dialog--${openerPageName}"); $P.fnReset = () => {
} // View로 호출
} if ($P.callPurpose == "view") {
// input 요소들을 disabled
// 저장 $P.$findn("frmEdit").find("input,textarea,select").prop("disabled", true);
$P.control.save = (info) => {
if (!info) return; // button 요소들을 disabled
$P.$findn("btnSave").prop("disabled", true); // 저장 버튼
let create = ($P.callPurpose == "create"); }
}
ajax.post({
url: !create ? $P.control.urls.update : $P.control.urls.create /**************************************************************************
, data: info * 최초 실행 함수
, success: resp => $P.control.onSave(resp) **************************************************************************/
}); // 1. 이벤트 설정
} $P.setEvent();
/************************************************************************** // 2. 초기 화면 설정
* 사용자 함수(function) $P.fnReset();
**************************************************************************/
// 업무구분에 따른 URL 설정 // 3. Dataset 설정
$P.fnSetURL = (taskSeCd) => { $P.ctrl.setData([${info}]);
$P.control.urls.create = wctx.url("/" + taskSeCd + "${infoPrefixUrl}" + "/020/create.do"); // 등록 });
$P.control.urls.update = wctx.url("/" + taskSeCd + "${infoPrefixUrl}" + "/020/update.do"); // 수정
}
/**************************************************************************
* 버튼 clickEvent
**************************************************************************/
// 저장
$P.fnSave = () => {
// validate 확인
if (!AppSupport.customValidate($("#frmEdit--${pageName}").find("input, select, textarea"))) return;
dialog.alert({
content: "현재 " + $P.control.prefixName + " 정보를 저장하시겠습니까?"
, init: () => { AppSupport.setDialogZindex(); }
, onOK: () => {
$P.control.save($P.formFields.get()); // formFields
}
});
}
/**************************************************************************
* 초기 셋팅
**************************************************************************/
// 이벤트 설정
$P.setEvent = () => {
// form-date 항목에서 키보드로 입력시 날짜 포맷팅 적용
$("#frmEdit--${pageName}").find(".form-date").each(function() {
$(this).on("input", function() {
let value = this.value.replaceAll("-","");
if (value.length > 7) {
this.value = value.substring(0, 4) + "-" + value.substring(4, 6) + "-" + value.substring(6);
} else if(value.length > 5) {
this.value = value.substring(0, 4) + "-" + value.substring(4);
}
});
});
// 버튼 이벤트
$("#btnSave--${pageName}").on("click", () => $P.fnSave()); // 저장
}
// 초기 화면 설정
$P.initForm = () => {
// View로 호출
if ($P.callPurpose == "view") {
// input 요소들을 disabled
$("#frmEdit--${pageName}").find("input,textarea,select").prop("disabled", true);
// button 요소들을 disabled
$("#btnSave--${pageName}").prop("disabled", true); // 저장 버튼
}
}
/**************************************************************************
* 최초 실행 함수
**************************************************************************/
// 1. 이벤트 설정
$P.setEvent();
// 2. 초기 화면 설정
$P.initForm();
// 3. Dataset 설정
$P.control.setData([${epostGdntcInfo}]);
});
</script> </script>

@ -599,13 +599,10 @@
// 초기화 이벤트 // 초기화 이벤트
$P.fnReset = (taskSeCd) => { $P.fnReset = (taskSeCd) => {
// 화면 초기화 // 초기화
$P.findn("frmSearch").reset(); $P.findn("frmSearch").reset(); // 화면 초기화
AppSupport.initDatepicker($P.findn("frmSearch")); // 달력 초기화
// 달력 초기화 AppSupport.initDetailSearchButton($P.findn("frmSearch")); // 상세검색 버튼 화살표
AppSupport.initDatepicker($P.findn("frmSearch"));
// 상세검색 버튼 화살표
AppSupport.initDetailSearchButton($P.findn("frmSearch"));
// input, select 초기화 // input, select 초기화
let searchForm = $P.$findn("frmSearch"); let searchForm = $P.$findn("frmSearch");

@ -47,7 +47,9 @@
</div> </div>
<div class="col-md-12"> <div class="col-md-12">
<label is="name-label" class="col-form-label bg-lighter pe-2 w-px-120 text-sm-end align-top" for="etcCn">기타 내용</label> <label is="name-label" class="col-form-label bg-lighter pe-2 w-px-120 text-sm-end align-top" for="etcCn">기타 내용</label>
<textarea is="id-textarea" class="form-control w-70" name="etcCn" data-map="ETC_CN" rows="3" data-maxlengthb="1000" autocomplete="off"></textarea> </div>
<div class="col-md-12">
<textarea is="id-textarea" class="form-control w-100" name="etcCn" data-map="ETC_CN" rows="3" data-maxlengthb="1000" autocomplete="off"></textarea>
</div> </div>
</div> </div>
</form> </form>

@ -784,13 +784,10 @@
// 초기화 버튼 이벤트 // 초기화 버튼 이벤트
$P.fnReset = (taskSeCd) => { $P.fnReset = (taskSeCd) => {
// 화면 초기화 // 초기화
$P.findn("frmSearch").reset(); $P.findn("frmSearch").reset(); // 화면 초기화
AppSupport.initDatepicker($P.findn("frmSearch")); // 달력 초기화
// 달력 초기화 AppSupport.initDetailSearchButton($P.findn("frmSearch")); // 상세검색 버튼 화살표
AppSupport.initDatepicker($P.findn("frmSearch"));
// 상세검색 버튼 화살표
AppSupport.initDetailSearchButton($P.findn("frmSearch"));
// input, select 초기화 // input, select 초기화
let searchForm = $P.$findn("frmSearch"); let searchForm = $P.$findn("frmSearch");

@ -493,13 +493,10 @@
// 초기화 버튼 이벤트 // 초기화 버튼 이벤트
$P.fnReset = (taskSeCd) => { $P.fnReset = (taskSeCd) => {
// 화면 초기화 // 초기화
$P.findn("frmSearch").reset(); $P.findn("frmSearch").reset(); // 화면 초기화
AppSupport.initDatepicker($P.findn("frmSearch")); // 달력 초기화
// 달력 초기화 AppSupport.initDetailSearchButton($P.findn("frmSearch")); // 상세검색 버튼 화살표
AppSupport.initDatepicker($P.findn("frmSearch"));
// 상세검색 버튼 화살표
AppSupport.initDetailSearchButton($P.findn("frmSearch"));
// input, select 초기화 // input, select 초기화
let searchForm = $P.$findn("frmSearch"); let searchForm = $P.$findn("frmSearch");

@ -197,7 +197,7 @@
</div> <!-- <div class="container-xxl flex-grow-1 px-0"> --> </div> <!-- <div class="container-xxl flex-grow-1 px-0"> -->
<!-- Content --> <!-- Content -->
<div class="content-backdrop fade"></div> <div class="content-backdrop fade"></div>
</div> </div>
<!-- / inner page html <div class="content-wrapper"> --> <!-- / inner page html <div class="content-wrapper"> -->
@ -250,7 +250,7 @@
Apply.toDataset.current($P.ctrl.dataset, dataIndex); Apply.toDataset.current($P.ctrl.dataset, dataIndex);
} }
// dataTable 더블 클릭 이벤트 - 개별총정보 dialog // dataTable 더블 클릭 이벤트 - 상세정보 dialog
$P.dataTableDblClick = (dataIndex) => { $P.dataTableDblClick = (dataIndex) => {
if (!dataIndex) return; if (!dataIndex) return;
@ -468,10 +468,10 @@
// 업무 버튼 이벤트 // 업무 버튼 이벤트
$P.$findn("btnUpdate").on("click", function() { $P.$findn("btnUpdate").on("click", function() {
$P.fnUpdate($P.$findn("btnUpdate").attr("title")); // 수정 $P.fnUpdate($P.$findn("btnUpdate").attr("title")); // 민원상담 수정
}); });
$P.$findn("btnRemove").on("click", function() { $P.$findn("btnRemove").on("click", function() {
$P.fnRemove($P.$findn("btnRemove").attr("title")); // 삭제 $P.fnRemove($P.$findn("btnRemove").attr("title")); // 민원상담 삭제
}); });
// DataTables width 변경 조정 // DataTables width 변경 조정
@ -482,13 +482,10 @@
// 초기화 이벤트 // 초기화 이벤트
$P.fnReset = (taskSeCd) => { $P.fnReset = (taskSeCd) => {
// 화면 초기화 // 초기화
$P.findn("frmSearch").reset(); $P.findn("frmSearch").reset(); // 화면 초기화
AppSupport.initDatepicker($P.findn("frmSearch")); // 달력 초기화
// 달력 초기화 AppSupport.initDetailSearchButton($P.findn("frmSearch")); // 상세검색 버튼 화살표
AppSupport.initDatepicker($P.findn("frmSearch"));
// 상세검색 버튼 화살표
AppSupport.initDetailSearchButton($P.findn("frmSearch"));
// input, select 초기화 // input, select 초기화
let searchForm = $P.$findn("frmSearch"); let searchForm = $P.$findn("frmSearch");

@ -0,0 +1,130 @@
function newEpst02010Script(pageName, doctx="[data-doctx='epst02010']") {
let ctrl = new DatasetControl({
doctx: doctx
, prefix: "epostGdntc"
, prefixName: "전자우편 안내문"
, dataGetter: obj => obj["List"]
, keys: ["GDNTC_ID"]
, appendData: true
, infoSize: "md"
, urls: {
load: "/list.do"
, getInfo: "/info.do"
, remove: "/remove.do"
}
, formats: {
LAST_USE_DT: datetimeFormat
, REG_DT: datetimeFormat
, MDFCN_DT: datetimeFormat
}
});
// 검색 조건
ctrl.query = { pageNum: 1, fetchSize: DEFAULT_FETCH_SIZE }; // 1 페이지당 자료 건수 index.jsp에서 확인
/**************************************************************************
* DatasetControl Events
**************************************************************************/
// Dataset 변경 이벤트
ctrl.onDatasetChange = (obj, option) => {
// 데이터 셋
let dataList = ctrl.dataset;
let empty = dataList.empty;
let replacer = (str, dataItem) => str
.replace(/{onclick}/gi, "pageObject['" + pageName + "'].dataTableClick('{data-index}');")
.replace(/{ondblclick}/gi, "pageObject['" + pageName + "'].dataTableDblClick('{data-index}');");
let trs = empty ?
[ctrl.find("[name='tmpltNotFound']").innerHTML]
: dataList.inStrings(ctrl.find("[name='tmpltRows']").innerHTML, replacer);
let noMore = (dataList.length >= obj["Paging"]?.totalSize); // 전체 건수
let initScroll = (ctrl.query.pageNum < 2);
if (option != null && option.reloaded) {
initScroll = false;
}
// dataTables(그리드)에 자료 표시 td
ctrl.find("[name='tableRspns']").changeContent(trs.join(), initScroll, noMore);
// checkbox 체크 해제
$(ctrl.find("[name='gridAllCheckbox']")).prop("checked", false);
// dataTables(그리드)에 페이지 표시 pagingInfo
pageObject[pageName].pagingSupport.setPagingInfo(obj);
// 보안모드
fn_securityModeToggle($("#securityMode--top").is(":checked"));
};
// 현재 선택 자료 변경 이벤트
ctrl.onCurrentChange = (item) => {
Apply.fromDataset.currentRow(ctrl.dataset, item, ctrl.find("[name='tbodyList']"));
};
// 선택(체크) 변경 이벤트
ctrl.onSelectionChange = (selectedArr) => {
// gridCheckbox
Apply.fromDataset.gridCheckbox(ctrl.dataset, ctrl.find("[name='tbodyList']"), 1, selectedArr);
// gridButton
Apply.fromDataset.gridButton(ctrl.dataset, ctrl.find("[name='btnRemove']"), selectedArr); // 삭제 버튼
};
// 상세 정보 dialog
ctrl.getInfo = (params) => {
if (!params) return;
ajax.get({
url: ctrl.urls.getInfo
, data: params || {}
, success: (resp) => {
let dialogName = ctrl.prefixed("Dialog");
let dialogId = dialogName + "-" + uuid();
dialog.open({
id: dialogId
, title: params.btnTitle
, size: ctrl.infoSize
, content: resp
, init: () => {
$("#" + dialogId).attr("name", dialogName);
$("#" + dialogId).attr("data-ref-doctx", pageName);
AppSupport.setDialogZindex();
}
// , onClose: () => { ctrl.reload({all : true}); } // 자료 재조회
});
}
});
}
// 삭제 callback
ctrl.onRemove = (params, resp) => {
let showMessage = resp.rtnMsg.replace(/[S]|[F]/g, params.btnTitle);
// 메시지 출력
dialog.alert({
content: showMessage
, init: () => { AppSupport.setDialogZindex(); }
, onOK: () => { }
, onClose: () => {
if (resp.saved) { ctrl.reload({ all: true }); } // 자료 재조회
}
});
}
// 삭제
ctrl.remove = (params) => {
if (!params) return;
ajax.post({
url: ctrl.urls.remove
, data: params || {}
, success: (resp) => { ctrl.onRemove(params, resp); }
});
}
return ctrl;
}

@ -0,0 +1,61 @@
function newEpst02020Control(pageName, doctx="[data-doctx='epst02020']") {
let ctrl = new DatasetControl({
doctx: doctx
, prefix: "epostGdntc"
, prefixName: "안내문"
, dataGetter: obj => obj["info"]
, keys: ["GDNTC_ID"]
, urls: {
create: "/create.do"
, update: "/update.do"
}
});
/**************************************************************************
* DatasetControl Events
**************************************************************************/
// 현재 선택 자료 변경 이벤트
ctrl.onCurrentChange = (item) => {
if (!item) return;
// 화면에 단속 Dataset 셋팅
let formFields = new FimsFormFields(ctrl.selector("[name='frmEdit']"));
formFields.set(ctrl, item);
// 업무구분에 따른 URL 변경
ctrl.urls.create = wctx.url("/" + item.data.TASK_SE_CD + pageObject[pageName].prefixUrl + "/020/create.do"); // 등록
ctrl.urls.update = wctx.url("/" + item.data.TASK_SE_CD + pageObject[pageName].prefixUrl + "/020/update.do"); // 수정
};
// 저장 callback
ctrl.onSave = (params, resp) => {
let modalId = $(document.querySelector(doctx)).parents(".modal")[0].id;
let dialogTitle = $("#" + modalId).find("h5.modal-title").html();
let showMessage = resp.rtnMsg.replace(/[S]|[F]/g, dialogTitle);
// 메시지 출력
dialog.alert({
content: showMessage
, init: () => { AppSupport.setDialogZindex(); }
, onOK: () => { }
, onClose: () => {
if (resp.saved) { dialog.close(modalId); }
}
});
}
// 저장
ctrl.save = (params) => {
if (!params) return;
let create = (params.gdntcId == "");
ajax.post({
url: !create ? ctrl.urls.update : ctrl.urls.create
, data: params || {}
, success: (resp) => { ctrl.onSave(params, resp); }
});
}
return ctrl;
}
Loading…
Cancel
Save