사전통지 발송 현황 수정.

main
jjh 11 months ago
parent 853c8826eb
commit 432b99025f

@ -84,8 +84,7 @@ public interface SndngService {
* @param req * @param req
* @return * @return
*/ */
List<DataObject> getAdvntceSndngDtls(SndbQuery req); List<DataObject> getAdvntceSndngDtlList(SndbQuery req);

@ -81,15 +81,14 @@ public class SndngServiceBean extends AbstractServiceBean implements SndngServic
} }
@Override @Override
public List<DataObject> getAdvntceSndngDtls(SndbQuery req) { public List<DataObject> getAdvntceSndngDtlList(SndbQuery req) {
return sndngDtlBean.getSndngDtls(req); return sndngDtlBean.getSndngDtlList(req);
} }
@Override @Override
public List<DataObject> getSndbkList(SndbQuery req) { public List<DataObject> getSndbkList(SndbQuery req) {
return sndngBean.getSndbkList(req); return sndngBean.getSndbkList(req);

@ -59,7 +59,7 @@ public class Sndb01Controller extends ApplicationController {
, advanceNoticeSendingMain = "/070/main.do" // 사전통지 발송 현황 메인 화면 , advanceNoticeSendingMain = "/070/main.do" // 사전통지 발송 현황 메인 화면
, getAdvanceNoticeSendingList = "/070/list.do" // 사전통지 발송 대상 목록 조회 , getAdvanceNoticeSendingList = "/070/list.do" // 사전통지 발송 대상 목록 조회
, getAdvanceNoticeSendingInfo = "/080/info.do" // 사전통지 발송 상세 대장 조회 , getAdvanceNoticeSendingInfo = "/080/info.do" // 사전통지 발송 상세 대장 조회
, getAdvanceNoticeSendingDetailsList= "/080/list.do" // 사전통지 발송 상세 대장 조회
@ -320,8 +320,8 @@ public class Sndb01Controller extends ApplicationController {
, Map.entry("납기일자", xlsx.format(o -> xlsx.str2date(o.get("SNDNG_END_YMD"))).style(dateYMD)) , Map.entry("납기일자", xlsx.format(o -> xlsx.str2date(o.get("SNDNG_END_YMD"))).style(dateYMD))
, Map.entry("총건수", xlsx.style("TNOCS", numeric)) , Map.entry("총건수", xlsx.style("TNOCS", numeric))
, Map.entry("총금액", xlsx.style("GRAMT", numeric)) , Map.entry("총금액", xlsx.style("GRAMT", numeric))
, Map.entry("제목", "TTL_NM")
, Map.entry("문서번호", "DOC_NO") , Map.entry("문서번호", "DOC_NO")
, Map.entry("제목", "TTL_NM")
, Map.entry("등록일시", xlsx.format(o -> xlsx.str2datetime(o.get("REG_DT"))).style(dateDT)) , Map.entry("등록일시", xlsx.format(o -> xlsx.str2datetime(o.get("REG_DT"))).style(dateDT))
, Map.entry("등록사용자", xlsx.style("RGTR_NM", center)) , Map.entry("등록사용자", xlsx.style("RGTR_NM", center))
, Map.entry("수정일시", xlsx.format(o -> xlsx.str2datetime(o.get("MDFCN_DT"))).style(dateDT)) , Map.entry("수정일시", xlsx.format(o -> xlsx.str2datetime(o.get("MDFCN_DT"))).style(dateDT))
@ -550,9 +550,56 @@ public class Sndb01Controller extends ApplicationController {
* }</code></pre> * }</code></pre>
*/ */
public ModelAndView getAdvanceNoticeSendingList(SndbQuery req) { public ModelAndView getAdvanceNoticeSendingList(SndbQuery req) {
List<?> result = sndngService.getAdvntceSndngList(setFetchSize(req)); if (!"xls".equals(req.getDownload())) {
List<?> result = sndngService.getAdvntceSndngList(setFetchSize(req));
return setCollectionInfo(new ModelAndView("jsonView"), result, "advntceSndng");
} else {
// 현재 날짜 구하기
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
String dateTime = dateFormat.format(System.currentTimeMillis());
ArrayList<CellDef> cellDefs = fromJson(req.getCellDefs(), new TypeReference<ArrayList<CellDef>>() {});
return setCollectionInfo(new ModelAndView("jsonView"), result, "advntceSndng"); XLSWriter xlsx = new XLSWriter()
.setFilename("사전통지발송현황" + "_목록_" + dateTime + ".xlsx")
.worksheet(0);
// CellStyle 지정은 여기에서..
CellStyle center = xlsx.cellStyle(Styler.CENTER); // 가운데 정렬
CellStyle numeric = xlsx.n_nn0(); // 숫자 3자리 콤마(,)
CellStyle dateYMD = xlsx.yyyy_mm_dd(); // 연월일
CellStyle dateDT = xlsx.yyyy_mm_dd_hh_mm_ss(); // 연월일+시간
List<DataObject> list = sndngService.getAdvntceSndngList(req.setFetchSize(0));
CellDef.setValues(cellDefs, Map.ofEntries(
Map.entry("업무구분", xlsx.style("TASK_SE_NM", center))
, Map.entry("등록구분", xlsx.style("SNDNG_REG_SE_NM", center))
, Map.entry("위반항목", "VLTN_ARTCL")
, Map.entry("발송일자", xlsx.format(o -> xlsx.str2date(o.get("SNDNG_YMD"))).style(dateYMD))
, Map.entry("납기일자", xlsx.format(o -> xlsx.str2date(o.get("SNDNG_END_YMD"))).style(dateYMD))
, Map.entry("총건수", xlsx.style("TNOCS", numeric))
, Map.entry("총금액", xlsx.style("GRAMT", numeric))
, Map.entry("문서번호", "DOC_NO")
, Map.entry("제목", "TTL_NM")
, Map.entry("등록일시", xlsx.format(o -> xlsx.str2datetime(o.get("REG_DT"))).style(dateDT))
, Map.entry("등록사용자", xlsx.style("RGTR_NM", center))
, Map.entry("수정일시", xlsx.format(o -> xlsx.str2datetime(o.get("MDFCN_DT"))).style(dateDT))
, Map.entry("수정사용자", xlsx.style("MDFR_NM", center))
)
);
xlsx.cell(0, 0)
.value("사전통지 발송 현황", center)
.merge(0, cellDefs.size() - 1)
.cell(3, 0)
.rowValues(CellDef.header(cellDefs, () -> CmmnUtil.headerStyle(xlsx)))
.cell(4, 0)
.values(list, CellDef.values(cellDefs));
return new ModelAndView("xlsView")
.addObject("xls", xlsx);
}
} }
/** - (sndb/sndb01/080-info) . /** - (sndb/sndb01/080-info) .
@ -563,20 +610,85 @@ public class Sndb01Controller extends ApplicationController {
* }</pre> * }</pre>
*/ */
public ModelAndView getAdvanceNoticeSendingInfo(SndbQuery req) { public ModelAndView getAdvanceNoticeSendingInfo(SndbQuery req) {
List<?> sndngDtls = sndngService.getAdvntceSndngDtls(req); //
ModelAndView mav = getAdvanceNoticeSendingDetailsList(req);
boolean json = jsonResponse(); mav.setViewName("fims/sndb/sndb01080-info");
ModelAndView mav = new ModelAndView(json ? "jsonView" : "fims/sndb/sndb01080-info");
return mav.addObject("pageName", "sndb01080") return mav
.addObject("sggCd", req.getSggCd()) .addObject("pageName", "sndb01080")
.addObject("taskSeCd", req.getTaskSeCd()) .addObject("query", toJson(req))
.addObject("advntceSndngDtl", json ? sndngDtls : toJson(sndngDtls)) // 사전통지 발송 현황 세부내용 .addObject("advntceSndngDtlList", toJson(mav.getModel().get("advntceSndngDtlList")))
; ;
} }
/** .<br />
* {@link SndngService#getSndngList(SndngQuery)}
* @param req
* @return jsonView
* <pre><code> {
* "sndngList": [ ]
* "sndngStart":
* "sndngFetch":
* "sndngTotal":
* }</code></pre>
*/
public ModelAndView getAdvanceNoticeSendingDetailsList(SndbQuery req) {
if (!"xls".equals(req.getDownload())) {
List<?> result = sndngService.getAdvntceSndngDtlList(setFetchSize(req));
return setCollectionInfo(new ModelAndView("jsonView"), result, "advntceSndngDtl");
} else {
// 현재 날짜 구하기
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
String dateTime = dateFormat.format(System.currentTimeMillis());
ArrayList<CellDef> cellDefs = fromJson(req.getCellDefs(), new TypeReference<ArrayList<CellDef>>() {});
XLSWriter xlsx = new XLSWriter()
.setFilename("사전통지발송상세" + "_목록_" + dateTime + ".xlsx")
.worksheet(0);
// CellStyle 지정은 여기에서..
CellStyle center = xlsx.cellStyle(Styler.CENTER); // 가운데 정렬
CellStyle numeric = xlsx.n_nn0(); // 숫자 3자리 콤마(,)
CellStyle dateYMD = xlsx.yyyy_mm_dd(); // 연월일
CellStyle dateDT = xlsx.yyyy_mm_dd_hh_mm_ss(); // 연월일+시간
List<DataObject> list = sndngService.getAdvntceSndngDtlList(req.setFetchSize(0));
CellDef.setValues(cellDefs, Map.ofEntries(
Map.entry("발송상태", xlsx.style("SNDNG_DTL_STTS_NM", center))
, Map.entry("등기번호", xlsx.style("RG_NO", center))
, Map.entry("발송일자", xlsx.format(o -> xlsx.str2date(o.get("SNDNG_YMD"))).style(dateYMD))
, Map.entry("납기일자", xlsx.format(o -> xlsx.str2date(o.get("SNDNG_END_YMD"))).style(dateYMD))
, Map.entry("납부자명", "RTPYR_NM")
, Map.entry("납부자번호", xlsx.style("RTPYR_BRDT", center))
, Map.entry("우편번호", xlsx.style("RTPYR_ZIP", center))
, Map.entry("주소", "RTPYR_ADDR")
, Map.entry("상세주소", "RTPYR_DTL_ADDR")
, Map.entry("단속일시", xlsx.style("CRDN_DT", center))
, Map.entry("차량번호", "VHRNO")
, Map.entry("단속장소", "CRDN_PLC")
, Map.entry("과태료금액", xlsx.style("FFNLG_AMT", numeric))
, Map.entry("등록일시", xlsx.format(o -> xlsx.str2datetime(o.get("REG_DT"))).style(dateDT))
, Map.entry("등록사용자", xlsx.style("RGTR_NM", center))
, Map.entry("수정일시", xlsx.format(o -> xlsx.str2datetime(o.get("MDFCN_DT"))).style(dateDT))
, Map.entry("수정사용자", xlsx.style("MDFR_NM", center))
)
);
xlsx.cell(0, 0)
.value("사전통지 발송 상세", center)
.merge(0, cellDefs.size() - 1)
.cell(3, 0)
.rowValues(CellDef.header(cellDefs, () -> CmmnUtil.headerStyle(xlsx)))
.cell(4, 0)
.values(list, CellDef.values(cellDefs));
return new ModelAndView("xlsView")
.addObject("xls", xlsx);
}
}

@ -589,6 +589,13 @@ public class DpvController {
return super.getAdvanceNoticeSendingInfo(req); return super.getAdvanceNoticeSendingInfo(req);
} }
@Override
@RequestMapping(name="사전통지 발송 현황 상세 조회", value=METHOD_URL.getAdvanceNoticeSendingDetailsList)
public ModelAndView getAdvanceNoticeSendingDetailsList(SndbQuery req) {
return super.getAdvanceNoticeSendingDetailsList(req);
}

@ -85,7 +85,6 @@
<sql id="selectList"> <sql id="selectList">
SELECT SD.SNDNG_DTL_ID /* 발송 상세 ID */ SELECT SD.SNDNG_DTL_ID /* 발송 상세 ID */
, SD.SVBTC_ID /* 공시송달 ID */
, SD.CRDN_ID /* 단속 ID */ , SD.CRDN_ID /* 단속 ID */
, SD.SVBTC_ID /* 공시송달 ID */ , SD.SVBTC_ID /* 공시송달 ID */
, SD.MTCHG_ID /* 매칭 ID */ , SD.MTCHG_ID /* 매칭 ID */
@ -171,7 +170,6 @@
, S.DEPT_CD /* 부서 코드 */ , S.DEPT_CD /* 부서 코드 */
, S.TASK_SE_CD /* 업무 구분 코드 */ , S.TASK_SE_CD /* 업무 구분 코드 */
, S.SNDNG_REG_SE_CD /* 발송 등록 구분 코드 */ , S.SNDNG_REG_SE_CD /* 발송 등록 구분 코드 */
, S.SNDNG_SE_CD /* 발송 구분 코드 */
, S.LEVY_BGNG_YMD /* 부과 시작 일자 */ , S.LEVY_BGNG_YMD /* 부과 시작 일자 */
, S.LEVY_END_YMD /* 부과 종료 일자 */ , S.LEVY_END_YMD /* 부과 종료 일자 */
, S.TTL_NM /* 제목 명 */ , S.TTL_NM /* 제목 명 */
@ -191,7 +189,22 @@
<select id="selectSndngDtlList" parameterType="map" resultType="dataobject">/* 발송 상세 목록 조회(sndngDtlMapper.selectSndngDtlList) */ <select id="selectSndngDtlList" parameterType="map" resultType="dataobject">/* 발송 상세 목록 조회(sndngDtlMapper.selectSndngDtlList) */
<include refid="utility.paging-prefix" /> <include refid="utility.paging-prefix" />
<include refid="selectList" /> <include refid="selectList" />
<where></where> <where>
<if test="sndngDtlIDs != null">
AND SD.SNDNG_DTL_ID IN ( /* 발송 상세 IDs */
<foreach collection="sndngDtlIDs" item="sndngDtlId" separator=","> #{sndngDtlId} </foreach>
)
</if>
<if test="sndngDtlId != null">
AND SD.SNDNG_DTL_ID = #{sndngDtlId} /* 발송 상세 ID */
</if>
<if test="sndngId != null">
AND SD.SNDNG_ID = #{sndngId} /* 발송 ID */
</if>
<if test="crdnId != null">
AND SD.CRDN_ID = #{crdnId} /* 단속 ID */
</if>
</where>
<include refid="utility.orderBy" /> <include refid="utility.orderBy" />
<include refid="utility.paging-suffix" /> <include refid="utility.paging-suffix" />
</select> </select>

@ -109,7 +109,7 @@
<!-- 납부자명 --> <!-- 납부자명 -->
<div class="col-6"> <div class="col-6">
<label class="form-label fw-bold form-search-title text-end">납부자명</label> <label class="form-label fw-bold form-search-title text-end">납부자명</label>
<input type="text" class="form-control w-px-160" id="schRtpyrNm--${pageName}" name="schRtpyrNm"autocomplete="off" /> <input type="text" class="form-control w-px-160" id="schRtpyrNm--${pageName}" name="schRtpyrNm" autocomplete="off" />
</div> </div>
<!-- 동적검색 --> <!-- 동적검색 -->
<div class="col-6"> <div class="col-6">
@ -543,9 +543,6 @@
// 기본 데이터 설정 // 기본 데이터 설정
setFormData${pageName}(taskSeCd); setFormData${pageName}(taskSeCd);
// URL 설정
setURL${pageName}(taskSeCd);
} }
// 검색 버튼 이벤트 // 검색 버튼 이벤트
@ -694,6 +691,9 @@
// 화면 데이터 설정 // 화면 데이터 설정
$("#sggCd--${pageName}").val("${sggCd}"); // 시군구 코드 $("#sggCd--${pageName}").val("${sggCd}"); // 시군구 코드
$("#frmSearch--${pageName} input[name='taskSeCd'][value='" + taskSeCd + "']").prop("checked", true); // 업무 구분 $("#frmSearch--${pageName} input[name='taskSeCd'][value='" + taskSeCd + "']").prop("checked", true); // 업무 구분
// URL 설정
setURL${pageName}(taskSeCd);
} }
// URL 설정 // URL 설정

@ -572,6 +572,15 @@
// 계고장 발송 대상 등록 버튼 이벤트 // 계고장 발송 대상 등록 버튼 이벤트
fnWrngTrgtInfo${pageName} = () => { fnWrngTrgtInfo${pageName} = () => {
if (${pageName}Control.dataset.empty) {
dialog.alert({
content : "검색된 자료가 없습니다."
, onOK : () => { }
});
return;
}
let params = ${pageName}Control.query; let params = ${pageName}Control.query;
params.callPurpose = "create"; params.callPurpose = "create";

@ -20,7 +20,7 @@
<!-- 문서 번호 --> <!-- 문서 번호 -->
<div class="col-md-4"> <div class="col-md-4">
<label for="docNo--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">문서번호</label> <label for="docNo--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">문서번호</label>
<input type="text" class="form-control w-55" id="docNo--${pageName}" name="docNo" /> <input type="text" class="form-control w-55" id="docNo--${pageName}" name="docNo" autocomplete="off" />
</div> </div>
<!-- 발송 일자 --> <!-- 발송 일자 -->
<div class="col-md-4"> <div class="col-md-4">
@ -39,12 +39,12 @@
<!-- 제목 명 --> <!-- 제목 명 -->
<div class="col-md-12"> <div class="col-md-12">
<label for="ttlNm--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">제목</label> <label for="ttlNm--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">제목</label>
<input type="text" class="form-control w-87" id="ttlNm--${pageName}" name="ttlNm" /> <input type="text" class="form-control w-87" id="ttlNm--${pageName}" name="ttlNm" autocomplete="off" />
</div> </div>
<!-- 기타 내용 --> <!-- 기타 내용 -->
<div class="col-md-12"> <div class="col-md-12">
<label for="etcCn--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">기타내용</label> <label for="etcCn--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">기타내용</label>
<textarea type="text" class="form-control w-87" id="etcCn--${pageName}" name="etcCn" rows="2" data-maxlengthb="1000"></textarea> <textarea type="text" class="form-control w-87" id="etcCn--${pageName}" name="etcCn" rows="2" data-maxlengthb="1000" autocomplete="off"></textarea>
</div> </div>
</div> <!-- <div class="row g-1"> --> </div> <!-- <div class="row g-1"> -->
</form> <!-- /입력 영역 --> </form> <!-- /입력 영역 -->
@ -345,14 +345,14 @@
// 기본 데이터 설정 // 기본 데이터 설정
setFormData${pageName} = () => { setFormData${pageName} = () => {
//
$("#tnocs--${pageName}").val(${pageName}Control.dataset.getValue("TNOCS")); // 총건수 $("#tnocs--${pageName}").val(${pageName}Control.dataset.getValue("TNOCS")); // 총건수
$("#gramt--${pageName}").val(${pageName}Control.dataset.getValue("GRAMT")); // 총금액 $("#gramt--${pageName}").val(${pageName}Control.dataset.getValue("GRAMT")); // 총금액
// 발송 종료 일자 // 발송 종료 일자
$("#sndngEndYmd--${pageName}").val(""); $("#sndngEndYmd--${pageName}").val("");
$("#sndngEndYmd--${pageName}").prop("disabled", true); $("#sndngEndYmd--${pageName}").prop("disabled", true);
$("#divSndngEndYmd--${pageName}").hide(); $("#divSndngEndYmd--${pageName}").hide();
// 제목
$("#docNo--${pageName}").val("계고장 발송");
} }
// 업무구분에 따른 url 설정 // 업무구분에 따른 url 설정

@ -13,7 +13,7 @@
<div> <div>
<!-- 상단 버튼 --> <!-- 상단 버튼 -->
<div class="container-page-btn"> <div class="container-page-btn">
<button type="button" class="btn btn-outline-dark" id="btnReset--${pageName}" title="초기화" onclick="fnReset${pageName}();"> <button type="button" class="btn btn-outline-dark w-px-120" id="btnReset--${pageName}" title="초기화" onclick="fnResetAndChangeBiz${pageName}();">
초기화 초기화
</button> </button>
<span class="container-window-btn-right"> <span class="container-window-btn-right">
@ -146,8 +146,8 @@
<th class="cmn" style="width: 120px;" onclick="searchFromGridTitle('SNDNG_END_YMD', this.innerText, 'ymd', '');">납기일자</th> <th class="cmn" style="width: 120px;" onclick="searchFromGridTitle('SNDNG_END_YMD', this.innerText, 'ymd', '');">납기일자</th>
<th class="cmn" style="width: 100px;" onclick="searchFromGridTitle('TNOCS', this.innerText, 'match', 'part');">총건수</th> <th class="cmn" style="width: 100px;" onclick="searchFromGridTitle('TNOCS', this.innerText, 'match', 'part');">총건수</th>
<th class="cmn" style="width: 140px;" onclick="searchFromGridTitle('GRAMT', this.innerText, 'match', 'part');">총금액</th> <th class="cmn" style="width: 140px;" onclick="searchFromGridTitle('GRAMT', this.innerText, 'match', 'part');">총금액</th>
<th class="cmn" style="width: 280px;" onclick="searchFromGridTitle('TTL_NM', this.innerText, 'match', 'part');">제목</th>
<th class="cmn" style="width: 200px;" onclick="searchFromGridTitle('DOC_NO', this.innerText, 'match', 'part');">문서번호</th> <th class="cmn" style="width: 200px;" onclick="searchFromGridTitle('DOC_NO', this.innerText, 'match', 'part');">문서번호</th>
<th class="cmn" style="width: 320px;" onclick="searchFromGridTitle('TTL_NM', this.innerText, 'match', 'part');">제목</th>
<th class="cmn" style="width: 180px;">등록일시</th> <th class="cmn" style="width: 180px;">등록일시</th>
<th class="cmn" style="width: 140px;">등록사용자</th> <th class="cmn" style="width: 140px;">등록사용자</th>
<th class="cmn" style="width: 180px;">수정일시</th> <th class="cmn" style="width: 180px;">수정일시</th>
@ -167,8 +167,8 @@
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{SNDNG_END_YMD}</td> <td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{SNDNG_END_YMD}</td>
<td class="cmn text-end" onclick="{onclick}" ondblclick="{ondblclick}">{TNOCS}</td> <td class="cmn text-end" onclick="{onclick}" ondblclick="{ondblclick}">{TNOCS}</td>
<td class="cmn text-end" onclick="{onclick}" ondblclick="{ondblclick}">{GRAMT}</td> <td class="cmn text-end" onclick="{onclick}" ondblclick="{ondblclick}">{GRAMT}</td>
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{TTL_NM}</td>
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{DOC_NO}</td> <td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{DOC_NO}</td>
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{TTL_NM}</td>
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{REG_DT}</td> <td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{REG_DT}</td>
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{RGTR_NM}</td> <td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{RGTR_NM}</td>
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{MDFCN_DT}</td> <td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{MDFCN_DT}</td>
@ -228,7 +228,7 @@
, keymapper : info => info ? info.SNDNG_ID : "" , keymapper : info => info ? info.SNDNG_ID : ""
, dataGetter : obj => obj.wrngSndngList , dataGetter : obj => obj.wrngSndngList
, appendData : true , appendData : true
, tableRenderComplete : false // dataTables 에 자료 추가 완료 여부 , tableRenderComplete : false // dataTables 에 자료 추가 완료 여부
, formats : { , formats : {
SNDNG_YMD : dateFormat SNDNG_YMD : dateFormat
, SNDNG_END_YMD : dateFormat , SNDNG_END_YMD : dateFormat
@ -255,7 +255,7 @@
, func : "${pageName}Control.load({index})" , func : "${pageName}Control.load({index})"
}); });
${pageName}Control.tableRenderComplete = true; // dataTables 에 자료 추가 완료 ${pageName}Control.tableRenderComplete = true; // dataTables 에 자료 추가 완료
}; };
// 현재 선택 자료 변경 이벤트 // 현재 선택 자료 변경 이벤트

@ -223,10 +223,10 @@
} }
// 출력 // 출력
printWrng${pageName} = (info) => { printWrng${pageName} = (params) => {
if (!info) return; if (!params) return;
info.delYN = "N"; // 삭제 여부 params.delYN = "N"; // 삭제 여부
// ajax.post({ // ajax.post({
// url : !create ? ${pageName}Control.urls.update : ${pageName}Control.urls.create // url : !create ? ${pageName}Control.urls.update : ${pageName}Control.urls.create
@ -280,12 +280,10 @@
// 달력 초기화 // 달력 초기화
initDatepicker("frmEdit--${pageName}"); initDatepicker("frmEdit--${pageName}");
} }
// 기본 데이터 설정 // 기본 데이터 설정
setFormData${pageName} = () => { setFormData${pageName} = () => {
//
$("#sggCd--${pageName}").val(${sggCd}); // 시군구 코드 $("#sggCd--${pageName}").val(${sggCd}); // 시군구 코드
$("#taskSeCd--${pageName}").val(${taskSeCd}); // 업무 구분 코드 $("#taskSeCd--${pageName}").val(${taskSeCd}); // 업무 구분 코드
} }

@ -536,6 +536,15 @@
// 사전통지 발송 대상 등록 버튼 이벤트 // 사전통지 발송 대상 등록 버튼 이벤트
fnAdvntceTrgtInfo${pageName} = () => { fnAdvntceTrgtInfo${pageName} = () => {
if (${pageName}Control.dataset.empty) {
dialog.alert({
content : "검색된 자료가 없습니다."
, onOK : () => { }
});
return;
}
let params = ${pageName}Control.query; let params = ${pageName}Control.query;
params.callPurpose = "create"; params.callPurpose = "create";
@ -635,7 +644,7 @@
// 달력 초기화 // 달력 초기화
initDatepicker("frmSearch--${pageName}"); initDatepicker("frmSearch--${pageName}");
$("#schCrdnYmdFrom--${pageName}").datepicker("setDate", DateUtil.getDateDay(-365).date); $("#schCrdnYmdFrom--${pageName}").datepicker("setDate", DateUtil.getDateDay(-7).date);
$("#schCrdnYmdTo--${pageName}").datepicker("setDate", new Date()); $("#schCrdnYmdTo--${pageName}").datepicker("setDate", new Date());
// 업무별 조회조건 // 업무별 조회조건

@ -20,7 +20,7 @@
<!-- 문서 번호 --> <!-- 문서 번호 -->
<div class="col-md-4"> <div class="col-md-4">
<label for="docNo--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">문서번호</label> <label for="docNo--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">문서번호</label>
<input type="text" class="form-control w-55" id="docNo--${pageName}" name="docNo" /> <input type="text" class="form-control w-55" id="docNo--${pageName}" name="docNo" autocomplete="off" />
</div> </div>
<!-- 발송 일자 --> <!-- 발송 일자 -->
<div class="col-md-4"> <div class="col-md-4">
@ -39,12 +39,12 @@
<!-- 제목 명 --> <!-- 제목 명 -->
<div class="col-md-12"> <div class="col-md-12">
<label for="ttlNm--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">제목</label> <label for="ttlNm--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">제목</label>
<input type="text" class="form-control w-87" id="ttlNm--${pageName}" name="ttlNm" /> <input type="text" class="form-control w-87" id="ttlNm--${pageName}" name="ttlNm" autocomplete="off" />
</div> </div>
<!-- 기타 내용 --> <!-- 기타 내용 -->
<div class="col-md-12"> <div class="col-md-12">
<label for="etcCn--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">기타내용</label> <label for="etcCn--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">기타내용</label>
<textarea type="text" class="form-control w-87" id="etcCn--${pageName}" name="etcCn" rows="2" data-maxlengthb="1000"></textarea> <textarea type="text" class="form-control w-87" id="etcCn--${pageName}" name="etcCn" rows="2" data-maxlengthb="1000" autocomplete="off"></textarea>
</div> </div>
</div> <!-- <div class="row g-1"> --> </div> <!-- <div class="row g-1"> -->
</form> <!-- /입력 영역 --> </form> <!-- /입력 영역 -->
@ -350,6 +350,7 @@
$("#gramt--${pageName}").val(${pageName}Control.dataset.getValue("GRAMT")); // 총금액 $("#gramt--${pageName}").val(${pageName}Control.dataset.getValue("GRAMT")); // 총금액
$("#sndngYmd--${pageName}").val(${pageName}AdvntceYmdInfo.LEVY_YMD_MASK); // 발송일자 $("#sndngYmd--${pageName}").val(${pageName}AdvntceYmdInfo.LEVY_YMD_MASK); // 발송일자
$("#sndngEndYmd--${pageName}").val(${pageName}AdvntceYmdInfo.DUDT_YMD_MASK); // 납기일자 $("#sndngEndYmd--${pageName}").val(${pageName}AdvntceYmdInfo.DUDT_YMD_MASK); // 납기일자
$("#docNo--${pageName}").val("사전통지 발송"); // 제목
} }
// 업무구분에 따른 url 설정 // 업무구분에 따른 url 설정

@ -13,7 +13,7 @@
<div> <div>
<!-- 상단 버튼 --> <!-- 상단 버튼 -->
<div class="container-page-btn"> <div class="container-page-btn">
<button type="button" class="btn btn-outline-dark" id="btnReset--${pageName}" title="초기화" onclick="fnReset${pageName}();"> <button type="button" class="btn btn-outline-dark w-px-120" id="btnReset--${pageName}" title="초기화" onclick="fnResetAndChangeBiz${pageName}();">
초기화 초기화
</button> </button>
<span class="container-window-btn-right"> <span class="container-window-btn-right">
@ -111,8 +111,7 @@
</button> </button>
</div> </div>
</div> </div>
</div> </div> <!-- / 상세 조건 -->
<!-- / 상세 조건 -->
</form> </form>
<!-- / 검색 조건 영역 --> <!-- / 검색 조건 영역 -->
@ -148,8 +147,8 @@
<th class="cmn" style="width: 120px;" onclick="searchFromGridTitle('SNDNG_END_YMD', this.innerText, 'ymd', '');">납기일자</th> <th class="cmn" style="width: 120px;" onclick="searchFromGridTitle('SNDNG_END_YMD', this.innerText, 'ymd', '');">납기일자</th>
<th class="cmn" style="width: 100px;" onclick="searchFromGridTitle('TNOCS', this.innerText, 'match', 'part');">총건수</th> <th class="cmn" style="width: 100px;" onclick="searchFromGridTitle('TNOCS', this.innerText, 'match', 'part');">총건수</th>
<th class="cmn" style="width: 140px;" onclick="searchFromGridTitle('GRAMT', this.innerText, 'match', 'part');">총금액</th> <th class="cmn" style="width: 140px;" onclick="searchFromGridTitle('GRAMT', this.innerText, 'match', 'part');">총금액</th>
<th class="cmn" style="width: 280px;" onclick="searchFromGridTitle('TTL_NM', this.innerText, 'match', 'part');">제목</th>
<th class="cmn" style="width: 200px;" onclick="searchFromGridTitle('DOC_NO', this.innerText, 'match', 'part');">문서번호</th> <th class="cmn" style="width: 200px;" onclick="searchFromGridTitle('DOC_NO', this.innerText, 'match', 'part');">문서번호</th>
<th class="cmn" style="width: 320px;" onclick="searchFromGridTitle('TTL_NM', this.innerText, 'match', 'part');">제목</th>
<th class="cmn" style="width: 180px;">등록일시</th> <th class="cmn" style="width: 180px;">등록일시</th>
<th class="cmn" style="width: 140px;">등록사용자</th> <th class="cmn" style="width: 140px;">등록사용자</th>
<th class="cmn" style="width: 180px;">수정일시</th> <th class="cmn" style="width: 180px;">수정일시</th>
@ -169,8 +168,8 @@
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{SNDNG_END_YMD}</td> <td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{SNDNG_END_YMD}</td>
<td class="cmn text-end" onclick="{onclick}" ondblclick="{ondblclick}">{TNOCS}</td> <td class="cmn text-end" onclick="{onclick}" ondblclick="{ondblclick}">{TNOCS}</td>
<td class="cmn text-end" onclick="{onclick}" ondblclick="{ondblclick}">{GRAMT}</td> <td class="cmn text-end" onclick="{onclick}" ondblclick="{ondblclick}">{GRAMT}</td>
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{TTL_NM}</td>
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{DOC_NO}</td> <td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{DOC_NO}</td>
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{TTL_NM}</td>
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{REG_DT}</td> <td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{REG_DT}</td>
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{RGTR_NM}</td> <td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{RGTR_NM}</td>
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{MDFCN_DT}</td> <td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{MDFCN_DT}</td>
@ -179,7 +178,19 @@
</tr> </tr>
</template> </template>
<template id="${infoPrefix}NotFound--${pageName}"> <template id="${infoPrefix}NotFound--${pageName}">
<tr class="odd"> <tr class="bpv">
<td valign="top" colspan="15" class="dataTables_empty text-center">${prefixName} 정보를 찾지 못했습니다.</td>
</tr>
<tr class="dpv">
<td valign="top" colspan="15" class="dataTables_empty text-center">${prefixName} 정보를 찾지 못했습니다.</td>
</tr>
<tr class="eca">
<td valign="top" colspan="15" class="dataTables_empty text-center">${prefixName} 정보를 찾지 못했습니다.</td>
</tr>
<tr class="pvs">
<td valign="top" colspan="15" class="dataTables_empty text-center">${prefixName} 정보를 찾지 못했습니다.</td>
</tr>
<tr class="tpv">
<td valign="top" colspan="15" class="dataTables_empty text-center">${prefixName} 정보를 찾지 못했습니다.</td> <td valign="top" colspan="15" class="dataTables_empty text-center">${prefixName} 정보를 찾지 못했습니다.</td>
</tr> </tr>
</template> </template>
@ -218,7 +229,7 @@
, keymapper : info => info ? info.SNDNG_ID : "" , keymapper : info => info ? info.SNDNG_ID : ""
, dataGetter : obj => obj.advntceSndngList , dataGetter : obj => obj.advntceSndngList
, appendData : true , appendData : true
, tableRenderComplete : false // dataTables 에 자료 추가 완료 여부 , tableRenderComplete : false // dataTables 에 자료 추가 완료 여부
, formats : { , formats : {
SNDNG_YMD : dateFormat SNDNG_YMD : dateFormat
, SNDNG_END_YMD : dateFormat , SNDNG_END_YMD : dateFormat
@ -234,7 +245,7 @@
**************************************************************************/ **************************************************************************/
// Dataset 변경 이벤트 // Dataset 변경 이벤트
${pageName}Control.onDatasetChange = obj => { ${pageName}Control.onDatasetChange = obj => {
renderList${pageName}(); renderList${pageName}(obj.${infoPrefix}Total);
$("#paging--${pageName}").setPagingInfo({ $("#paging--${pageName}").setPagingInfo({
list : ${pageName}Control.dataset list : ${pageName}Control.dataset
@ -245,7 +256,7 @@
, func : "${pageName}Control.load({index})" , func : "${pageName}Control.load({index})"
}); });
${pageName}Control.tableRenderComplete = true; // dataTables 에 자료 추가 완료 ${pageName}Control.tableRenderComplete = true; // dataTables 에 자료 추가 완료
}; };
// 현재 선택 자료 변경 이벤트 // 현재 선택 자료 변경 이벤트
@ -261,12 +272,10 @@
${pageName}Control.getInfo = (sndngId) => { ${pageName}Control.getInfo = (sndngId) => {
if (typeof sndngId == "undefined" || sndngId == null || sndngId == "") return; if (typeof sndngId == "undefined" || sndngId == null || sndngId == "") return;
let params = { let params = ${pageName}Control.query;
callPurpose : "view"
, sggCd : ${pageName}Control.dataset.getValue("SGG_CD") // 시군구 코드 params.callPurpose = "view";
, taskSeCd : ${pageName}Control.dataset.getValue("TASK_SE_CD") // 업무 구분 코드 params.sndngId = sndngId;
, sndngId : sndngId // 발송 ID
};
ajax.get({ ajax.get({
url : ${pageName}Control.urls.getInfo url : ${pageName}Control.urls.getInfo
@ -283,43 +292,193 @@
} }
/************************************************************************** /**************************************************************************
* * DataTables 이벤트
**************************************************************************/ **************************************************************************/
// DataTables에 click, dbclick 이벤트 // DataTables에 click, dbclick 이벤트
renderList${pageName} = () => { renderList${pageName} = (totalSize) => {
let ${infoPrefix}List = ${pageName}Control.dataset; let ${infoPrefix}List = ${pageName}Control.dataset;
let empty = ${infoPrefix}List.empty; let empty = ${infoPrefix}List.empty;
let clsForTask = $("#frmSearch--${pageName} input[name='taskSeCd']:checked").val();
if (typeof clsForTask == "undefined" || clsForTask == null || clsForTask == "") {
clsForTask = $("#layout-navbar input[name='taskSeCd']:checked").val().toLowerCase();
} else {
clsForTask = clsForTask.toLowerCase();
}
let trs = empty ? // 업무별 그리드 td
[document.getElementById("${infoPrefix}NotFound--${pageName}").innerHTML] : <%-- from template#${infoPrefix}NotFound --%> let foundContent = document.getElementById("${infoPrefix}Row--${pageName}").content;
${infoPrefix}List.inStrings( let foundTr = $(foundContent).find("tr")[0].cloneNode(false);
document.getElementById("${infoPrefix}Row--${pageName}").innerHTML, <%-- from template#${infoPrefix}Row --%> let foundTds = $(foundContent).find("." + clsForTask + ",.cmn");
(str, dataItem) => str
.replace(/{onclick}/gi, "${pageName}Control.setCurrent('" + dataItem.getValue("SNDNG_ID") + "');") foundTds.each(function() {
.replace(/{ondblclick}/gi, "${pageName}Control.getInfo('" + dataItem.getValue("SNDNG_ID") + "');") foundTr.appendChild(this.cloneNode(true));
});
let trs = empty ?
[document.getElementById("${infoPrefix}NotFound--${pageName}").content.querySelector("." + clsForTask + ",.cmn").outerHTML] :
${infoPrefix}List.inStrings(
foundTr.outerHTML,
(str, dataItem) => str
.replace(/{onclick}/gi, "${pageName}Control.setCurrent('" + dataItem.getValue("SNDNG_ID") + "');")
.replace(/{ondblclick}/gi, "${pageName}Control.getInfo('" + dataItem.getValue("SNDNG_ID") + "');")
); );
$("#tbody--${pageName}").html(trs.join()); let noMore = (totalSize == ${infoPrefix}List.length);
let initScroll = (${pageName}Control.query.pageNum < 2) && (${pageName}Control.untilPageNum == 0);
$("#table-responsive--${pageName}")[0].changeContent(trs.join(), initScroll, noMore);
if (${pageName}Control.untilPageNum != 0) {
${pageName}Control.query.fetchSize = ${pageName}Control.defaultFetchSize;
${pageName}Control.query.pageNum = ${pageName}Control.untilPageNum;
${pageName}Control.untilPageNum = 0;
}
// checkbox 체크 해제
$("th input[type='checkbox']").prop("checked", false); $("th input[type='checkbox']").prop("checked", false);
//보안모드 //보안모드
fn_securityModeToggle($("#securityMode--top").is(":checked")); fn_securityModeToggle($("#securityMode--top").is(":checked"));
} }
// DataTables에 스크롤이 맨 밑으로 이동했을 때 이벤트
scrollDataList${pageName} = () => {
${pageName}Control.tableRenderComplete = false; // dataTables 에 자료 추가 false
${pageName}Control.load(${pageName}Control.query.pageNum + 1);
}
/************************************************************************** /**************************************************************************
* 초기 셋팅 * 사용자 함수(function)
**************************************************************************/ **************************************************************************/
// 초기화 // callback 사용자 검색
initForm${pageName} = () => { callbackFindUser${pageName} = (userId, userNm) => {
// 화면 초기화 $("#schRgtrCd--${pageName}").val(userId); // 사용자 ID
$("#frmSearch--${pageName}")[0].reset(); $("#schRgtrNm--${pageName}").val(userNm); // 사용자 명
}
// dataset 초기화 // 사용자 검색
${pageName}Control.dataset.clear(); getFindUser${pageName} = () => {
let params = {
callbackFuncName : "callbackFindUser${pageName}"
}
ajax.get({
url : wctx.url("/user/user02/010/main.do")
, data : params || {}
, success : resp => {
dialog.open({
id : "userDialog"
, title : "사용자 검색"
, content : resp
, size : "lg"
});
}
});
}
// 개별총정보 dialog
getTotalInfo${pageName} = (crdnId) => {
if (typeof crdnId == "undefined" || crdnId == null || crdnId == "") return;
let params = {
callControlName : "${pageName}Control"
, sggCd : $("#sggCd--${pageName}").val()
, taskSeCd : $("input[name=taskSeCd]:checked").val()
, crdnId : crdnId
}
ajax.get({
url : wctx.url(params.taskSeCd + "/sprt/sprt02/010/main.do")
, data : params
, success : resp => {
dialog.open({
id : "totalInfoMainDialog"
, title : "개별총정보"
, content : resp
, size : "xxl"
});
}
});
}
// 검색 자료 재조회
refreshList${pageName} = () => {
${pageName}Control.untilPageNum = ${pageName}Control.query.pageNum;
${pageName}Control.query.fetchSize = ${pageName}Control.defaultFetchSize * ${pageName}Control.query.pageNum;
${pageName}Control.load(1);
}
/**************************************************************************
* 버튼 clickEvent
**************************************************************************/
// 업무 구분 변경
fnResetAndChangeBiz${pageName} = (taskSeCd) => {
// 업무 구분 코드
if (typeof taskSeCd == "undefined" || taskSeCd == null || taskSeCd == "") {
taskSeCd = $("#layout-navbar input[name='taskSeCd']:checked").val();
}
// 초기 기본 설정
initForm${pageName}();
// 기본 데이터 설정
setFormData${pageName}(taskSeCd);
// URL 설정
setURL${pageName}(taskSeCd);
}
// 검색 버튼 이벤트
fnSearchList${pageName} = () => {
// 검색조건
${pageName}Control.query = ${pageName}Fields.get();
${pageName}Control.query.fetchSize = ${pageName}Control.defaultFetchSize; // 한번에 조회되는 자료 건수
${pageName}Control.query.sndngSeCd = "02"; // 발송 구분 코드 - 02 사전통지
${pageName}Control.query.delYN = "N"; // 삭제 여부
${pageName}Control.load(1);
} }
// 엑셀 버튼 이벤트
fnExcel${pageName} = () => {
if (${pageName}Control.dataset.empty) {
dialog.alert({
content : "검색된 자료가 없습니다."
, onOK : () => { }
});
return;
}
// DataTables(그리드)
let cellDefs = getCellDefs($("#theadTr--${pageName} th").not(".dummy-th").not(":eq(0)")
, $($("#${infoPrefix}Row--${pageName}")[0].content).find("td").not(".dummy-td").not(":eq(0)"));
${pageName}Control.query.cellDefs = cellDefs;
${pageName}Control.download();
}
// 사용자 조회 버튼 이벤트
fnFindUser${pageName} = () => {
getFindUser${pageName}();
}
/**************************************************************************
* 초기 셋팅
**************************************************************************/
// 이벤트 // 이벤트
setEvent${pageName} = () => { setEvent${pageName} = () => {
// 동적검색에서 엔터(Enter) 키를 누르면 검색한다.
$("#term--${pageName}").keypress(function(e) {
if (e.keyCode == 13) {
fnSearchList${pageName}();   
}    
});
// form-date 항목에서 키보드로 입력시 날짜 포맷팅 적용 // form-date 항목에서 키보드로 입력시 날짜 포맷팅 적용
$("#frmSearch--${pageName}").find(".form-date").each(function() { $("#frmSearch--${pageName}").find(".form-date").each(function() {
$(this).on("input", function() { $(this).on("input", function() {
@ -336,36 +495,14 @@
// DataTables width 변경 조정 // DataTables width 변경 조정
$("#DataTables_Table_0--${pageName}").find("th").resizable( {handles : "e"} ); $("#DataTables_Table_0--${pageName}").find("th").resizable( {handles : "e"} );
// DataTables 스크롤 이벤트 // DataTables 스크롤 이벤트 생성
$("#table-responsive--${pageName}").scroll(function() { fnMakeScrollableTable($("#table-responsive--${pageName}")[0], scrollDataList${pageName});
let el = $(this);
if (el.scrollTop() == 0) {
return;
}
if (!${pageName}Control.tableRenderComplete) {
return;
}
let itemsCnt = ${pageName}Control.dataset._items.length;
let totCnt = ${pageName}Control.dataset.getValue("TOT_CNT"); // let totCnt = ${pageName}Control.dataset.getCurrent("item").data.TOT_CNT;
if (itemsCnt >= totCnt) {
return;
}
if ((el[0].scrollHeight - el.scrollTop() + VERTICAL_SCROLL_HEIGHT) <= el.outerHeight()) {
${pageName}Control.tableRenderComplete = false; // dataTables 에 자료 추가 완료
${pageName}Control.load(${pageName}Control.query.pageNum + 1);
}
});
} }
// 화면 초기값 셋팅 // 화면 초기 설정
setForm${pageName} = (taskSeCd) => { initForm${pageName} = () => {
// 업무 구분 코드 // 화면 초기화
$("#frmSearch--${pageName} input[name='taskSeCd'][value='" + taskSeCd + "']").prop("checked", true); $("#frmSearch--${pageName}")[0].reset();
// 최고 관리자 경우 업무구분을 선택할 수 있도록 하자. // 최고 관리자 경우 업무구분을 선택할 수 있도록 하자.
$("#frmSearch--${pageName} input[name='taskSeCd']").each(function(i) { $("#frmSearch--${pageName} input[name='taskSeCd']").each(function(i) {
@ -375,77 +512,44 @@
// 달력 초기화 // 달력 초기화
initDatepicker("frmSearch--${pageName}"); initDatepicker("frmSearch--${pageName}");
$("#schSndngYmdFrom--${pageName}").datepicker("setDate", DateUtil.getDateDay(-365).date); $("#schSndngYmdFrom--${pageName}").datepicker("setDate", DateUtil.getDateDay(-7).date);
$("#schSndngYmdTo--${pageName}").datepicker("setDate", new Date()); $("#schSndngYmdTo--${pageName}").datepicker("setDate", new Date());
}
// URL 설정 // 사용자 이름
setURL${pageName} = (taskSeCd) => { $("#schRgtrNm--${pageName}").prop("readonly", true);
${pageName}Control.urls.load = wctx.url("/" + taskSeCd + ${pageName}PrefixUrl + "/070/list.do"); // 조회
${pageName}Control.urls.getInfo = wctx.url("/" + taskSeCd + ${pageName}PrefixUrl + "/080/info.do"); // 사전통지 세부내용
}
/************************************************************************** // dataset 초기화
* 버튼 clickEvent ${pageName}Control.dataset.clear();
**************************************************************************/
// 업무 구분 변경
fnResetAndChangeBiz${pageName} = (taskSeCd) => {
// 초기화
initForm${pageName}();
// 업무 구분 코드
if (typeof taskSeCd == "undefined" || taskSeCd == null || taskSeCd == "") {
taskSeCd = $("#layout-navbar input[name='taskSeCd']:checked").val();
}
// 화면 초기값 설정
setForm${pageName}(taskSeCd);
// URL 설정
setURL${pageName}(taskSeCd);
} }
// 초기화 버튼 이벤트 // 기본 데이터 설정
fnReset${pageName} = () => { setFormData${pageName} = (taskSeCd) => {
fnResetAndChangeBiz${pageName}(); // ${pageName}Control 설정
} ${pageName}Control.defaultFetchSize = FETCH_XS; // 1 페이지당 조회되는 자료 건수 index.jsp에서 확인 FETCH_XS = 30
// 검색 버튼 이벤트 // 화면 데이터 설정
fnSearchList${pageName} = () => { $("#sggCd--${pageName}").val("${sggCd}"); // 시군구 코드
// 검색조건 $("#frmSearch--${pageName} input[name='taskSeCd'][value='" + taskSeCd + "']").prop("checked", true); // 업무 구분
${pageName}Control.query = ${pageName}Fields.get();
${pageName}Control.query.fetchSize = FETCH_XS; // 한번에 조회되는 자료 건수 FETCH_XS = 30
${pageName}Control.query.sndngSeCd = "02"; // 발송 구분 코드 - 02 사전통지
${pageName}Control.query.delYn = "N"; // 삭제 여부
${pageName}Control.load();
} }
// 엑셀 버튼 이벤트 // URL 설정
fnExcel${pageName} = () => { setURL${pageName} = (taskSeCd) => {
${pageName}Control.urls.load = wctx.url(taskSeCd + ${pageName}PrefixUrl + "/070/list.do"); // 조회
${pageName}Control.urls.getInfo = wctx.url(taskSeCd + ${pageName}PrefixUrl + "/080/info.do"); // 사전통지 세부내용
} }
/************************************************************************** /**************************************************************************
* script 진입 * script 진입
**************************************************************************/ **************************************************************************/
$(document).ready(function() { $(document).ready(function() {
// 기본 데이터 설정
$("#sggCd--${pageName}").val("${sggCd}"); // 시군구 코드
// 이벤트 설정 // 이벤트 설정
setEvent${pageName}(); setEvent${pageName}();
// 보안모드 // 보안모드
fn_securityModeToggle($("#securityMode--top").is(":checked")); fn_securityModeToggle($("#securityMode--top").is(":checked"));
// 업무 구분 설정
let defaultBizValue = $("#layout-navbar input[name='taskSeCd']:checked").val();
$("#frmSearch--${pageName} input[name='taskSeCd'][value='" + defaultBizValue + "']").prop("checked", true);
// 화면 초기 설정 및 업무 구분 변경 // 화면 초기 설정 및 업무 구분 변경
fnResetAndChangeBiz${pageName}(defaultBizValue); fnResetAndChangeBiz${pageName}($("#layout-navbar input[name='taskSeCd']:checked").val());
}); });
</script> </script>

@ -17,8 +17,17 @@
<!-- 업무 버튼 및 건수 표시 --> <!-- 업무 버튼 및 건수 표시 -->
<div> <div>
<span class="container-page-btn"> <span class="container-page-btn">
<!-- 건수, 페이지 표시 -->
<div class="d-flex flex-row justify-content-between">
<label class="dataTables_info" id="paging--${pageName}PagingInfo" role="status" aria-live="polite"></label>
<ul class="pagination pagination-primary" id="paging--${pageName}">
</ul>
</div>
<span class="container-window-btn-right"> <span class="container-window-btn-right">
<!-- 업무 버튼 --> <!-- 업무 버튼 -->
<button type="button" class="btn btn-excel w-px-120" id="btnExcel--${pageName}" title="엑셀 저장" onclick="fnList${pageName}();">
검색
</button>
<button type="button" class="btn btn-excel w-px-120" id="btnExcel--${pageName}" title="엑셀 저장" onclick="fnExcel${pageName}();"> <button type="button" class="btn btn-excel w-px-120" id="btnExcel--${pageName}" title="엑셀 저장" onclick="fnExcel${pageName}();">
엑셀 저장 엑셀 저장
</button> </button>
@ -48,14 +57,11 @@
<!-- DataTables(그리드) --> <!-- DataTables(그리드) -->
<div class="card-datatable text-nowrap"> <div class="card-datatable text-nowrap">
<div class="dataTables_wrapper dt-bootstrap5 no-footer" id="DataTables_Table_0_wrapper--${pageName}"> <div class="dataTables_wrapper dt-bootstrap5 no-footer" id="DataTables_Table_0_wrapper--${pageName}">
<div class="table-responsive" id="table-responsive--${pageName}" style="overflow-x:scroll; height:400px; overflow-y:scroll;" > <div class="table-responsive" id="table-responsive--${pageName}" style="overflow-x:scroll; height:460px; overflow-y:scroll;" >
<table class="table-layout-fixed dataTable datatables-ajax table table-bordered no-footer" id="DataTables_Table_0--${pageName}" aria-describedby="DataTables_Table_0_info"> <table class="table-layout-fixed dataTable datatables-ajax table table-bordered no-footer" id="DataTables_Table_0--${pageName}" aria-describedby="DataTables_Table_0_info">
<thead class="sticky-thead"> <thead class="sticky-thead">
<tr id="theadTr--${pageName}" <tr id="theadTr--${pageName}"
data-by="by--${pageName}" data-by-output="byOutput--${pageName}" data-main-option="mainOption--${pageName}" data-sub-option="subOption--${pageName}"> data-by="by--${pageName}" data-by-output="byOutput--${pageName}" data-main-option="mainOption--${pageName}" data-sub-option="subOption--${pageName}">
<th class="cmn hidden" style="width: 56px;">
<input type="checkbox" class="form-check-input" onchange="${pageName}Control.select(this.checked);">
</th>
<th class="cmn" style="width: 120px;">발송상태</th> <th class="cmn" style="width: 120px;">발송상태</th>
<th class="cmn" style="width: 200px;">등기번호</th> <th class="cmn" style="width: 200px;">등기번호</th>
<th class="cmn" style="width: 120px;">발송일자</th> <th class="cmn" style="width: 120px;">발송일자</th>
@ -68,7 +74,7 @@
<th class="cmn" style="width: 180px;">단속일시</th> <th class="cmn" style="width: 180px;">단속일시</th>
<th class="cmn" style="width: 140px;">차량번호</th> <th class="cmn" style="width: 140px;">차량번호</th>
<th class="cmn" style="width: 280px;">단속장소</th> <th class="cmn" style="width: 280px;">단속장소</th>
<th class="cmn" style="width: 120px;">단속금액</th> <th class="cmn" style="width: 120px;">과태료금액</th>
<th class="cmn" style="width: 180px;">등록일시</th> <th class="cmn" style="width: 180px;">등록일시</th>
<th class="cmn" style="width: 140px;">등록사용자</th> <th class="cmn" style="width: 140px;">등록사용자</th>
<th class="cmn" style="width: 180px;">수정일시</th> <th class="cmn" style="width: 180px;">수정일시</th>
@ -80,9 +86,6 @@
</tbody> </tbody>
<template id="${infoPrefix}Row--${pageName}"> <template id="${infoPrefix}Row--${pageName}">
<tr data-key="{SNDNG_DTL_ID}"> <tr data-key="{SNDNG_DTL_ID}">
<td class="cmn text-center hidden">
<input type="checkbox" class="form-check-input" value="{SNDNG_DTL_ID}" onchange="${pageName}Control.select('{SNDNG_DTL_ID}', this.checked);">
</td>
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{SNDNG_DTL_STTS_NM}</td> <td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{SNDNG_DTL_STTS_NM}</td>
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{RG_NO}</td> <td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{RG_NO}</td>
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{SNDNG_YMD}</td> <td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{SNDNG_YMD}</td>
@ -125,8 +128,12 @@
**************************************************************************/ **************************************************************************/
// URL // URL
var ${pageName}PrefixUrl = "/sndb/sndb01"; var ${pageName}PrefixUrl = "/sndb/sndb01";
// infoDialog 호출 용도(view 조회(편집불가), create 등록, update 수정)
var ${pageName}CallPurpose = "${callPurpose}";
// FormFields // FormFields
var ${pageName}Fields = new FimsFormFields("#frmEdit--${pageName}"); var ${pageName}Fields = new FimsFormFields("#frmEdit--${pageName}");
// main 의 검색 조건을 그대로 유지
var ${pageName}Query = ${query};
/************************************************************************** /**************************************************************************
* DatasetControl * DatasetControl
@ -137,10 +144,8 @@
, keymapper : info => info ? info.SNDNG_DTL_ID : "" , keymapper : info => info ? info.SNDNG_DTL_ID : ""
, dataGetter : obj => obj.advntceSndngDtlList , dataGetter : obj => obj.advntceSndngDtlList
, appendData : true , appendData : true
, tableRenderComplete : false // dataTables 에 자료 추가 완료 여부 , untilPageNum : 0 // 현재 페이지 번호
, urls : { , tableRenderComplete : false // dataTables 에 자료 추가 완료 여부
getInfo : wctx.url("/sprt/sprt02/010/main.do") // 개별총정보
}
, formats : { , formats : {
SNDNG_YMD : dateFormat SNDNG_YMD : dateFormat
, SNDNG_END_YMD : dateFormat , SNDNG_END_YMD : dateFormat
@ -155,14 +160,18 @@
**************************************************************************/ **************************************************************************/
// Dataset 변경 이벤트 // Dataset 변경 이벤트
${pageName}Control.onDatasetChange = obj => { ${pageName}Control.onDatasetChange = obj => {
renderList${pageName}(); renderList${pageName}(obj.${infoPrefix}Total);
${pageName}Control.select(true); // 전체 선택 되도록.. $("#paging--${pageName}").setPagingInfo({
list : ${pageName}Control.dataset
if (obj.length > 0) { , prefix : "paging--${pageName}"
} , start : obj.${infoPrefix}Start
, totalSize : obj.${infoPrefix}Total
, fetchSize : obj.${infoPrefix}Fetch
, func : "${pageName}Control.load({index})"
});
${pageName}Control.tableRenderComplete = true; // dataTables 에 자료 추가 완료 ${pageName}Control.tableRenderComplete = true; // dataTables 에 자료 추가 완료
}; };
// 현재 선택 자료 변경 이벤트 // 현재 선택 자료 변경 이벤트
@ -174,44 +183,8 @@
$("#tbody--${pageName}").setCurrentRow(key); $("#tbody--${pageName}").setCurrentRow(key);
}; };
// 선택(체크) 변경 이벤트
${pageName}Control.onSelectionChange = selected => {
let ${infoPrefix}List = ${pageName}Control.dataset;
let keys = selected.map(e => ${infoPrefix}List.getKey(e));
$("#tbody--${pageName} input[type='checkbox']").each(function() {
let checkbox = $(this);
checkbox.prop("checked", keys.includes(checkbox.val()));
});
};
// 개별총정보 dialog
${pageName}Control.getInfo = (crdnId) => {
if (typeof crdnId == "undefined" || crdnId == null || crdnId == "") return;
let params = {
callControlName : "${pageName}Control"
, callPurpose : "view"
, crdnId : crdnId
}
ajax.get({
url : ${pageName}Control.urls.getInfo
, data : params
, success : resp => {
dialog.open({
id : "totalInfoMainDialog"
, title : "개별총정보"
, content : resp
, size : "xxl"
});
}
});
}
/************************************************************************** /**************************************************************************
* * DataTables 이벤트
**************************************************************************/ **************************************************************************/
// 단속 ID // 단속 ID
getCrdnKeys = (status) => { getCrdnKeys = (status) => {
@ -223,7 +196,7 @@
} }
// DataTables에 click, dbclick 이벤트 // DataTables에 click, dbclick 이벤트
renderList${pageName} = () => { renderList${pageName} = (totalSize) => {
let ${infoPrefix}List = ${pageName}Control.dataset; let ${infoPrefix}List = ${pageName}Control.dataset;
let empty = ${infoPrefix}List.empty; let empty = ${infoPrefix}List.empty;
@ -233,16 +206,63 @@
document.getElementById("${infoPrefix}Row--${pageName}").innerHTML, <%-- from template#${infoPrefix}Row --%> document.getElementById("${infoPrefix}Row--${pageName}").innerHTML, <%-- from template#${infoPrefix}Row --%>
(str, dataItem) => str (str, dataItem) => str
.replace(/{onclick}/gi, "${pageName}Control.setCurrent('" + dataItem.getValue("SNDNG_DTL_ID") + "');") .replace(/{onclick}/gi, "${pageName}Control.setCurrent('" + dataItem.getValue("SNDNG_DTL_ID") + "');")
.replace(/{ondblclick}/gi, "${pageName}Control.getInfo('" + dataItem.getValue("CRDN_ID") + "');") .replace(/{ondblclick}/gi, "getTotalInfo${pageName}('" + dataItem.getValue("CRDN_ID") + "');")
); );
$("#tbody--${pageName}").html(trs.join()); let noMore = (totalSize == ${infoPrefix}List.length);
let initScroll = (${pageName}Control.query.pageNum < 2) && (${pageName}Control.untilPageNum == 0);
$("#table-responsive--${pageName}")[0].changeContent(trs.join(), initScroll, noMore);
if (${pageName}Control.untilPageNum != 0) {
${pageName}Control.query.fetchSize = ${pageName}Control.defaultFetchSize;
${pageName}Control.query.pageNum = ${pageName}Control.untilPageNum;
${pageName}Control.untilPageNum = 0;
}
// checkbox 체크 해제
$("th input[type='checkbox']").prop("checked", false); $("th input[type='checkbox']").prop("checked", false);
//보안모드 //보안모드
fn_securityModeToggle($("#securityMode--top").is(":checked")); fn_securityModeToggle($("#securityMode--top").is(":checked"));
} }
// DataTables에 스크롤이 맨 밑으로 이동했을 때 이벤트
scrollDataList${pageName} = () => {
${pageName}Control.tableRenderComplete = false; // dataTables 에 자료 추가 false
${pageName}Control.load(${pageName}Control.query.pageNum + 1);
}
/**************************************************************************
* 사용자 함수(function)
**************************************************************************/
// 개별총정보 dialog
getTotalInfo${pageName} = (crdnId) => {
if (typeof crdnId == "undefined" || crdnId == null || crdnId == "") return;
let params = {
callControlName : "${pageName}Control"
, callPurpose : "view"
, sggCd : $("#sggCd--${pageName}").val()
, taskSeCd : $("#taskSeCd--${pageName}").val()
, crdnId : crdnId
}
ajax.get({
url : wctx.url(params.taskSeCd + "/sprt/sprt02/010/main.do")
, data : params
, success : resp => {
dialog.open({
id : "totalInfoMainDialog"
, title : "개별총정보"
, content : resp
, size : "xxl"
});
}
});
}
// 세외수입 등록 // 세외수입 등록
createNxrpLink${pageName} = (params) => { createNxrpLink${pageName} = (params) => {
// 선택된 자료의 ID 추가 // 선택된 자료의 ID 추가
@ -310,6 +330,19 @@
}); });
} }
// 사전통지 출력
printAdvntce${pageName} = (params) => {
if (!params) return;
params.delYN = "N"; // 삭제 여부
// ajax.post({
// url : !create ? ${pageName}Control.urls.update : ${pageName}Control.urls.create
// , data : params
// , success : resp => ${pageName}Control.onSave(resp)
// });
}
// 종적결과 등록 // 종적결과 등록
createSndbk${pageName} = (params) => { createSndbk${pageName} = (params) => {
// 선택된 자료의 발송 상세 ID 추가 // 선택된 자료의 발송 상세 ID 추가
@ -344,34 +377,42 @@
}); });
} }
/************************************************************************** // 검색 자료 재조회
* 초기 셋팅 refreshList${pageName} = () => {
**************************************************************************/ ${pageName}Control.untilPageNum = ${pageName}Control.query.pageNum;
// 이벤트 ${pageName}Control.query.fetchSize = ${pageName}Control.defaultFetchSize * ${pageName}Control.query.pageNum;
setEvent${pageName} = () => {
// 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);
}
});
});
// DataTables width 변경 조정 ${pageName}Control.load(1);
$("#DataTables_Table_0--${pageName}").find("th").resizable( {handles : "e"} );
} }
/************************************************************************** /**************************************************************************
* 버튼 clickEvent * 버튼 clickEvent
**************************************************************************/ **************************************************************************/
//
fnList${pageName} = () => {
${pageName}Control.query = ${pageName}Query;
${pageName}Control.load(1);
}
// 엑셀 저장 // 엑셀 저장
fnExcel${pageName} = () => { fnExcel${pageName} = () => {
if (${pageName}Control.dataset.empty) {
dialog.alert({
content : "검색된 자료가 없습니다."
, onOK : () => { }
});
return;
}
// DataTables(그리드)
let cellDefs = getCellDefs($("#theadTr--${pageName} th").not(".dummy-th").not(":eq(0)")
, $($("#${infoPrefix}Row--${pageName}")[0].content).find("td").not(".dummy-td").not(":eq(0)"));
${pageName}Control.query.cellDefs = cellDefs;
${pageName}Control.download();
} }
// 세외수입 등록 // 세외수입 등록
@ -387,7 +428,7 @@
}); });
} }
// 매치정보 등록 // 매치정보 작성
fnUpdateNxrpMtchg${pageName} = () => { fnUpdateNxrpMtchg${pageName} = () => {
// validate 확인 // validate 확인
if (!customValidate($("#frmEdit--${pageName}").find("input, select, textarea"))) return; if (!customValidate($("#frmEdit--${pageName}").find("input, select, textarea"))) return;
@ -422,10 +463,18 @@
// 사전통지 출력 // 사전통지 출력
fnPrintAdvntce${pageName} = () => { fnPrintAdvntce${pageName} = () => {
// validate 확인
if (!customValidate($("#frmEdit--${pageName}").find("input, select, textarea"))) return;
dialog.alert({
content : ${pageName}Control.prefixName + " 정보를 출력하시겠습니까?"
, onOK : () => {
printAdvntce${pageName}(${pageName}Fields.get());
}
});
} }
// 반송(종적결과) 확인 // 반송 확인
fnCreateSndbk${pageName} = () => { fnCreateSndbk${pageName} = () => {
// validate 확인 // validate 확인
if (!customValidate($("#frmEdit--${pageName}").find("input, select, textarea"))) return; if (!customValidate($("#frmEdit--${pageName}").find("input, select, textarea"))) return;
@ -447,21 +496,83 @@
} }
/************************************************************************** /**************************************************************************
* script 진입 * 초기 셋팅
**************************************************************************/ **************************************************************************/
$(document).ready(function() { // 이벤트
// 기본 데이터 setEvent${pageName} = () => {
$("#sggCd--${pageName}").val("${sggCd}"); // 시군구 코드 // form-date 항목에서 키보드로 입력시 날짜 포맷팅 적용
$("#taskSeCd--${pageName}").val("${taskSeCd}"); // 업무 구분 코드 $("#frmEdit--${pageName}").find(".form-date").each(function() {
$(this).on("input", function() {
let value = this.value.replaceAll("-", "");
// 보안모드 if (value.length > 7) {
fn_securityModeToggle($("#securityMode--top").is(":checked")); 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);
}
});
});
// DataTables width 변경 조정
$("#DataTables_Table_0--${pageName}").find("th").resizable( {handles : "e"} );
// DataTables 스크롤 이벤트 생성
fnMakeScrollableTable($("#table-responsive--${pageName}")[0], scrollDataList${pageName});
}
// 화면 초기 설정
initForm${pageName} = () => {
// 화면 초기화
$("#frmEdit--${pageName}")[0].reset();
// dataset 초기화
${pageName}Control.dataset.clear();
}
// 기본 데이터 설정
setFormData${pageName} = () => {
let sggCd = ${pageName}Query.sggCd;
let taskSeCd = ${pageName}Query.taskSeCd;
$("#sggCd--${pageName}").val(sggCd); // 시군구 코드
$("#taskSeCd--${pageName}").val(taskSeCd); // 업무 구분 코드
// 검색 조건 설정
${pageName}Control.defaultFetchSize = ${pageName}Query.fetchSize;
${pageName}Control.query = ${pageName}Query;
// URL 설정
setURL${pageName}(taskSeCd);
}
// 업무구분에 따른 url 설정
setURL${pageName} = (taskSeCd) => {
${pageName}Control.urls.load = wctx.url(taskSeCd + ${pageName}PrefixUrl + "/080/list.do"); // 조회
}
/**************************************************************************
* script 진입
**************************************************************************/
$(document).ready(function() {
// 이벤트 설정 // 이벤트 설정
setEvent${pageName}(); setEvent${pageName}();
// Dataset 셋팅 - 화면이 열리면서 조회하는 경우 addData 하여 자료를 추가 // 화면 초기화
${pageName}Control.addData(${advntceSndngDtl}); initForm${pageName}();
//
${pageName}Control.setData({
${infoPrefix}List : ${advntceSndngDtlList}
, ${infoPrefix}Start : ${advntceSndngDtlStart}
, ${infoPrefix}Fetch : ${advntceSndngDtlFetch}
, ${infoPrefix}Total : ${advntceSndngDtlTotal}
});
// 기본 데이터 설정
setFormData${pageName}();
// 보안모드
fn_securityModeToggle($("#securityMode--top").is(":checked"));
}); });
</script> </script>

Loading…
Cancel
Save