커밋 테스트
parent
14536865b4
commit
2094ee47e4
@ -1,29 +0,0 @@
|
||||
package cokr.xit.fims;
|
||||
|
||||
import org.springframework.boot.Banner;
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.autoconfigure.ImportAutoConfiguration;
|
||||
import org.springframework.boot.builder.SpringApplicationBuilder;
|
||||
import org.springframework.context.annotation.ComponentScan;
|
||||
import org.springframework.context.annotation.ImportResource;
|
||||
|
||||
import cokr.xit.base.ServletCustomizer;
|
||||
import cokr.xit.base.boot.XitBaseApplication;
|
||||
import cokr.xit.fims.task.TaskMvcConfig;
|
||||
|
||||
@ImportAutoConfiguration({ServletCustomizer.class, TaskMvcConfig.class})
|
||||
@ImportResource("classpath:spring/context-*.xml")
|
||||
@ComponentScan(basePackageClasses = cokr.xit.applib.HttpStatusCodeExceptionControllerAdvice.class)
|
||||
public class FimsApplication extends XitBaseApplication {
|
||||
|
||||
public static void main(String[] args) {
|
||||
|
||||
final SpringApplicationBuilder applicationBuilder = new SpringApplicationBuilder(FimsApplication.class);
|
||||
final SpringApplication application = applicationBuilder.build();
|
||||
application.setBannerMode(Banner.Mode.OFF);
|
||||
application.setLogStartupInfo(false);
|
||||
|
||||
application.run(args);
|
||||
}
|
||||
|
||||
}
|
||||
@ -1,14 +0,0 @@
|
||||
package cokr.xit.fims;
|
||||
|
||||
import org.springframework.boot.builder.SpringApplicationBuilder;
|
||||
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
|
||||
|
||||
|
||||
|
||||
public class ServletInitializer extends SpringBootServletInitializer {
|
||||
|
||||
@Override
|
||||
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
|
||||
return application.sources(FimsApplication.class);
|
||||
}
|
||||
}
|
||||
@ -1,73 +0,0 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
<form id="actioninfoPrefix-form">
|
||||
<div class="row g-3">
|
||||
<div class="col-md-12">
|
||||
<div class="row">
|
||||
<label class="col-sm-2 col-form-label text-sm-end" for="id"
|
||||
>아이디</label
|
||||
>
|
||||
<div class="col-sm-10">
|
||||
<input name="id" type="text" required data-map="GRP_ID" maxlength="50" class="form-control" placeholder="prefixName 아이디" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-12">
|
||||
<div class="row">
|
||||
<label class="col-sm-2 col-form-label text-sm-end" for="name"
|
||||
>이름</label
|
||||
>
|
||||
<div class="col-sm-10">
|
||||
<input name="name" type="text" required data-map="GRP_NM" maxlength="60" class="form-control" placeholder="prefixName 이름" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-12">
|
||||
<div class="row">
|
||||
<label class="col-sm-2 col-form-label text-sm-end" for="description"
|
||||
>설명</label
|
||||
>
|
||||
<div class="col-sm-10">
|
||||
<input name="description" type="text" data-map="DSCRP" maxlength="200" class="form-control dob-picker" placeholder="prefixName 설명"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mt-4 justify-content-end">
|
||||
<div class="col-sm-12 text-end">
|
||||
<button onclick="saveinfoPrefix();" type="button" class="btn btn-primary">저장</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<script type="text/javascript">
|
||||
|
||||
var actioninfoPrefixFields = new FormFields("#actioninfoPrefix-form");
|
||||
|
||||
actioninfoPrefixControl.groups.setInfo = obj => {
|
||||
actioninfoPrefixFields.set(actioninfoPrefixControl, obj);
|
||||
let create = isEmpty(obj.data.GRP_ID);
|
||||
$("input[name='id']").prop("readonly", !create);
|
||||
$("#actioninfoPrefix-form input").onEnterPress(saveinfoPrefix);
|
||||
|
||||
document.querySelector("input[name='" + (create ? "id" : "name") + "']").focus();
|
||||
}
|
||||
|
||||
actioninfoPrefixControl.groups.onModify = (changed) => {
|
||||
if (["GRP_NM"].filter(e => changed.includes(e)).length < 1)
|
||||
return;
|
||||
|
||||
renderactioninfoPrefixList();
|
||||
actioninfoPrefixControl.groups.dataset.setState();
|
||||
}
|
||||
|
||||
function saveinfoPrefix() {
|
||||
if (!$("#actioninfoPrefix-form input").validInputs()) return;
|
||||
|
||||
dialog.alert({
|
||||
content:"현재 prefixName 정보를 저장하시겠습니까?",
|
||||
onOK:() => {
|
||||
actioninfoPrefixControl.groups.save(actioninfoPrefixFields.get());
|
||||
}
|
||||
});
|
||||
}
|
||||
//# sourceURL=actionGroup-info.jsp
|
||||
</script>
|
||||
@ -1,229 +0,0 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
<style id="actionGroupMainCss">
|
||||
#actionGroupMainCss+div tr[data-key='userAction'] > td:nth-child(n+2):nth-child(-n+3),
|
||||
#actionGroupMainCss+div tr[data-key='anonymousAction'] > td:nth-child(n+2):nth-child(-n+3) {
|
||||
color: red;
|
||||
}
|
||||
</style>
|
||||
<c:set var="prefixName" scope="request">기능 그룹</c:set>
|
||||
<!-- Page Body -->
|
||||
<div class="d-flex flex-column flex-grow-1">
|
||||
<div id="DataTables_Table_0_wrapper" class="dataTables_wrapper dt-bootstrap5 no-footer">
|
||||
|
||||
<div class="d-flex flex-row justify-content-evenly">
|
||||
<div style="width:49%;">
|
||||
<h5 class="mt-3">기능 그룹</h5>
|
||||
<div class="d-flex flex-row justify-content-between p-3">
|
||||
<div>
|
||||
<div class="input-group" id="${infoPrefix}-query">
|
||||
<select id="${infoPrefix}by" onchange="document.getElementById('${infoPrefix}term').focus();" aria-controls="DataTables_Table_0" class="form-select">
|
||||
<option value="${infoPrefix}Name">이름</option>
|
||||
<option value="${infoPrefix}ID">아이디</option>
|
||||
</select>
|
||||
<input id="${infoPrefix}term" autofocus type="text" placeholder="조회 조건을 입력하십시오." class="form-control">
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<button onclick="searchaction${infoPrefix}s();" class="btn btn-primary">찾기</button>
|
||||
<button onclick="action${infoPrefix}Control.groups.newInfo();" class="btn btn-primary">+ 추가</button>
|
||||
<button id="btnRemoveaction${infoPrefix}s" onclick="removeaction${infoPrefix}s();" class="btn btn-primary">- 제거</button>
|
||||
</div>
|
||||
</div>
|
||||
<table class="datatables-ajax table table-bordered dataTable no-footer" id="DataTables_Table_0" aria-describedby="DataTables_Table_0_info">
|
||||
<thead id="action${infoPrefix}Thead">
|
||||
<tr><th tabindex="0" aria-controls="DataTables_Table_0" rowspan="1" colspan="1" style="text-align:center;"><input onchange="action${infoPrefix}Control.groups.select(this.checked);" type="checkbox" class="form-check-input"></th>
|
||||
<th class="sorting sorting_asc" tabindex="0" aria-controls="DataTables_Table_0" rowspan="1" colspan="1" aria-sort="ascending" aria-label="Full name: activate to sort column descending" style="">아이디</th>
|
||||
<th class="sorting" tabindex="0" aria-controls="DataTables_Table_0" rowspan="1" colspan="1" aria-label="Email: activate to sort column ascending" style="">이름</th>
|
||||
<th class="sorting" tabindex="0" aria-controls="DataTables_Table_0" rowspan="1" colspan="1" aria-label="Start date: activate to sort column ascending" style="">등록일자</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="action${infoPrefix}List">
|
||||
</tbody>
|
||||
<template id="action${infoPrefix}Row">
|
||||
<tr data-key="{GRP_ID}">
|
||||
<td style="text-align:center;"><input value="{GRP_ID}" onchange="action${infoPrefix}Control.groups.select('{GRP_ID}', this.checked);" type="checkbox" class="form-check-input"></td>
|
||||
<td onclick="action${infoPrefix}Control.groups.setCurrent('{GRP_ID}')" ondblclick="action${infoPrefix}Control.groups.getInfo({})">{GRP_ID}</td>
|
||||
<td onclick="action${infoPrefix}Control.groups.setCurrent('{GRP_ID}')" ondblclick="action${infoPrefix}Control.groups.getInfo({})">{GRP_NM}</td>
|
||||
<td onclick="action${infoPrefix}Control.groups.setCurrent('{GRP_ID}')" ondblclick="action${infoPrefix}Control.groups.getInfo({})">{REG_DT}</td>
|
||||
</tr>
|
||||
</template>
|
||||
<template id="action${infoPrefix}NotFound">
|
||||
<tr class="odd">
|
||||
<td valign="top" colspan="4" class="dataTables_empty text-center">${prefixName} 정보를 찾지 못했습니다.</td>
|
||||
</tr>
|
||||
</template>
|
||||
</table>
|
||||
<div class="d-flex flex-row p-3 justify-content-between">
|
||||
<label id="action${infoPrefix}PagingInfo" class="dataTables_info" role="status" aria-live="polite"></label>
|
||||
<ul id="action${infoPrefix}Paging" class="pagination pagination-primary">
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div style="width:49%;">
|
||||
<h5 class="mt-3">기능 URL</h5>
|
||||
<div class="d-flex flex-row justify-content-end p-3">
|
||||
<div>
|
||||
<button id="btnAddActions" onclick="action${infoPrefix}Control.addActions();" class="btn btn-primary">+ 추가</button>
|
||||
<button id="btnRemoveActions" onclick="removeActions();" class="btn btn-primary">- 제거</button>
|
||||
</div>
|
||||
</div>
|
||||
<table class="datatables-ajax table table-bordered dataTable no-footer" id="DataTables_Table_0" aria-describedby="DataTables_Table_0_info">
|
||||
<thead id="actionThead">
|
||||
<tr><th tabindex="0" aria-controls="DataTables_Table_0" rowspan="1" colspan="1" style="text-align:center;"><input id="actionToggler" onchange="action${infoPrefix}Control.actions.select(this.checked);" type="checkbox" class="form-check-input"></th>
|
||||
<th class="sorting" tabindex="0" aria-controls="DataTables_Table_0" rowspan="1" colspan="1" aria-label="Email: activate to sort column ascending" style="">기능 URL</th>
|
||||
<th class="sorting" tabindex="0" aria-controls="DataTables_Table_0" rowspan="1" colspan="1" aria-label="Start date: activate to sort column ascending" style="">등록일자</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="actionList">
|
||||
</tbody>
|
||||
<template id="actionRow">
|
||||
<tr data-key="{GRP_ID}-{ACTION}">
|
||||
<td style="text-align:center;"><input value="{GRP_ID}-{ACTION}" onchange="action${infoPrefix}Control.actions.select('{GRP_ID}-{ACTION}', this.checked);" type="checkbox" class="form-check-input"></td>
|
||||
<td onclick="action${infoPrefix}Control.actions.setCurrent('{GRP_ID}-{ACTION}')">{ACTION}</td>
|
||||
<td onclick="action${infoPrefix}Control.actions.setCurrent('{GRP_ID}-{ACTION}">{REG_DT}</td>
|
||||
</tr>
|
||||
</template>
|
||||
<template id="actionNotFound">
|
||||
<tr class="odd">
|
||||
<td valign="top" colspan="3" class="dataTables_empty text-center">기능 URL 정보를 찾지 못했습니다.</td>
|
||||
</tr>
|
||||
</template>
|
||||
</table>
|
||||
<div class="d-flex flex-row p-3 justify-content-between">
|
||||
<label id="actionPagingInfo" class="dataTables_info" role="status" aria-live="polite"></label>
|
||||
<ul id="actionPaging" class="pagination pagination-primary">
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!--/ Page Body -->
|
||||
<script >
|
||||
var action${infoPrefix}Control = new ActionGroupControl();
|
||||
|
||||
function searchaction${infoPrefix}s() {
|
||||
action${infoPrefix}Control.groups.query = {
|
||||
by:$("#${infoPrefix}-query [name='by']").val(),
|
||||
term:$("#${infoPrefix}-query [name='term']").val()
|
||||
};
|
||||
action${infoPrefix}Control.groups.query.fetchAll = true;
|
||||
action${infoPrefix}Control.groups.load(1);
|
||||
}
|
||||
|
||||
function removeaction${infoPrefix}s() {
|
||||
dialog.alert({
|
||||
content:"선택한 ${prefixName} 정보를 제거하시겠습니까?",
|
||||
onOK:() => {
|
||||
action${infoPrefix}Control.groups.remove();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function removeActions() {
|
||||
dialog.alert({
|
||||
content:"선택한 기능 URL을 삭제하시겠습니까?",
|
||||
onOK:() => {
|
||||
action${infoPrefix}Control.removeActions();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function renderaction${infoPrefix}List() {
|
||||
let ${infoPrefix}List = action${infoPrefix}Control.groups.dataset;
|
||||
let empty = action${infoPrefix}List.empty;
|
||||
|
||||
let trs = empty ?
|
||||
[document.getElementById("action${infoPrefix}NotFound").innerHTML] : <%-- from template#action${infoPrefix}NotFound --%>
|
||||
${infoPrefix}List.inStrings(document.getElementById("action${infoPrefix}Row").innerHTML); <%-- from template#action${infoPrefix}Row --%>
|
||||
$("#action${infoPrefix}List").html(trs.join());
|
||||
$("#action${infoPrefix}Thead").find("th input[type='checkbox']").prop("checked", false);
|
||||
$("#actionThead").find("th input[type='checkbox']").prop("checked", false);
|
||||
}
|
||||
|
||||
action${infoPrefix}Control.onGroupListChange = obj => {
|
||||
renderaction${infoPrefix}List();
|
||||
|
||||
$("#action${infoPrefix}Paging").setPaging({
|
||||
list:action${infoPrefix}Control.groups.dataset,
|
||||
prefix:action${infoPrefix}Control.groups.prefix,
|
||||
start:obj.${infoPrefix}Start,
|
||||
totalSize:obj.${infoPrefix}Total,
|
||||
fetchSize:obj.${infoPrefix}Fetch,
|
||||
func:"action${infoPrefix}Control.groups.load({index})"
|
||||
});
|
||||
};
|
||||
|
||||
action${infoPrefix}Control.onCurrentGroupChange = item => {
|
||||
$("#btnAddActions").prop("disabled", !item);
|
||||
if (!item) return;
|
||||
|
||||
let key = item.data.GRP_ID;
|
||||
$("#action${infoPrefix}List").setCurrentRow(key);
|
||||
};
|
||||
|
||||
action${infoPrefix}Control.onGroupSelect = selected => {
|
||||
let ${infoPrefix}List = action${infoPrefix}Control.groups.dataset;
|
||||
let keys = selected.map(e => ${infoPrefix}List.getKey(e));
|
||||
$("#action${infoPrefix}List input[type='checkbox']").each(function() {
|
||||
let checkbox = $(this);
|
||||
checkbox.prop("checked", keys.includes(checkbox.val()));
|
||||
});
|
||||
|
||||
$("#btnRemoveaction${infoPrefix}s").prop("disabled", keys.length < 1);
|
||||
};
|
||||
|
||||
|
||||
action${infoPrefix}Control.onActionListChange = obj => {
|
||||
let ${infoPrefix}List = action${infoPrefix}Control.actions.dataset;
|
||||
let empty = ${infoPrefix}List.empty;
|
||||
|
||||
let trs = empty ?
|
||||
[document.getElementById("actionNotFound").innerHTML] : <%-- from template#${infoPrefix}NotFound --%>
|
||||
${infoPrefix}List.inStrings(document.getElementById("actionRow").innerHTML); <%-- from template#${infoPrefix}Row --%>
|
||||
$("#actionList").html(trs.join());
|
||||
$("#actionToggler").prop("checked", false);
|
||||
|
||||
$("#actionPaging").setPaging({
|
||||
list:action${infoPrefix}Control.actions.dataset,
|
||||
prefix:action${infoPrefix}Control.actions.prefix,
|
||||
start:obj.actionStart,
|
||||
totalSize:obj.actionTotal,
|
||||
fetchSize:obj.actionFetch,
|
||||
func:"action${infoPrefix}Control.actions.load({index})"
|
||||
});
|
||||
};
|
||||
|
||||
action${infoPrefix}Control.onCurrentActionChange = item => {
|
||||
if (!item) return;
|
||||
|
||||
let data = item.data;
|
||||
let key = data.GRP_ID + "-" + data.ACTION;
|
||||
$("#actionList").setCurrentRow(key);
|
||||
};
|
||||
|
||||
action${infoPrefix}Control.onActionSelect = selected => {
|
||||
let ${infoPrefix}List = action${infoPrefix}Control.actions.dataset;
|
||||
let keys = selected.map(e => ${infoPrefix}List.getKey(e));
|
||||
$("#actionList input[type='checkbox']").each(function() {
|
||||
let checkbox = $(this);
|
||||
checkbox.prop("checked", keys.includes(checkbox.val()));
|
||||
});
|
||||
|
||||
$("#btnRemoveActions").prop("disabled", keys.length < 1);
|
||||
};
|
||||
|
||||
$("#${infoPrefix}term").onEnterPress(searchaction${infoPrefix}s);
|
||||
|
||||
$(function(){
|
||||
${onload}
|
||||
action${infoPrefix}Control.groups.setData({
|
||||
${infoPrefix}List:${groupList},
|
||||
${infoPrefix}Start:${groupStart},
|
||||
${infoPrefix}Fetch:${groupFetch},
|
||||
${infoPrefix}Total:${groupTotal}
|
||||
});
|
||||
});
|
||||
//# sourceURL=actionGroup-main.jsp
|
||||
</script>
|
||||
@ -1,127 +0,0 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
<style id="selectActionGroupCss">
|
||||
#selectActionGroupCss+div tr[data-key='userAction'] > td:nth-child(n+2):nth-child(-n+3),
|
||||
#selectActionGroupCss+div tr[data-key='anonymousAction'] > td:nth-child(n+2):nth-child(-n+3) {
|
||||
color: red;
|
||||
}
|
||||
</style>
|
||||
<c:set var="prefixName" scope="request">기능 그룹</c:set>
|
||||
<!-- Page Body -->
|
||||
<div class="card">
|
||||
<div class="card-datatable text-nowrap">
|
||||
<div id="DataTables_Table_0_wrapper" class="dataTables_wrapper dt-bootstrap5 no-footer">
|
||||
<div class="d-flex flex-row justify-content-between p-3">
|
||||
<div>
|
||||
<div class="input-group" id="DataTables_Table_0_length">
|
||||
<select id="_actionGroupBy" onchange="document.getElementById('_actionGroupTerm').focus();" aria-controls="DataTables_Table_0" class="form-select">
|
||||
<option value="${infoPrefix}Name">이름</option>
|
||||
<option value="${infoPrefix}ID">아이디</option>
|
||||
</select>
|
||||
<input id="_actionGroupTerm" autofocus type="text" placeholder="조회 조건을 입력하십시오." class="form-control">
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<button onclick="_search${infoPrefix}s();" class="btn btn-primary">찾기</button>
|
||||
</div>
|
||||
</div>
|
||||
<table class="datatables-ajax table table-bordered dataTable no-footer" id="DataTables_Table_0" aria-describedby="DataTables_Table_0_info">
|
||||
<thead id="_action${infoPrefix}Thead">
|
||||
<tr><th tabindex="0" aria-controls="DataTables_Table_0" rowspan="1" colspan="1" style="text-align:center;"><input onchange="${infoPrefix}Control.groups.select(this.checked);" type="checkbox" class="form-check-input"></th>
|
||||
<th class="sorting sorting_asc" tabindex="0" aria-controls="DataTables_Table_0" rowspan="1" colspan="1" aria-sort="ascending" aria-label="Full name: activate to sort column descending" style="">아이디</th>
|
||||
<th class="sorting" tabindex="0" aria-controls="DataTables_Table_0" rowspan="1" colspan="1" aria-label="Email: activate to sort column ascending" style="">이름</th>
|
||||
<th class="sorting" tabindex="0" aria-controls="DataTables_Table_0" rowspan="1" colspan="1" aria-label="Start date: activate to sort column ascending" style="">등록일자</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="_action${infoPrefix}List">
|
||||
</tbody>
|
||||
<template id="_action${infoPrefix}Row">
|
||||
<tr data-key="{GRP_ID}">
|
||||
<td style="text-align:center;"><input value="{GRP_ID}" onchange="${infoPrefix}Control.groups.select('{GRP_ID}', this.checked);" type="checkbox" class="form-check-input"></td>
|
||||
<td onclick="${infoPrefix}Control.groups.setCurrent('{GRP_ID}')" ondblclick="${infoPrefix}Control.groups.getInfo({})">{GRP_ID}</td>
|
||||
<td onclick="${infoPrefix}Control.groups.setCurrent('{GRP_ID}')" ondblclick="${infoPrefix}Control.groups.getInfo({})">{GRP_NM}</td>
|
||||
<td onclick="${infoPrefix}Control.groups.setCurrent('{GRP_ID}')" ondblclick="${infoPrefix}Control.groups.getInfo({})">{REG_DT}</td>
|
||||
</tr>
|
||||
</template>
|
||||
<template id="_action${infoPrefix}NotFound">
|
||||
<tr class="odd">
|
||||
<td valign="top" colspan="4" class="dataTables_empty text-center">${prefixName} 정보를 찾지 못했습니다.</td>
|
||||
</tr>
|
||||
</template>
|
||||
</table>
|
||||
<div class="d-flex flex-row p-3 justify-content-between">
|
||||
<label id="_action${infoPrefix}PagingInfo" class="dataTables_info" role="status" aria-live="polite"></label>
|
||||
<ul id="_action${infoPrefix}Paging" class="pagination pagination-primary">
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!--/ Page Body -->
|
||||
<script >
|
||||
var ${infoPrefix}Control = new ActionGroupControl(false);
|
||||
|
||||
function getSelectedActionGroup() {
|
||||
let selected = ${infoPrefix}Control.groups.dataset.getKeys("selected");
|
||||
if (selected.length < 1)
|
||||
return dialog.alert("기능그룹을 선택하십시오.");
|
||||
else
|
||||
return selected;
|
||||
}
|
||||
|
||||
function _search${infoPrefix}s() {
|
||||
${infoPrefix}Control.groups.query = {
|
||||
by:$("#_actionGroupBy").val(),
|
||||
term:$("#_actionGroupTerm").val()
|
||||
};
|
||||
${infoPrefix}Control.groups.load(1);
|
||||
}
|
||||
|
||||
${infoPrefix}Control.onGroupListChange = obj => {
|
||||
let ${infoPrefix}List = ${infoPrefix}Control.groups.dataset;
|
||||
let empty = ${infoPrefix}List.empty;
|
||||
|
||||
let trs = empty ?
|
||||
[document.getElementById("_action${infoPrefix}NotFound").innerHTML] : <%-- from template#_action${infoPrefix}NotFound --%>
|
||||
${infoPrefix}List.inStrings(document.getElementById("_action${infoPrefix}Row").innerHTML); <%-- from template#_action${infoPrefix}Row --%>
|
||||
$("#_action${infoPrefix}List").html(trs.join());
|
||||
$("#_action${infoPrefix}Thead").find("th input[type='checkbox']").prop("checked", false);
|
||||
|
||||
$("#_action${infoPrefix}Paging").setPaging({
|
||||
list:${infoPrefix}Control.groups.dataset,
|
||||
prefix:${infoPrefix}Control.groups.prefix,
|
||||
start:obj.${infoPrefix}Start,
|
||||
totalSize:obj.${infoPrefix}Total,
|
||||
fetchSize:obj.${infoPrefix}Fetch,
|
||||
func:"${infoPrefix}Control.groups.load({index})"
|
||||
});
|
||||
};
|
||||
|
||||
${infoPrefix}Control.onCurrentGroupChange = item => {
|
||||
if (!item) return;
|
||||
|
||||
let key = item.data.GRP_ID;
|
||||
$("#_action${infoPrefix}List").setCurrentRow(key);
|
||||
};
|
||||
|
||||
${infoPrefix}Control.onGroupSelect = selected => {
|
||||
let ${infoPrefix}List = ${infoPrefix}Control.groups.dataset;
|
||||
let keys = selected.map(e => ${infoPrefix}List.getKey(e));
|
||||
$("#_action${infoPrefix}List input[type='checkbox']").each(function() {
|
||||
let checkbox = $(this);
|
||||
checkbox.prop("checked", keys.includes(checkbox.val()));
|
||||
});
|
||||
};
|
||||
|
||||
$("#_actionGroupTerm").onEnterPress(_search${infoPrefix}s);
|
||||
|
||||
$(function(){
|
||||
${onload}
|
||||
${infoPrefix}Control.groups.setData({
|
||||
${infoPrefix}List:${groupList},
|
||||
${infoPrefix}Start:${groupStart},
|
||||
${infoPrefix}Fetch:${groupFetch},
|
||||
${infoPrefix}Total:${groupTotal}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
@ -1,91 +0,0 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
<div class="d-flex flex-row justify-content-end p-3">
|
||||
<div>
|
||||
<button id="btnAddAuthActions" onclick="${infoPrefix}Control.addActions();" class="btn btn-primary">+ 추가</button>
|
||||
<button id="btnRemoveAuthActions" onclick="removeAuthActions();" class="btn btn-primary">- 제거</button>
|
||||
</div>
|
||||
</div>
|
||||
<table class="datatables-ajax table table-bordered dataTable no-footer" id="DataTables_Table_0" aria-describedby="DataTables_Table_0_info">
|
||||
<thead>
|
||||
<tr><th tabindex="0" aria-controls="DataTables_Table_0" rowspan="1" colspan="1" style="text-align:center;"><input id="authActionToggler" onchange="${infoPrefix}Control.actions.select(this.checked);" type="checkbox" class="form-check-input"></th>
|
||||
<th class="sorting" tabindex="0" aria-controls="DataTables_Table_0" rowspan="1" colspan="1" aria-label="Email: activate to sort column ascending" style="">기능 그룹</th>
|
||||
<th class="sorting" tabindex="0" aria-controls="DataTables_Table_0" rowspan="1" colspan="1" aria-label="Start date: activate to sort column ascending" style="">등록일자</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="authActionList">
|
||||
</tbody>
|
||||
<template id="authActionRow">
|
||||
<tr data-key="{AUTH_ID}-{GRP_ID}">
|
||||
<td style="text-align:center;"><input value="{AUTH_ID}-{GRP_ID}" onchange="${infoPrefix}Control.actions.select('{AUTH_ID}-{GRP_ID}', this.checked);" type="checkbox" class="form-check-input"></td>
|
||||
<td onclick="${infoPrefix}Control.actions.setCurrent('{AUTH_ID}-{GRP_ID}')">{GRP_ID}</td>
|
||||
<td onclick="${infoPrefix}Control.actions.setCurrent('{AUTH_ID}-{GRP_ID}">{REG_DT}</td>
|
||||
</tr>
|
||||
</template>
|
||||
<template id="authActionNotFound">
|
||||
<tr class="odd">
|
||||
<td valign="top" colspan="3" class="dataTables_empty text-center">기능 그룹 정보를 찾지 못했습니다.</td>
|
||||
</tr>
|
||||
</template>
|
||||
<template id="adminActions">
|
||||
<tr class="odd">
|
||||
<td valign="top" colspan="3" class="dataTables_empty text-center">{authority}는 모든 기능을 사용할 수 있습니다.</td>
|
||||
</tr>
|
||||
</template>
|
||||
</table>
|
||||
<div class="d-flex flex-row p-3 justify-content-between">
|
||||
<label id="authActionPagingInfo" class="dataTables_info" role="status" aria-live="polite"></label>
|
||||
<ul id="authActionPaging" class="pagination pagination-primary">
|
||||
</ul>
|
||||
</div>
|
||||
<c:set var="actionGroupFunc" scope="request">function removeAuthActions() {
|
||||
dialog.alert({
|
||||
content:"선택한 기능그룹을 삭제하시겠습니까?",
|
||||
onOK:() => {
|
||||
${infoPrefix}Control.removeActions();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
${infoPrefix}Control.onActionListChange = obj => {
|
||||
let authority = ${infoPrefix}Control.authorities.getCurrent();
|
||||
authority = authority ? authority.AUTH_NM : "";
|
||||
let ${infoPrefix}List = ${infoPrefix}Control.actions.dataset;
|
||||
let empty = ${infoPrefix}List.empty;
|
||||
|
||||
let trs =
|
||||
${infoPrefix}Control.authorities.isAdmin() ? [document.getElementById("adminActions").innerHTML.replace(/{authority}/, authority)] :
|
||||
empty ?
|
||||
[document.getElementById("authActionNotFound").innerHTML] : <%-- from template#${infoPrefix}NotFound --%>
|
||||
${infoPrefix}List.inStrings(document.getElementById("authActionRow").innerHTML); <%-- from template#${infoPrefix}Row --%>
|
||||
$("#authActionList").html(trs.join());
|
||||
$("#authActionToggler").prop("checked", false);
|
||||
|
||||
$("#authActionPaging").setPaging({
|
||||
list:${infoPrefix}Control.actions.dataset,
|
||||
prefix:${infoPrefix}Control.actions.prefix,
|
||||
start:obj.actionStart,
|
||||
totalSize:obj.actionTotal,
|
||||
fetchSize:obj.actionFetch,
|
||||
func:"${infoPrefix}Control.getActions({index})"
|
||||
});
|
||||
};
|
||||
|
||||
${infoPrefix}Control.onCurrentActionChange = item => {
|
||||
if (!item) return;
|
||||
|
||||
let data = item.data;
|
||||
let key = data.AUTH_ID + "-" + data.GRP_ID;
|
||||
$("#authActionList").setCurrentRow(key);
|
||||
};
|
||||
|
||||
${infoPrefix}Control.onActionSelect = selected => {
|
||||
let ${infoPrefix}List = ${infoPrefix}Control.actions.dataset;
|
||||
let keys = selected.map(e => ${infoPrefix}List.getKey(e));
|
||||
$("#authActionList input[type='checkbox']").each(function() {
|
||||
let checkbox = $(this);
|
||||
checkbox.prop("checked", keys.includes(checkbox.val()));
|
||||
});
|
||||
|
||||
$("#btnRemoveAuthActions").prop("disabled", keys.length < 1);
|
||||
};</c:set>
|
||||
@ -1,75 +0,0 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
<form id="infoPrefix-form">
|
||||
<div class="row g-3">
|
||||
<div class="col-md-12">
|
||||
<div class="row">
|
||||
<label class="col-sm-2 col-form-label text-sm-end" for="id"
|
||||
>아이디</label
|
||||
>
|
||||
<div class="col-sm-10">
|
||||
<input name="id" type="text" required data-map="AUTH_ID" maxlength="50" class="form-control" placeholder="prefixName 아이디" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-12">
|
||||
<div class="row">
|
||||
<label class="col-sm-2 col-form-label text-sm-end" for="name"
|
||||
>이름</label
|
||||
>
|
||||
<div class="col-sm-10">
|
||||
<input name="name" type="text" required data-map="AUTH_NM" maxlength="60" class="form-control" placeholder="prefixName 이름" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-12">
|
||||
<div class="row">
|
||||
<label class="col-sm-2 col-form-label text-sm-end" for="description"
|
||||
>설명</label
|
||||
>
|
||||
<div class="col-sm-10">
|
||||
<input name="description" type="text" data-map="DSCRP" maxlength="200" class="form-control dob-picker" placeholder="prefixName 설명"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mt-4 justify-content-end">
|
||||
<div class="col-sm-12 text-end">
|
||||
<button id="btnSaveAuth" onclick="saveinfoPrefix();" type="button" class="btn btn-primary">저장</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<script type="text/javascript">
|
||||
|
||||
var infoPrefixFields = new FormFields("#infoPrefix-form");
|
||||
|
||||
infoPrefixControl.authorities.setInfo = obj => {
|
||||
infoPrefixFields.set(infoPrefixControl, obj);
|
||||
let info = obj.data;
|
||||
let create = isEmpty(info.AUTH_ID);
|
||||
$("input[name='id']").prop("readonly", !create);
|
||||
$("#infoPrefix-form input").onEnterPress(saveinfoPrefix);
|
||||
|
||||
$("input[name='" + (create ? "id" : "name") + "']").focus();
|
||||
$("#btnSaveAuth").prop("disabled", infoPrefixControl.authorities.isBuiltIn(info));
|
||||
}
|
||||
|
||||
infoPrefixControl.authorities.onModify = (changed) => {
|
||||
if (["AUTH_NM"].filter(e => changed.includes(e)).length < 1)
|
||||
return;
|
||||
|
||||
renderinfoPrefixList();
|
||||
infoPrefixControl.authorities.dataset.setState();
|
||||
}
|
||||
|
||||
function saveinfoPrefix() {
|
||||
if (!$("#infoPrefix-form input").validInputs()) return;
|
||||
|
||||
dialog.alert({
|
||||
content:"현재 prefixName 정보를 저장하시겠습니까?",
|
||||
onOK:() => {
|
||||
infoPrefixControl.authorities.save(infoPrefixFields.get());
|
||||
}
|
||||
});
|
||||
}
|
||||
//# sourceURL=actionGroup-info.jsp
|
||||
</script>
|
||||
@ -1,187 +0,0 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
<style id="authorityMainCss">
|
||||
#authorityMainCss+div tr[data-key='ROLE_ADMIN'] > td:nth-child(n+2):nth-child(-n+3),
|
||||
#authorityMainCss+div tr[data-key='ROLE_USER'] > td:nth-child(n+2):nth-child(-n+3),
|
||||
#authorityMainCss+div tr[data-key='ROLE_ANONYMOUS'] > td:nth-child(n+2):nth-child(-n+3) {
|
||||
color: red;
|
||||
}
|
||||
</style>
|
||||
<c:set var="prefixName" scope="request">권한</c:set>
|
||||
<!-- Page Body -->
|
||||
<div class="d-flex flex-column flex-grow-1">
|
||||
<div id="DataTables_Table_0_wrapper" class="dataTables_wrapper dt-bootstrap5 no-footer">
|
||||
|
||||
<div class="d-flex flex-row justify-content-evenly">
|
||||
<div style="width:49%;">
|
||||
<h5 class="mt-3">권한</h5>
|
||||
<div class="d-flex flex-row justify-content-between p-3">
|
||||
<div>
|
||||
<div class="input-group" id="${infoPrefix}-query">
|
||||
<select id="${infoPrefix}by" name="by" onchange="document.getElementById('${infoPrefix}term').focus();" aria-controls="DataTables_Table_0" class="form-select">
|
||||
<option value="authName">이름</option>
|
||||
<option value="authID">아이디</option>
|
||||
</select>
|
||||
<input id="${infoPrefix}term" name="term" autofocus type="text" placeholder="조회 조건을 입력하십시오." class="form-control">
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<button onclick="search${infoPrefix}s();" class="btn btn-primary">찾기</button>
|
||||
<button onclick="${infoPrefix}Control.authorities.newInfo();" class="btn btn-primary">+ 추가</button>
|
||||
<button id="btnRemove${infoPrefix}s" onclick="remove${infoPrefix}s();" class="btn btn-primary">- 제거</button>
|
||||
</div>
|
||||
</div>
|
||||
<table class="datatables-ajax table table-bordered dataTable no-footer" id="DataTables_Table_0" aria-describedby="DataTables_Table_0_info">
|
||||
<thead id="${infoPrefix}Thead">
|
||||
<tr><th tabindex="0" aria-controls="DataTables_Table_0" rowspan="1" colspan="1" style="text-align:center;"><input onchange="${infoPrefix}Control.authorities.select(this.checked);" type="checkbox" class="form-check-input"></th>
|
||||
<th class="sorting sorting_asc" tabindex="0" aria-controls="DataTables_Table_0" rowspan="1" colspan="1" aria-sort="ascending" aria-label="Full name: activate to sort column descending" style="">아이디</th>
|
||||
<th class="sorting" tabindex="0" aria-controls="DataTables_Table_0" rowspan="1" colspan="1" aria-label="Email: activate to sort column ascending" style="">이름</th>
|
||||
<th class="sorting" tabindex="0" aria-controls="DataTables_Table_0" rowspan="1" colspan="1" aria-label="Start date: activate to sort column ascending" style="">등록일자</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="${infoPrefix}List">
|
||||
</tbody>
|
||||
<template id="${infoPrefix}Row">
|
||||
<tr data-key="{AUTH_ID}">
|
||||
<td style="text-align:center;"><input value="{AUTH_ID}" onchange="${infoPrefix}Control.authorities.select('{AUTH_ID}', this.checked);" type="checkbox" class="form-check-input"></td>
|
||||
<td onclick="${infoPrefix}Control.authorities.setCurrent('{AUTH_ID}')" ondblclick="${infoPrefix}Control.authorities.getInfo({})">{AUTH_ID}</td>
|
||||
<td onclick="${infoPrefix}Control.authorities.setCurrent('{AUTH_ID}')" ondblclick="${infoPrefix}Control.authorities.getInfo({})">{AUTH_NM}</td>
|
||||
<td onclick="${infoPrefix}Control.authorities.setCurrent('{AUTH_ID}')" ondblclick="${infoPrefix}Control.authorities.getInfo({})">{REG_DT}</td>
|
||||
</tr>
|
||||
</template>
|
||||
<template id="${infoPrefix}NotFound">
|
||||
<tr class="odd">
|
||||
<td valign="top" colspan="4" class="dataTables_empty text-center">${prefixName} 정보를 찾지 못했습니다.</td>
|
||||
</tr>
|
||||
</template>
|
||||
</table>
|
||||
<div class="d-flex flex-row p-3 justify-content-between">
|
||||
<label id="${infoPrefix}PagingInfo" class="dataTables_info" role="status" aria-live="polite"></label>
|
||||
<ul id="${infoPrefix}Paging" class="pagination pagination-primary">
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div style="width:49%; padding-top:.25em;">
|
||||
<div class="nav-align-top">
|
||||
<ul class="nav nav-tabs" role="tablist">
|
||||
<li class="nav-item">
|
||||
<button type="button" onClick="${infoPrefix}Control.getLinkedList('users');" class="nav-link active" role="tab" data-bs-toggle="tab" data-bs-target="#navs-top-users" aria-controls="navs-top-users" aria-selected="true">사용자</button>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<button type="button" onClick="${infoPrefix}Control.getLinkedList('actions');" class="nav-link" role="tab" data-bs-toggle="tab" data-bs-target="#navs-top-actions" aria-controls="navs-top-actions" aria-selected="false">기능그룹</button>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab-content" style="padding:.6em 0;" id="${infoPrefix}RightInclude">
|
||||
<div class="tab-pane fade show active" id="navs-top-users" role="tabpanel">
|
||||
<div class="ox-scroll">
|
||||
<jsp:include page="user-list.jsp" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="tab-pane fade" id="navs-top-actions" role="tabpanel">
|
||||
<jsp:include page="actionGroup-list.jsp" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!--/ Page Body -->
|
||||
<script >
|
||||
var ${infoPrefix}Control = new AuthorityControl();
|
||||
${infoPrefix}Control.authorities.onSave = (resp) => {
|
||||
if (resp.saved) {
|
||||
dialog.alert("저장됐습니다.");
|
||||
dialog.close(${infoPrefix}Control.authorities.prefixed("dialog"));
|
||||
${infoPrefix}Control.authorities.query.fetchAll = true;
|
||||
${infoPrefix}Control.authorities.load(1);
|
||||
}
|
||||
}
|
||||
${infoPrefix}Control.authorities.onRemove = (selected, resp) => {
|
||||
if (resp.saved){
|
||||
${infoPrefix}Control.authorities.query.fetchAll = true;
|
||||
${infoPrefix}Control.authorities.load(1);
|
||||
}
|
||||
}
|
||||
|
||||
function search${infoPrefix}s() {
|
||||
${infoPrefix}Control.authorities.query = {
|
||||
by:$("#${infoPrefix}-query [name='by']").val(),
|
||||
term:$("#${infoPrefix}-query [name='term']").val()
|
||||
};
|
||||
${infoPrefix}Control.authorities.query.fetchAll = true;
|
||||
${infoPrefix}Control.authorities.load(1);
|
||||
}
|
||||
|
||||
function remove${infoPrefix}s() {
|
||||
dialog.alert({
|
||||
content:"선택한 ${prefixName} 정보를 제거하시겠습니까?",
|
||||
onOK:() => {
|
||||
${infoPrefix}Control.removeAuthorities();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function render${infoPrefix}List() {
|
||||
let ${infoPrefix}List = ${infoPrefix}Control.authorities.dataset;
|
||||
let empty = ${infoPrefix}List.empty;
|
||||
|
||||
let trs = empty ?
|
||||
[document.getElementById("${infoPrefix}NotFound").innerHTML] : <%-- from template#${infoPrefix}NotFound --%>
|
||||
${infoPrefix}List.inStrings(document.getElementById("${infoPrefix}Row").innerHTML); <%-- from template#${infoPrefix}Row --%>
|
||||
$("#${infoPrefix}List").html(trs.join());
|
||||
$("#${infoPrefix}Thead").find("th input[type='checkbox']").prop("checked", false);
|
||||
$("#${infoPrefix}RightInclude").find("th input[type='checkbox']").prop("checked", false);
|
||||
}
|
||||
|
||||
${infoPrefix}Control.onAuthorityListChange = obj => {
|
||||
render${infoPrefix}List();
|
||||
|
||||
$("#${infoPrefix}Paging").setPaging({
|
||||
list:${infoPrefix}Control.authorities.dataset,
|
||||
prefix:${infoPrefix}Control.authorities.prefix,
|
||||
start:obj.${infoPrefix}Start,
|
||||
totalSize:obj.${infoPrefix}Total,
|
||||
fetchSize:obj.${infoPrefix}Fetch,
|
||||
func:"${infoPrefix}Control.authorities.load({index})"
|
||||
});
|
||||
};
|
||||
|
||||
${infoPrefix}Control.onCurrentAuthorityChange = item => {
|
||||
$("#btnAddActions").prop("disabled", !item || ${infoPrefix}Control.authorities.isAdmin(item.data));
|
||||
$("#btnAddUsers").prop("disabled", !item || ${infoPrefix}Control.authorities.isImplicit(item.data));
|
||||
if (!item) return;
|
||||
|
||||
let key = item.data.AUTH_ID;
|
||||
$("#${infoPrefix}List").setCurrentRow(key);
|
||||
};
|
||||
|
||||
${infoPrefix}Control.onAuthoritySelect = selected => {
|
||||
let ${infoPrefix}List = ${infoPrefix}Control.authorities.dataset;
|
||||
let keys = selected.map(e => ${infoPrefix}List.getKey(e));
|
||||
$("#${infoPrefix}List input[type='checkbox']").each(function() {
|
||||
let checkbox = $(this);
|
||||
checkbox.prop("checked", keys.includes(checkbox.val()));
|
||||
});
|
||||
|
||||
let builtIn = selected.filter(info => ${infoPrefix}Control.authorities.isBuiltIn(info)).length > 0;
|
||||
|
||||
$("#btnRemove${infoPrefix}s").prop("disabled", keys.length < 1 || builtIn);
|
||||
};
|
||||
|
||||
${userFunc}
|
||||
${actionGroupFunc}
|
||||
|
||||
$("#${infoPrefix}term").onEnterPress(search${infoPrefix}s);
|
||||
|
||||
$(function(){
|
||||
${onload}
|
||||
${infoPrefix}Control.authorities.setData({
|
||||
${infoPrefix}List:${authorityList},
|
||||
${infoPrefix}Start:${authorityStart},
|
||||
${infoPrefix}Fetch:${authorityFetch},
|
||||
${infoPrefix}Total:${authorityTotal}
|
||||
});
|
||||
});
|
||||
//# sourceURL=authority-main.jsp
|
||||
</script>
|
||||
@ -1,100 +0,0 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
<div class="d-flex flex-row justify-content-end p-3">
|
||||
<div>
|
||||
<button id="btnAddAuthUsers" onclick="${infoPrefix}Control.addUsers();" class="btn btn-primary">+ 추가</button>
|
||||
<button id="btnRemoveAuthUsers" onclick="removeAuthUsers();" class="btn btn-primary">- 제거</button>
|
||||
</div>
|
||||
</div>
|
||||
<table class="datatables-ajax table table-bordered dataTable no-footer" id="DataTables_Table_0" aria-describedby="DataTables_Table_0_info">
|
||||
<thead>
|
||||
<tr>
|
||||
<th tabindex="0" aria-controls="DataTables_Table_0" rowspan="1" colspan="1" style="text-align:center;"><input id="authUserToggler" onchange="${infoPrefix}Control.users.select(this.checked);" type="checkbox" class="form-check-input"></th>
|
||||
<th class="sorting" tabindex="0" aria-controls="DataTables_Table_0" rowspan="1" colspan="1" aria-label="Email: activate to sort column ascending">시군구명</th>
|
||||
<th class="sorting" tabindex="0" aria-controls="DataTables_Table_0" rowspan="1" colspan="1" aria-label="Email: activate to sort column ascending" >기관명</th>
|
||||
<th class="sorting" tabindex="0" aria-controls="DataTables_Table_0" rowspan="1" colspan="1" aria-label="Email: activate to sort column ascending" >부서명</th>
|
||||
<th class="sorting" tabindex="0" aria-controls="DataTables_Table_0" rowspan="1" colspan="1" aria-label="Email: activate to sort column ascending" >사용자 계정</th>
|
||||
<th class="sorting" tabindex="0" aria-controls="DataTables_Table_0" rowspan="1" colspan="1" aria-label="Email: activate to sort column ascending" >사용자 이름</th>
|
||||
<th class="sorting" tabindex="0" aria-controls="DataTables_Table_0" rowspan="1" colspan="1" aria-label="Start date: activate to sort column ascending" >등록일자</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="authUserList">
|
||||
</tbody>
|
||||
<template id="authUserRow">
|
||||
<tr data-key="{AUTH_ID}-{USER_ID}">
|
||||
<td style="text-align:center;"><input value="{AUTH_ID}-{USER_ID}" onchange="${infoPrefix}Control.users.select('{AUTH_ID}-{USER_ID}', this.checked);" type="checkbox" class="form-check-input"></td>
|
||||
<td onclick="${infoPrefix}Control.users.setCurrent('{AUTH_ID}-{USER_ID}')">{SGG_NM}</td>
|
||||
<td onclick="${infoPrefix}Control.users.setCurrent('{AUTH_ID}-{USER_ID}')">{INST_NM}</td>
|
||||
<td onclick="${infoPrefix}Control.users.setCurrent('{AUTH_ID}-{USER_ID}')">{DEPT_NM}</td>
|
||||
<td onclick="${infoPrefix}Control.users.setCurrent('{AUTH_ID}-{USER_ID}')">{USER_ACNT}</td>
|
||||
<td onclick="${infoPrefix}Control.users.setCurrent('{AUTH_ID}-{USER_ID}')">{USER_NM}</td>
|
||||
<td onclick="${infoPrefix}Control.users.setCurrent('{AUTH_ID}-{USER_ID}">{REG_DT}</td>
|
||||
</tr>
|
||||
</template>
|
||||
<template id="authUserNotFound">
|
||||
<tr class="odd">
|
||||
<td valign="top" colspan="7" class="dataTables_empty text-center">사용자 정보를 찾지 못했습니다.</td>
|
||||
</tr>
|
||||
</template>
|
||||
<template id="implicitActions">
|
||||
<tr class="odd">
|
||||
<td valign="top" colspan="7" class="dataTables_empty text-center">{authority}는 사용자를 지정하지 않습니다.</td>
|
||||
</tr>
|
||||
</template>
|
||||
</table>
|
||||
<div class="d-flex flex-row p-3 justify-content-between">
|
||||
<label id="authUserPagingInfo" class="dataTables_info" role="status" aria-live="polite"></label>
|
||||
<ul id="authUserPaging" class="pagination pagination-primary">
|
||||
</ul>
|
||||
</div>
|
||||
<c:set var="userFunc" scope="request">
|
||||
function removeAuthUsers() {
|
||||
dialog.alert({
|
||||
content:"선택한 사용자를 삭제하시겠습니까?",
|
||||
onOK:() => {
|
||||
${infoPrefix}Control.removeUsers();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
${infoPrefix}Control.onUserListChange = obj => {
|
||||
let authority = ${infoPrefix}Control.authorities.getCurrent();
|
||||
authority = authority ? authority.AUTH_NM : "";
|
||||
let ${infoPrefix}List = ${infoPrefix}Control.users.dataset;
|
||||
let empty = ${infoPrefix}List.empty;
|
||||
|
||||
let trs =
|
||||
${infoPrefix}Control.authorities.isImplicit() ? [document.getElementById("implicitActions").innerHTML.replace(/{authority}/, authority)] :
|
||||
empty ? [document.getElementById("authUserNotFound").innerHTML] : <%-- from template#${infoPrefix}NotFound --%>
|
||||
${infoPrefix}List.inStrings(document.getElementById("authUserRow").innerHTML); <%-- from template#${infoPrefix}Row --%>
|
||||
$("#authUserList").html(trs.join());
|
||||
$("#authUserToggler").prop("checked", false);
|
||||
|
||||
$("#authUserPaging").setPaging({
|
||||
list:${infoPrefix}Control.users.dataset,
|
||||
prefix:${infoPrefix}Control.users.prefix,
|
||||
start:obj.userStart,
|
||||
totalSize:obj.userTotal,
|
||||
fetchSize:obj.userFetch,
|
||||
func:"${infoPrefix}Control.users.load({index})"
|
||||
});
|
||||
};
|
||||
|
||||
${infoPrefix}Control.onCurrentUserChange = item => {
|
||||
if (!item) return;
|
||||
|
||||
let data = item.data;
|
||||
let key = data.AUTH_ID + "-" + data.USER_ID;
|
||||
$("#authUserList").setCurrentRow(key);
|
||||
};
|
||||
|
||||
${infoPrefix}Control.onUserSelect = selected => {
|
||||
let ${infoPrefix}List = ${infoPrefix}Control.users.dataset;
|
||||
let keys = selected.map(e => ${infoPrefix}List.getKey(e));
|
||||
$("#authUserList input[type='checkbox']").each(function() {
|
||||
let checkbox = $(this);
|
||||
checkbox.prop("checked", keys.includes(checkbox.val()));
|
||||
});
|
||||
|
||||
$("#btnRemoveAuthUsers").prop("disabled", keys.length < 1);
|
||||
};</c:set>
|
||||
@ -1,135 +0,0 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
<form id="code-form">
|
||||
<div class="row g-3">
|
||||
<div class="col-md-12">
|
||||
<div class="row">
|
||||
<label class="col-sm-2 col-form-label text-sm-end" for="code"
|
||||
>코드</label
|
||||
>
|
||||
<div class="col-sm-10">
|
||||
<input name="code" type="text" required data-map="CODE" maxlength="15" class="form-control" placeholder="코드" />
|
||||
<input name="groupID" type="hidden" data-map="GRP_ID" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-12">
|
||||
<div class="row">
|
||||
<label class="col-sm-2 col-form-label text-sm-end" for="value"
|
||||
>코드값</label
|
||||
>
|
||||
<div class="col-sm-10">
|
||||
<input name="value" type="text" required data-map="CODE_VAL" maxlength="60" class="form-control" placeholder="코드값" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-12">
|
||||
<div class="row">
|
||||
<label class="col-sm-2 col-form-label text-sm-end" for="description"
|
||||
>설명</label
|
||||
>
|
||||
<div class="col-sm-10">
|
||||
<input name="description" type="text" data-map="DSCRP" maxlength="200" class="form-control" placeholder="코드 설명"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-12">
|
||||
<div class="row">
|
||||
<label class="col-sm-2 col-form-label text-sm-end" for="etc1"
|
||||
>기타값 1</label
|
||||
>
|
||||
<div class="col-sm-10">
|
||||
<input name="etc1" type="text" data-map="ETC1" maxlength="200" class="form-control" placeholder="기타값 1"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-12">
|
||||
<div class="row">
|
||||
<label class="col-sm-2 col-form-label text-sm-end" for="etc2"
|
||||
>기타값2</label
|
||||
>
|
||||
<div class="col-sm-10">
|
||||
<input name="etc2" type="text" data-map="ETC2" maxlength="200" class="form-control" placeholder="기타값 2"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-12">
|
||||
<div class="row">
|
||||
<label class="col-sm-2 col-form-label text-sm-end" for="etc3"
|
||||
>기타값3</label
|
||||
>
|
||||
<div class="col-sm-10">
|
||||
<input name="etc3" type="text" data-map="ET3" maxlength="200" class="form-control" placeholder="기타값 3"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-12">
|
||||
<div class="row">
|
||||
<label class="col-sm-2 col-form-label text-sm-end" for="createdBy"
|
||||
>등록자</label
|
||||
>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" data-map="RGTR" readonly class="form-control" placeholder="등록자"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-12">
|
||||
<div class="row">
|
||||
<label class="col-sm-2 col-form-label text-sm-end" for="description"
|
||||
>등록일자</label
|
||||
>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" data-map="REG_DT" readonly class="form-control" placeholder="등록일자"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-12">
|
||||
<div class="row">
|
||||
<label class="col-sm-2 col-form-label text-sm-end" for="description"
|
||||
>사용여부</label
|
||||
>
|
||||
<div class="col-sm-10 p-2">
|
||||
<span id="codeInUse"></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mt-4 justify-content-end">
|
||||
<div class="col-sm-12 text-end">
|
||||
<button onclick="saveCode();" type="button" class="btn btn-primary">저장</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<script type="text/javascript">
|
||||
|
||||
var codeFields = new FormFields("#code-form");
|
||||
|
||||
codeControl.codes.setInfo = obj => {
|
||||
let info = obj.data;
|
||||
codeFields.set(codeControl, obj);
|
||||
let create = isEmpty(info.CODE);
|
||||
$("input[name='code']").prop("readonly", !create);
|
||||
$("#code-form input").onEnterPress(saveCode);
|
||||
$("#codeInUse").html("Y" == info.USE_YN ? "사용 중" : "사용하지 않음");
|
||||
document.querySelector("input[name='" + (create ? "code" : "value") + "']").focus();
|
||||
}
|
||||
|
||||
codeControl.codes.onModify = (changed) => {
|
||||
if (["CODE", "CODE_VAL"].filter(e => changed.includes(e)).length < 1)
|
||||
return;
|
||||
|
||||
renderCodeList();
|
||||
codeControl.codes.dataset.setState();
|
||||
}
|
||||
|
||||
function saveCode() {
|
||||
if (!$("#code-form input").validInputs()) return;
|
||||
|
||||
dialog.alert({
|
||||
content:"현재 코드 정보를 저장하시겠습니까?",
|
||||
onOK:() => {
|
||||
codeControl.codes.save(codeFields.get());
|
||||
}
|
||||
});
|
||||
}
|
||||
//# sourceURL=code-info.jsp
|
||||
</script>
|
||||
@ -1,233 +0,0 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
<c:set var="prefixName" scope="request">코드 그룹</c:set>
|
||||
<!-- Page Body -->
|
||||
<div class="d-flex flex-column flex-grow-1">
|
||||
<div id="DataTables_Table_0_wrapper" class="dataTables_wrapper dt-bootstrap5 no-footer">
|
||||
|
||||
<div class="d-flex flex-row justify-content-evenly">
|
||||
<div style="width:49%;">
|
||||
<h5 class="mt-3">${prefixName}</h5>
|
||||
<div class="d-flex flex-row justify-content-between p-3">
|
||||
<%--div>
|
||||
<div class="input-group" id="${infoPrefix}-query">
|
||||
<select id="${infoPrefix}by" name="by" onchange="document.getElementById('${infoPrefix}term').focus();" aria-controls="DataTables_Table_0" class="form-select">
|
||||
<option value="groupName">이름</option>
|
||||
<option value="groupID">아이디</option>
|
||||
</select>
|
||||
<input id="${infoPrefix}term" name="term" autofocus type="text" placeholder="조회 조건을 입력하십시오." class="form-control">
|
||||
</div>
|
||||
</div--%>
|
||||
<div>
|
||||
<%--button onclick="searchGroups();" class="btn btn-primary">찾기</button--%>
|
||||
<button onclick="codeControl.groups.newInfo();" class="btn btn-primary">+ 추가</button>
|
||||
<button id="btnRemoveGroups" onclick="removeGroups();" class="btn btn-primary">- 제거</button>
|
||||
</div>
|
||||
</div>
|
||||
<table class="datatables-ajax table table-bordered dataTable no-footer" id="DataTables_Table_0" aria-describedby="DataTables_Table_0_info">
|
||||
<thead id="groupThead">
|
||||
<tr><th tabindex="0" aria-controls="DataTables_Table_0" rowspan="1" colspan="1" style="text-align:center;"><input onchange="codeControl.groups.select(this.checked);" type="checkbox" class="form-check-input"></th>
|
||||
<th class="sorting sorting_asc" tabindex="0" aria-controls="DataTables_Table_0" rowspan="1" colspan="1" aria-sort="ascending" aria-label="Full name: activate to sort column descending">아이디</th>
|
||||
<th class="sorting" tabindex="0" aria-controls="DataTables_Table_0" rowspan="1" colspan="1" aria-label="Email: activate to sort column ascending">이름</th>
|
||||
<th class="sorting" tabindex="0" aria-controls="DataTables_Table_0" rowspan="1" colspan="1" aria-label="Start date: activate to sort column ascending">등록일자</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="groupList">
|
||||
</tbody>
|
||||
<template id="groupRow">
|
||||
<tr data-key="{GRP_ID}"{notUsed}>
|
||||
<td style="text-align:center;"><input value="{GRP_ID}" onchange="codeControl.groups.select('{GRP_ID}', this.checked);" type="checkbox" class="form-check-input"></td>
|
||||
<td onclick="codeControl.groups.setCurrent('{GRP_ID}')" ondblclick="codeControl.groups.getInfo({})">{GRP_ID}</td>
|
||||
<td onclick="codeControl.groups.setCurrent('{GRP_ID}')" ondblclick="codeControl.groups.getInfo({})">{GRP_NM}</td>
|
||||
<td onclick="codeControl.groups.setCurrent('{GRP_ID}')" ondblclick="codeControl.groups.getInfo({})">{REG_DT}</td>
|
||||
</tr>
|
||||
</template>
|
||||
<template id="groupNotFound">
|
||||
<tr class="odd">
|
||||
<td valign="top" colspan="4" class="dataTables_empty text-center">${prefixName} 정보를 찾지 못했습니다.</td>
|
||||
</tr>
|
||||
</template>
|
||||
</table>
|
||||
<div class="d-flex flex-row p-3 justify-content-between">
|
||||
<label id="groupPagingInfo" class="dataTables_info" role="status" aria-live="polite"></label>
|
||||
<ul id="groupPaging" class="pagination pagination-primary">
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div style="width:49%;">
|
||||
<h5 class="mt-3">공통 코드</h5>
|
||||
<div class="d-flex flex-row justify-content-end p-3">
|
||||
<div>
|
||||
<button id="btnAddCode" onclick="codeControl.newCode();" class="btn btn-primary">+ 추가</button>
|
||||
<button id="btnRemoveCodes" onclick="removeCodes();" class="btn btn-primary">- 제거</button>
|
||||
</div>
|
||||
</div>
|
||||
<table class="datatables-ajax table table-bordered dataTable no-footer" id="DataTables_Table_0" aria-describedby="DataTables_Table_0_info">
|
||||
<thead id="codeThead">
|
||||
<tr><th tabindex="0" aria-controls="DataTables_Table_0" rowspan="1" colspan="1" style="text-align:center;"><input id="codeToggler" onchange="codeControl.codes.select(this.checked);" type="checkbox" class="form-check-input"></th>
|
||||
<th class="sorting" tabindex="0" aria-controls="DataTables_Table_0" rowspan="1" colspan="1" aria-label="Email: activate to sort column ascending">코드</th>
|
||||
<th class="sorting" tabindex="0" aria-controls="DataTables_Table_0" rowspan="1" colspan="1" aria-label="Email: activate to sort column ascending">코드값</th>
|
||||
<th class="sorting" tabindex="0" aria-controls="DataTables_Table_0" rowspan="1" colspan="1" aria-label="Start date: activate to sort column ascending">등록일자</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="codeList">
|
||||
</tbody>
|
||||
<template id="codeRow">
|
||||
<tr data-key="{CODE}"{notUsed}>
|
||||
<td style="text-align:center;"><input value="{CODE}" onchange="codeControl.codes.select('{CODE}', this.checked);" type="checkbox" class="form-check-input"></td>
|
||||
<td onclick="codeControl.codes.setCurrent('{CODE}')" ondblclick="codeControl.codes.getInfo({})">{CODE}</td>
|
||||
<td onclick="codeControl.codes.setCurrent('{CODE}')" ondblclick="codeControl.codes.getInfo({})">{CODE_VAL}</td>
|
||||
<td onclick="codeControl.codes.setCurrent('{CODE}')" ondblclick="codeControl.codes.getInfo({})">{REG_DT}</td>
|
||||
</tr>
|
||||
</template>
|
||||
<template id="codeNotFound">
|
||||
<tr class="odd">
|
||||
<td valign="top" colspan="4" class="dataTables_empty text-center">코드 정보를 찾지 못했습니다.</td>
|
||||
</tr>
|
||||
</template>
|
||||
</table>
|
||||
<div class="d-flex flex-row p-3 justify-content-between">
|
||||
<label id="codePagingInfo" class="dataTables_info" role="status" aria-live="polite"></label>
|
||||
<ul id="codePaging" class="pagination pagination-primary">
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!--/ Page Body -->
|
||||
<script >
|
||||
var codeControl = new CodeControl();
|
||||
|
||||
function searchGroups() {
|
||||
codeControl.groups.query = {
|
||||
by:$("#${infoPrefix}-query [name='by']").val(),
|
||||
term:$("#${infoPrefix}-query [name='term']").val()
|
||||
};
|
||||
codeControl.groups.load(1);
|
||||
}
|
||||
|
||||
function removeGroups() {
|
||||
dialog.alert({
|
||||
content:"선택한 ${prefixName} 정보를 제거하시겠습니까?",
|
||||
onOK:() => {
|
||||
codeControl.groups.remove();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function removeCodes() {
|
||||
dialog.alert({
|
||||
content:"선택한 코드를 삭제하시겠습니까?",
|
||||
onOK:() => {
|
||||
codeControl.codes.remove();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function renderGroupList() {
|
||||
let groupList = codeControl.groups.dataset;
|
||||
let empty = groupList.empty;
|
||||
|
||||
let trs = empty ?
|
||||
[document.getElementById("groupNotFound").innerHTML] : <%-- from template#groupNotFound --%>
|
||||
groupList.inStrings(
|
||||
document.getElementById("groupRow").innerHTML,
|
||||
(tmpl, item) => tmpl.replace(/{notUsed}/gi, item.getValue("USE_YN") == "N" ? "class=\"not-used\"" : "")
|
||||
); <%-- from template#groupRow --%>
|
||||
$("#groupList").html(trs.join());
|
||||
$("#groupThead").find("input[type='checkbox']").prop("checked", false);
|
||||
$("#codeThead").find("input[type='checkbox']").prop("checked", false);
|
||||
}
|
||||
|
||||
codeControl.onGroupListChange = obj => {
|
||||
renderGroupList();
|
||||
|
||||
$("#groupPaging").setPaging({
|
||||
list:codeControl.groups.dataset,
|
||||
prefix:codeControl.groups.prefix,
|
||||
start:obj.groupStart,
|
||||
totalSize:obj.groupTotal,
|
||||
fetchSize:obj.groupFetch,
|
||||
func:"codeControl.groups.load({index})"
|
||||
});
|
||||
};
|
||||
|
||||
codeControl.onCurrentGroupChange = item => {
|
||||
$("#btnAddCode").prop("disabled", !item);
|
||||
if (!item) return;
|
||||
|
||||
let key = item.data.GRP_ID;
|
||||
$("#groupList").setCurrentRow(key);
|
||||
};
|
||||
|
||||
codeControl.onGroupSelect = selected => {
|
||||
let groupList = codeControl.groups.dataset;
|
||||
let keys = selected.map(e => groupList.getKey(e));
|
||||
$("#groupList input[type='checkbox']").each(function() {
|
||||
let checkbox = $(this);
|
||||
checkbox.prop("checked", keys.includes(checkbox.val()));
|
||||
});
|
||||
|
||||
$("#btnRemoveGroups").prop("disabled", keys.length < 1);
|
||||
};
|
||||
|
||||
function renderCodeList() {
|
||||
let codeList = codeControl.codes.dataset;
|
||||
let empty = codeList.empty;
|
||||
|
||||
let trs = empty ?
|
||||
[document.getElementById("codeNotFound").innerHTML] : <%-- from template#groupNotFound --%>
|
||||
codeList.inStrings(
|
||||
document.getElementById("codeRow").innerHTML,
|
||||
(tmpl, item) => tmpl.replace(/{notUsed}/gi, item.getValue("USE_YN") == "N" ? "class=\"not-used\"" : "")
|
||||
); <%-- from template#groupRow --%>
|
||||
$("#codeList").html(trs.join());
|
||||
$("#codeToggler").prop("checked", false);
|
||||
}
|
||||
|
||||
codeControl.onCodeListChange = obj => {
|
||||
renderCodeList();
|
||||
|
||||
$("#codePaging").setPaging({
|
||||
list:codeControl.codes.dataset,
|
||||
prefix:codeControl.codes.prefix,
|
||||
start:obj ? obj.codeStart : -1,
|
||||
totalSize:obj ? obj.codeTotal : 0,
|
||||
fetchSize:obj ? obj.codeFetch : 10,
|
||||
func:"codeControl.codes.load({index})"
|
||||
});
|
||||
};
|
||||
|
||||
codeControl.onCurrentCodeChange = item => {
|
||||
if (!item) return;
|
||||
|
||||
let data = item.data;
|
||||
let key = data.CODE;
|
||||
$("#codeList").setCurrentRow(key);
|
||||
};
|
||||
|
||||
codeControl.onCodeSelect = selected => {
|
||||
let codeList = codeControl.codes.dataset;
|
||||
let keys = selected.map(e => codeList.getKey(e));
|
||||
$("#codeList input[type='checkbox']").each(function() {
|
||||
let checkbox = $(this);
|
||||
checkbox.prop("checked", keys.includes(checkbox.val()));
|
||||
});
|
||||
|
||||
$("#btnRemoveCodes").prop("disabled", selected.length < 1);
|
||||
};
|
||||
|
||||
$("#${infoPrefix}term").onEnterPress(searchGroups);
|
||||
|
||||
$(function(){
|
||||
${onload}
|
||||
codeControl.groups.setData({
|
||||
groupList:${groupList},
|
||||
groupStart:${groupStart},
|
||||
groupFetch:${groupFetch},
|
||||
groupTotal:${groupTotal}
|
||||
});
|
||||
});
|
||||
//# sourceURL=code-main.jsp
|
||||
</script>
|
||||
@ -1,105 +0,0 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
<form id="group-form">
|
||||
<div class="row g-3">
|
||||
<div class="col-md-12">
|
||||
<div class="row">
|
||||
<label class="col-sm-2 col-form-label text-sm-end" for="id"
|
||||
>아이디</label
|
||||
>
|
||||
<div class="col-sm-10">
|
||||
<input name="id" type="text" required data-map="GRP_ID" maxlength="50" class="form-control" placeholder="그룹 아이디" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-12">
|
||||
<div class="row">
|
||||
<label class="col-sm-2 col-form-label text-sm-end" for="name"
|
||||
>이름</label
|
||||
>
|
||||
<div class="col-sm-10">
|
||||
<input name="name" type="text" required data-map="GRP_NM" maxlength="60" class="form-control" placeholder="그룹 이름" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-12">
|
||||
<div class="row">
|
||||
<label class="col-sm-2 col-form-label text-sm-end" for="description"
|
||||
>설명</label
|
||||
>
|
||||
<div class="col-sm-10">
|
||||
<input name="description" type="text" data-map="DSCRP" maxlength="200" class="form-control" placeholder="그룹 설명"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-12">
|
||||
<div class="row">
|
||||
<label class="col-sm-2 col-form-label text-sm-end" for="createdBy"
|
||||
>등록자</label
|
||||
>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" data-map="RGTR" readonly class="form-control" placeholder="등록자"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-12">
|
||||
<div class="row">
|
||||
<label class="col-sm-2 col-form-label text-sm-end" for="description"
|
||||
>등록일자</label
|
||||
>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" data-map="REG_DT" readonly class="form-control" placeholder="등록일자"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-12">
|
||||
<div class="row">
|
||||
<label class="col-sm-2 col-form-label text-sm-end" for="description"
|
||||
>사용여부</label
|
||||
>
|
||||
<div class="col-sm-10 p-2">
|
||||
<span id="groupInUse"></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mt-4 justify-content-end">
|
||||
<div class="col-sm-12 text-end">
|
||||
<button onclick="saveGroup();" type="button" class="btn btn-primary">저장</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<script type="text/javascript">
|
||||
|
||||
var groupFields = new FormFields("#group-form");
|
||||
|
||||
codeControl.groups.setInfo = obj => {
|
||||
let info = obj.data;
|
||||
groupFields.set(codeControl, obj);
|
||||
let create = isEmpty(info.GRP_ID);
|
||||
$("input[name='id']").prop("readonly", !create);
|
||||
$("#group-form input").onEnterPress(saveGroup);
|
||||
$("#groupInUse").html(create ? "" : info.USE_YN == "Y" ? "사용 중" : "사용하지 않음");
|
||||
|
||||
document.querySelector("input[name='" + (create ? "id" : "name") + "']").focus();
|
||||
}
|
||||
|
||||
codeControl.groups.onModify = (changed) => {
|
||||
if (["GRP_NM"].filter(e => changed.includes(e)).length < 1)
|
||||
return;
|
||||
|
||||
renderGroupList();
|
||||
codeControl.groups.dataset.setState();
|
||||
}
|
||||
|
||||
function saveGroup() {
|
||||
if (!$("#group-form input").validInputs()) return;
|
||||
|
||||
dialog.alert({
|
||||
content:"현재 그룹 정보를 저장하시겠습니까?",
|
||||
onOK:() => {
|
||||
codeControl.groups.save(groupFields.get());
|
||||
}
|
||||
});
|
||||
}
|
||||
//# sourceURL=group-info.jsp
|
||||
</script>
|
||||
@ -1,102 +0,0 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
<form id="menu-form">
|
||||
<div class="row g-3">
|
||||
<div class="col-md-12">
|
||||
<div class="row">
|
||||
<label class="col-sm-2 col-form-label text-sm-end" for="id"
|
||||
>아이디</label
|
||||
>
|
||||
<div class="col-sm-10">
|
||||
<input name="id" type="text" readonly maxlength="50" class="form-control" placeholder="저장하시면 시스템이 부여합니다." />
|
||||
<input name="parentID" type="hidden" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-12">
|
||||
<div class="row">
|
||||
<label class="col-sm-2 col-form-label text-sm-end" for="name"
|
||||
>이름</label
|
||||
>
|
||||
<div class="col-sm-10">
|
||||
<input name="name" type="text" required maxlength="60" class="form-control" placeholder="메뉴 이름" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-12">
|
||||
<div class="row">
|
||||
<label class="col-sm-2 col-form-label text-sm-end" for="action"
|
||||
>URL</label
|
||||
>
|
||||
<div class="col-sm-10 input-group w-80">
|
||||
<span id="btnSelectURL" onClick="setURL();" class="input-group-text"><i class="bx bx-search"></i></span>
|
||||
<input name="action" type="text" maxlength="60" class="form-control" placeholder="URL" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-12">
|
||||
<div class="row">
|
||||
<label class="col-sm-2 col-form-label text-sm-end" for="description"
|
||||
>설명</label
|
||||
>
|
||||
<div class="col-sm-10">
|
||||
<input name="description" type="text" maxlength="200" class="form-control" placeholder="메뉴 설명"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-12">
|
||||
<div class="row">
|
||||
<label class="col-sm-2 col-form-label text-sm-end" for="imageName"
|
||||
>이미지 이름</label
|
||||
>
|
||||
<div class="col-sm-10">
|
||||
<input name="imageName" type="text" maxlength="200" class="form-control" placeholder="이미지 이름"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-12">
|
||||
<div class="row">
|
||||
<label class="col-sm-2 col-form-label text-sm-end" for="imageConf"
|
||||
>이미지 설정</label
|
||||
>
|
||||
<div class="col-sm-10">
|
||||
<input name="imageConf" type="text" maxlength="200" class="form-control" placeholder="이미지 설정"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mt-4 justify-content-end">
|
||||
<div class="col-sm-12 text-end">
|
||||
<button id="btnSaveAuth" onclick="saveMenu();" type="button" class="btn btn-primary">저장</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<c:set var="menuFunc" scope="request">
|
||||
var menuFields = new FormFields("#menu-form");
|
||||
|
||||
menuControl.setInfo = obj => {
|
||||
menuFields.set(menuControl, obj);
|
||||
$("input[name='name']").focus();
|
||||
}
|
||||
|
||||
menuControl.onModify = (changed) => {
|
||||
if (["name", "url"].filter(e => changed.includes(e)).length < 1)
|
||||
return;
|
||||
}
|
||||
|
||||
async function setURL() {
|
||||
let url = await selectURL(false);
|
||||
$("input[name='action']").val(url).change();
|
||||
}
|
||||
|
||||
function saveMenu() {
|
||||
if (!$("#menu-form input").validInputs()) return;
|
||||
|
||||
dialog.alert({
|
||||
content:"현재 메뉴 정보를 저장하시겠습니까?",
|
||||
onOK:() => menuControl.save(menuFields.get())
|
||||
});
|
||||
}
|
||||
|
||||
$("#menu-form input")
|
||||
.onEnterPress(() => saveMenu());
|
||||
</c:set>
|
||||
@ -1,134 +0,0 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
|
||||
<c:set var="prefixName" scope="request">메뉴</c:set>
|
||||
<!-- Page Body -->
|
||||
<div class="d-flex flex-column flex-grow-1">
|
||||
<div id="DataTables_Table_0_wrapper" class="dataTables_wrapper dt-bootstrap5 no-footer">
|
||||
|
||||
<div class="d-flex flex-row justify-content-evenly">
|
||||
<div style="width:49%;">
|
||||
<h5 class="mt-3">레이아웃</h5>
|
||||
<div id="menu-tree" class="main-left d-flex flex-column flex-grow-1">
|
||||
<div class="d-flex justify-content-between" style="padding-top:.5em; padding-bottom:.5em; border-top:1px solid #dfdfdf; border-bottom:1px solid #dfdfdf;">
|
||||
<span>
|
||||
<button id="menuToggler" onclick="toggleMenus();" class="btn btn-primary"></button>
|
||||
</span>
|
||||
</div>
|
||||
<div id="menuTree" style="padding-top:1em; min-height:26em; overflow:auto;">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div style="width:49%;">
|
||||
<h5 class="mt-3">등록 정보</h5>
|
||||
<div class="d-flex flex-row justify-content-end p-3">
|
||||
<div>
|
||||
<button id="btnRemoveMenus" onclick="removeMenus();" class="btn btn-primary">- 제거</button>
|
||||
</div>
|
||||
</div>
|
||||
<jsp:include page="menu-info.jsp" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!--/ Page Body -->
|
||||
<script >
|
||||
var menuBranches = treeSupport({
|
||||
selector:"#menuTree",
|
||||
trace:wctx.trace,
|
||||
plugins: ["checkbox", "contextmenu", "dnd"] ,
|
||||
core:{check_callback:true,
|
||||
multiple:false
|
||||
},
|
||||
checkbox:{
|
||||
whole_node:false,
|
||||
tie_selection:false
|
||||
},
|
||||
contextmenu:{items:{
|
||||
newMenu:{label:"메뉴 추가", action:function(obj){
|
||||
var current = menuControl.getCurrent(),
|
||||
parentID = current.parentID;
|
||||
menuControl.newInfo({parentID:parentID});
|
||||
$("input[name='parentID']").val(parentID);
|
||||
}},
|
||||
newChildMenu:{label:"하위메뉴 추가", action:function(obj){
|
||||
var current = menuControl.getCurrent(),
|
||||
parentID = current.id;
|
||||
menuControl.newInfo({parentID:parentID});
|
||||
$("input[name='parentID']").val(parentID);
|
||||
log("current", menuControl.getCurrent());
|
||||
}},
|
||||
}},
|
||||
onNodeSelect:function(obj) {
|
||||
var key = obj[0];
|
||||
menuControl.setCurrent(key);
|
||||
},
|
||||
onNodeMove:function(obj) {
|
||||
var parentID = obj.parent,
|
||||
menuID = obj.node.id;
|
||||
if (parentID == "#")
|
||||
parentID = null;
|
||||
menuControl.move(parentID, menuID);
|
||||
},
|
||||
onNodeReorder:function(obj) {
|
||||
var parentID = obj.parent,
|
||||
menuID = obj.node.id,
|
||||
menuIDs = menuBranches.getChildIDs(parentID);
|
||||
menuControl.reorder(menuIDs);
|
||||
},
|
||||
onNodeCheck:function(obj) {
|
||||
var checked = obj.checked,
|
||||
menuID = obj.node.id;
|
||||
menuControl.select(menuID, checked);
|
||||
}
|
||||
});
|
||||
|
||||
function toggleMenus() {
|
||||
$("#menuToggler").text(menuBranches.toggleFolding() == "collapsed" ? "+ 펼치기" : "- 닫기");
|
||||
}
|
||||
|
||||
var menuControl = new MenuControl();
|
||||
|
||||
menuControl.onDatasetChange = obj => {
|
||||
menuBranches.setData(treeHtml(menuControl.menus, {
|
||||
id:function(e){return e.id;},
|
||||
text:function(e){
|
||||
return e.name == e.url ? e.name : e.name + (e.url ? " (" + e.url + ")" : "");
|
||||
}
|
||||
}));
|
||||
$("#btnSelectURL").prop("disabled", menuControl.dataset.empty);
|
||||
}
|
||||
|
||||
menuControl.onCurrentChange = item => {
|
||||
menuControl.setInfo(item.data);
|
||||
menuBranches.selectNode(item.data.id);
|
||||
}
|
||||
|
||||
menuControl.onSelectionChange = selected => {
|
||||
$("#btnRemoveMenus").prop("disabled", selected.length < 1);
|
||||
}
|
||||
|
||||
menuControl.onMenusChanged = () => loadUserMenus();
|
||||
|
||||
${menuFunc}
|
||||
|
||||
async function loadUserMenus() {
|
||||
let userMenus = await menuControl.getUserMenus();
|
||||
setUserMenus(userMenus);
|
||||
}
|
||||
|
||||
function removeMenus() {
|
||||
dialog.alert({
|
||||
content:"선택한 메뉴 정보를 삭제하시겠습니까?",
|
||||
onOK:() => menuControl.remove()
|
||||
});
|
||||
}
|
||||
|
||||
$(function(){
|
||||
${onload}
|
||||
$("#menuToggler").text(menuBranches._folding == "collapsed" ? "+ 펼치기" : "- 닫기");
|
||||
menuControl.setData(${menus});
|
||||
menuBranches.open();
|
||||
});
|
||||
//# sourceURL=menu-main.jsp
|
||||
</script>
|
||||
@ -1,155 +0,0 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
<c:set var="prefixName" scope="request">시스템 로그</c:set>
|
||||
<!-- Page Body -->
|
||||
<div class="d-flex flex-column flex-grow-1">
|
||||
<div class="dataTables_wrapper dt-bootstrap5 no-footer">
|
||||
|
||||
<div id="${infoPrefix}-query" class="d-flex flex-row justify-content-between p-3">
|
||||
<div class="d-flex flex-row">
|
||||
<div class="input-group">
|
||||
<select id="${infoPrefix}logType" name="logType" class="form-select">
|
||||
<option value="">로그유형</option>
|
||||
<option value="log-inout">로그인/아웃</option>
|
||||
<option value="download">다운로드</option>
|
||||
<option value="web">웹</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="input-group" style="margin: 0 1rem 0 1rem">
|
||||
<select id="${infoPrefix}by" name="by" onchange="document.getElementById('${infoPrefix}term').focus();" class="form-select">
|
||||
<option value="userName">사용자 이름</option>
|
||||
<option value="userAccount">사용자 계정</option>
|
||||
<option value="userID">사용자 아이디</option>
|
||||
</select>
|
||||
<input id="${infoPrefix}term" name="term" type="text" placeholder="조회 조건을 입력하십시오." class="form-control">
|
||||
</div>
|
||||
<div class="input-group">
|
||||
<input id="${infoPrefix}fromDate" name="fromDate" type="text" value="${fromDate}" required placeholder="시작일자" class="form-control">
|
||||
<span style="margin: 0 .5rem 0 .5rem"> ~ </span>
|
||||
<input id="${infoPrefix}toDate" name="toDate" type="text" value="${toDate}" required placeholder="종료일자" class="form-control">
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<button onclick="search${infoPrefix}s();" class="btn btn-primary">찾기</button>
|
||||
<button onclick="${infoPrefix}Control.download();" class="btn btn-primary not-empty">다운로드</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="table-responsive">
|
||||
<table class="datatables-ajax table table-bordered dataTable no-footer" id="DataTables_Table_0" aria-describedby="DataTables_Table_0_info">
|
||||
<thead>
|
||||
<tr><th style="width: auto;">계정</th>
|
||||
<th style="width: auto;">사용자이름</th>
|
||||
<th style="width: auto;">IP 주소</th>
|
||||
<th style="width: max-content;">로그유형</th>
|
||||
<th style="width: max-content;">접속일시</th>
|
||||
<th style="width: auto;">URL</th>
|
||||
<th style="width: auto;">설명</th>
|
||||
<th style="width: auto;">파일이름</th>
|
||||
<th style="width: auto;">민감정보</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="${infoPrefix}List">
|
||||
</tbody>
|
||||
<template id="${infoPrefix}Row">
|
||||
<tr data-key="{LOG_ID}" {onclick}>
|
||||
<td>{USER_ACNT}</td>
|
||||
<td>{USER_NM}</td>
|
||||
<td>{IP_ADDR}</td>
|
||||
<td>{LOG_TYPE_NM}</td>
|
||||
<td>{REG_DT}</td>
|
||||
<td>{URL}</td>
|
||||
<td>{DSCRP}</td>
|
||||
<td>{FILE_NM}</td>
|
||||
<td>{PSNL_INFO}</td>
|
||||
</tr>
|
||||
</template>
|
||||
<template id="${infoPrefix}NotFound">
|
||||
<tr class="odd">
|
||||
<td valign="top" colspan="8" class="dataTables_empty text-center">${prefixName} 정보를 찾지 못했습니다.</td>
|
||||
</tr>
|
||||
</template>
|
||||
</table>
|
||||
</div>
|
||||
<div class="d-flex flex-row p-3 justify-content-between">
|
||||
<label id="${infoPrefix}PagingInfo" class="dataTables_info" role="status" aria-live="polite"></label>
|
||||
<ul id="${infoPrefix}Paging" class="pagination pagination-primary">
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!--/ Page Body -->
|
||||
<script >
|
||||
var ${infoPrefix}Control = new DatasetControl({
|
||||
prefix: "${infoPrefix}",
|
||||
prefixName: "${prefixName}",
|
||||
keymapper: row => row.LOG_ID,
|
||||
dataGetter: obj => obj.${infoPrefix}List,
|
||||
query: {}
|
||||
});
|
||||
|
||||
function search${infoPrefix}s() {
|
||||
let logType = $("#${infoPrefix}logType").val(),
|
||||
params = {
|
||||
logTypes: logType ? [logType] : [],
|
||||
fromDate: $("#${infoPrefix}fromDate").val().replace(/-/gi, ""),
|
||||
toDate: $("#${infoPrefix}toDate").val().replace(/-/gi, "")
|
||||
},
|
||||
terms = $("#${infoPrefix}-query [name='term']").val();
|
||||
if (terms) {
|
||||
switch ($("#${infoPrefix}-query [name='by']").val()) {
|
||||
case "userName": params.userName = terms; break;
|
||||
case "userAccount": params.userAccounts = [terms.toUpperCase()]; break;
|
||||
case "userID": params.userIDs = [terms]; break;
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
|
||||
${infoPrefix}Control.query = params;
|
||||
${infoPrefix}Control.load(1);
|
||||
}
|
||||
|
||||
${infoPrefix}Control.onDatasetChange = obj => {
|
||||
let ${infoPrefix}List = ${infoPrefix}Control.dataset,
|
||||
empty = ${infoPrefix}List.empty,
|
||||
|
||||
trs = empty ?
|
||||
[document.getElementById("${infoPrefix}NotFound").innerHTML] : <%-- from template#${infoPrefix}NotFound --%>
|
||||
${infoPrefix}List.inStrings(
|
||||
document.getElementById("${infoPrefix}Row").innerHTML, <%-- from template#${infoPrefix}Row --%>
|
||||
(str, dataItem) => str
|
||||
.replace(/{onclick}=""/gi, 'onclick="syslogControl.setCurrent(\'' + dataItem.getValue("LOG_ID") + '\');"')
|
||||
);
|
||||
$("#${infoPrefix}List").html(trs.join());
|
||||
$("#${infoPrefix}-query button.not-empty").prop("disabled", empty);
|
||||
|
||||
$("#${infoPrefix}Paging").setPaging({
|
||||
list:${infoPrefix}Control.dataset,
|
||||
prefix:${infoPrefix}Control.prefix,
|
||||
start:obj.${infoPrefix}Start,
|
||||
totalSize:obj.${infoPrefix}Total,
|
||||
fetchSize:obj.${infoPrefix}Fetch,
|
||||
func:"${infoPrefix}Control.load({index})"
|
||||
});
|
||||
};
|
||||
|
||||
${infoPrefix}Control.onCurrentChange = item => {
|
||||
if (!item) return;
|
||||
|
||||
let key = item.data.LOG_ID;
|
||||
$("#${infoPrefix}List").setCurrentRow(key);
|
||||
};
|
||||
|
||||
$("#${infoPrefix}term").onEnterPress(search${infoPrefix}s);
|
||||
|
||||
$(function(){
|
||||
${onload}
|
||||
${infoPrefix}Control.setData({
|
||||
${infoPrefix}List:${syslogList},
|
||||
${infoPrefix}Start:${syslogStart},
|
||||
${infoPrefix}Fetch:${syslogFetch},
|
||||
${infoPrefix}Total:${syslogTotal}
|
||||
});
|
||||
$("#${infoPrefix}-query #${infoPrefix}fromDate, #${infoPrefix}-query #${infoPrefix}toDate").datePicker();
|
||||
});
|
||||
//# sourceURL=${infoPrefix}-main.jsp
|
||||
</script>
|
||||
@ -1,101 +0,0 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
<form id="dept-form">
|
||||
<div class="row g-3">
|
||||
<div class="col-md-12">
|
||||
<div class="row">
|
||||
<label class="col-sm-3 col-form-label text-sm-end" for="deptID">부서코드</label>
|
||||
<div class="col-sm-9">
|
||||
<input name="deptID" type="text" required data-map="DEPT_CD" maxlength="7" class="form-control" placeholder="부서코드" />
|
||||
<input name="sggID" type="hidden" data-map="SGG_CD" />
|
||||
<input name="instCode" type="hidden" data-map="INST_CD" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-12">
|
||||
<div class="row">
|
||||
<label class="col-sm-3 col-form-label text-sm-end" for="name">부서이름</label>
|
||||
<div class="col-sm-9">
|
||||
<input name="name" type="text" required data-map="DEPT_NM" maxlength="100" class="form-control" placeholder="부서이름" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-12">
|
||||
<div class="row">
|
||||
<label class="col-sm-3 col-form-label text-sm-end" for="telno">전화번호</label>
|
||||
<div class="col-sm-9">
|
||||
<input name="telno" type="text" data-map="DEPT_TELNO" maxlength="20" class="form-control" placeholder="전화번호"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-12">
|
||||
<div class="row">
|
||||
<label class="col-sm-3 col-form-label text-sm-end" for="faxno">팩스번호</label>
|
||||
<div class="col-sm-9">
|
||||
<input name="faxno" type="text" data-map="DEPT_FXNO" maxlength="20" class="form-control" placeholder="팩스번호"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-12">
|
||||
<div class="row">
|
||||
<label class="col-sm-3 col-form-label text-sm-end" for="createdBy">등록자</label>
|
||||
<div class="col-sm-9">
|
||||
<input type="text" data-map="RGTR" readonly class="form-control" placeholder="등록자"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-12">
|
||||
<div class="row">
|
||||
<label class="col-sm-3 col-form-label text-sm-end" for="description">등록일자</label>
|
||||
<div class="col-sm-9">
|
||||
<input type="text" data-map="REG_DT" readonly class="form-control" placeholder="등록일자"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-12">
|
||||
<div class="row">
|
||||
<label class="col-sm-3 col-form-label text-sm-end" for="description">사용여부</label>
|
||||
<div class="col-sm-9" style="padding:.5em .7em;">
|
||||
<input name="useYN" type="hidden" data-map="USE_YN" />
|
||||
<span id="deptInUse"></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mt-4 justify-content-end">
|
||||
<div class="col-sm-12" style="text-align:right;">
|
||||
<button onclick="saveDept();" type="button" class="btn btn-primary">저장</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<script type="text/javascript">
|
||||
|
||||
var deptFields = new FormFields("#dept-form");
|
||||
|
||||
sggDeptControl.depts.setInfo = obj => {
|
||||
let info = obj.data;
|
||||
deptFields.set(sggDeptControl.depts, obj);
|
||||
let create = isEmpty(info.DEPT_CD);
|
||||
$("input[name='deptID']").prop("readonly", !create);
|
||||
$("#dept-form input").onEnterPress(saveDept);
|
||||
$("#deptInUse").html("Y" == info.USE_YN ? "사용 중" : "사용하지 않음");
|
||||
document.querySelector("input[name='" + (create ? "deptID" : "name") + "']").focus();
|
||||
}
|
||||
|
||||
sggDeptControl.depts.onModify = (changed) => {
|
||||
if (["DEPT_NM"].filter(e => changed.includes(e)).length < 1)
|
||||
return;
|
||||
|
||||
renderDeptList();
|
||||
sggDeptControl.depts.dataset.setState();
|
||||
}
|
||||
|
||||
function saveDept() {
|
||||
if (!$("#dept-form input").validInputs()) return;
|
||||
|
||||
dialog.alert({
|
||||
content:"현재 부서 정보를 저장하시겠습니까?",
|
||||
onOK:() => sggDeptControl.depts.save(deptFields.get())
|
||||
});
|
||||
}
|
||||
//# sourceURL=dept-info.jsp
|
||||
</script>
|
||||
@ -1,98 +0,0 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
|
||||
<form id="password-form">
|
||||
<div class="row g-3">
|
||||
<div class="col-md-12">
|
||||
<div class="row">
|
||||
<label class="col-sm-4 col-form-label text-sm-end required" for="currentPassword">
|
||||
현재 비밀번호
|
||||
</label>
|
||||
<div class="col-sm-8">
|
||||
<input name="currentPassword" type="password" required class="form-control" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-12">
|
||||
<div class="row">
|
||||
<label class="col-sm-4 col-form-label text-sm-end required" for="password">
|
||||
새 비밀번호
|
||||
</label>
|
||||
<div class="col-sm-8">
|
||||
<input name="password" type="password" required class="form-control" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-12">
|
||||
<div class="row">
|
||||
<label class="col-sm-4 col-form-label text-sm-end required" for="confirmPassword">
|
||||
새 비밀번호 확인
|
||||
</label>
|
||||
<div class="col-sm-8">
|
||||
<input name="confirmPassword" type="password" required class="form-control" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mt-4 justify-content-end">
|
||||
<div class="col-md-6">
|
||||
<div class="row justify-content-end">
|
||||
<div class="col-sm-3">
|
||||
<button type="button" onclick="validPassword();" class="btn btn-primary">저장</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<script>
|
||||
function validPassword(){
|
||||
if($("#password-form input[name='currentPassword']").val() == ""){
|
||||
dialog.alert("현재 비밀번호를 입력하세요.");
|
||||
return;
|
||||
}
|
||||
if($("#password-form input[name='password']").val() == ""){
|
||||
dialog.alert("새 비밀번호를 입력하세요.");
|
||||
return;
|
||||
}
|
||||
if($("#password-form input[name='confirmPassword']").val() == ""){
|
||||
dialog.alert("새 비밀번호 확인을 입력하세요.");
|
||||
return;
|
||||
}
|
||||
|
||||
let match = Array.from(document.querySelectorAll("input[name='password'],input[name='confirmPassword']"))
|
||||
.map(input => input.value)
|
||||
.reduce((total, current) => total == current);
|
||||
if (!match) {
|
||||
dialog.alert({
|
||||
content:"새 비밀번호와 새 비밀번호 확인이 다릅니다.",
|
||||
onClose:function(){
|
||||
document.querySelector("input[name='confirmPassword']").focus();
|
||||
}
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
savePassword();
|
||||
}
|
||||
|
||||
function savePassword(){
|
||||
|
||||
ajax.post({
|
||||
url : wctx.url("/user/changePassword.do"),
|
||||
data : {
|
||||
userIDs : MY_INFO.id,
|
||||
password : $("#password-form input[name='password']").val(),
|
||||
currentPassword : $("#password-form input[name='currentPassword']").val(),
|
||||
init : false
|
||||
},
|
||||
success : (resp) => {
|
||||
if(resp.saved){
|
||||
dialog.alert("비밀번호 변경에 성공하였습니다.");
|
||||
dialog.close("changePasswordDialog");
|
||||
} else {
|
||||
dialog.alert("비밀번호 변경에 실패하였습니다.");
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
</script>
|
||||
@ -1,57 +0,0 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
<!-- Page Body -->
|
||||
<div id="DataTables_Table_0_wrapper" class="dataTables_wrapper dt-bootstrap5 no-footer">
|
||||
<table class="datatables-ajax table table-bordered dataTable no-footer" id="DataTables_Table_0">
|
||||
<thead>
|
||||
<tr><th class="sorting sorting_asc" tabindex="0" aria-controls="DataTables_Table_0" rowspan="1" colspan="2" aria-sort="ascending" style="">시군구</th>
|
||||
<th class="sorting" tabindex="0" aria-controls="DataTables_Table_0" rowspan="1" colspan="2" style="">기관</th>
|
||||
<th class="sorting" tabindex="0" aria-controls="DataTables_Table_0" rowspan="1" colspan="2" style="">부서</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="sggDeptList">
|
||||
</tbody>
|
||||
<template id="sggDeptRow">
|
||||
<tr data-key="{dataKey}">
|
||||
<td onclick="sggDepts.setCurrent('{dataKey}')">{SGG_CD}</td>
|
||||
<td onclick="sggDepts.setCurrent('{dataKey}')">{SGG_NM}</td>
|
||||
<td onclick="sggDepts.setCurrent('{dataKey}')">{INST_CD}</td>
|
||||
<td onclick="sggDepts.setCurrent('{dataKey}')">{INST_NM}</td>
|
||||
<td onclick="sggDepts.setCurrent('{dataKey}')">{DEPT_CD}</td>
|
||||
<td onclick="sggDepts.setCurrent('{dataKey}')">{DEPT_NM}</td>
|
||||
</tr>
|
||||
</template>
|
||||
<template id="sggDeptNotFound">
|
||||
<tr class="odd">
|
||||
<td valign="top" colspan="4" class="dataTables_empty text-center">부서정보를 찾지 못했습니다.</td>
|
||||
</tr>
|
||||
</template>
|
||||
</table>
|
||||
</div>
|
||||
<!--/ Page Body -->
|
||||
<script >
|
||||
var sggDepts = new Dataset({
|
||||
keymapper: info => info.dataKey,
|
||||
onDatasetChange: obj => {
|
||||
let empty = sggDepts.empty;
|
||||
|
||||
let trs = empty ?
|
||||
[document.getElementById("sggDeptNotFound").innerHTML] : <%-- from template#${infoPrefix}NotFound --%>
|
||||
sggDepts.inStrings(document.getElementById("sggDeptRow").innerHTML); <%-- from template#${infoPrefix}Row --%>
|
||||
$("#sggDeptList").html(trs.join());
|
||||
},
|
||||
onCurrentChange: item => {
|
||||
if (!item) return;
|
||||
|
||||
let key = item.data.dataKey;
|
||||
$("#sggDeptList").setCurrentRow(key);
|
||||
}
|
||||
});
|
||||
|
||||
function getSelectedDept() {
|
||||
return sggDepts.getCurrent();
|
||||
}
|
||||
|
||||
sggDepts.setData(${sggDepts});
|
||||
//# sourceURL=select-sggDepts.jsp
|
||||
</script>
|
||||
@ -1,128 +0,0 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
<c:set var="prefixName" scope="request">사용자</c:set>
|
||||
<!-- Page Body -->
|
||||
<div class="card">
|
||||
<div class="card-datatable text-nowrap">
|
||||
<div id="DataTables_Table_0_wrapper" class="dataTables_wrapper dt-bootstrap5 no-footer">
|
||||
<div class="d-flex flex-row justify-content-between p-3">
|
||||
<div>
|
||||
<div class="input-group" id="DataTables_Table_0_length">
|
||||
<select id="_userBy" onchange="document.getElementById('_userTerm').focus();" aria-controls="DataTables_Table_0" class="form-select">
|
||||
<option value="${infoPrefix}Name">이름</option>
|
||||
<option value="${infoPrefix}Account">계정</option>
|
||||
</select>
|
||||
<input id="_userTerm" autofocus type="text" placeholder="조회 조건을 입력하십시오." class="form-control">
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<button onclick="search${infoPrefix}s();" class="btn btn-primary">찾기</button>
|
||||
</div>
|
||||
</div>
|
||||
<table class="datatables-ajax table table-bordered dataTable no-footer" id="DataTables_Table_0" aria-describedby="DataTables_Table_0_info">
|
||||
<thead id="_${infoPrefix}Thead">
|
||||
<tr><th tabindex="0" aria-controls="DataTables_Table_0" rowspan="1" colspan="1" style="text-align:center;"><input onchange="${infoPrefix}Control.dataset.select(this.checked);" type="checkbox" class="form-check-input"></th>
|
||||
<th class="sorting" tabindex="0" aria-controls="DataTables_Table_0" rowspan="1" colspan="1" aria-label="Email: activate to sort column ascending" >시군구명</th>
|
||||
<th class="sorting" tabindex="0" aria-controls="DataTables_Table_0" rowspan="1" colspan="1" aria-label="Email: activate to sort column ascending" >기관명</th>
|
||||
<th class="sorting" tabindex="0" aria-controls="DataTables_Table_0" rowspan="1" colspan="1" aria-label="Email: activate to sort column ascending" >부서명</th>
|
||||
<th class="sorting sorting_asc" tabindex="0" aria-controls="DataTables_Table_0" rowspan="1" colspan="1" aria-sort="ascending" aria-label="Full name: activate to sort column descending" >계정</th>
|
||||
<th class="sorting" tabindex="0" aria-controls="DataTables_Table_0" rowspan="1" colspan="1" aria-label="Email: activate to sort column ascending" >이름</th>
|
||||
<th class="sorting" tabindex="0" aria-controls="DataTables_Table_0" rowspan="1" colspan="1" aria-label="Start date: activate to sort column ascending" >등록일자</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="_${infoPrefix}List">
|
||||
</tbody>
|
||||
<template id="_${infoPrefix}Row">
|
||||
<tr data-key="{USER_ID}">
|
||||
<td style="text-align:center;"><input value="{USER_ID}" onchange="${infoPrefix}Control.dataset.select('{USER_ID}', this.checked);" type="checkbox" class="form-check-input"></td>
|
||||
<td onclick="${infoPrefix}Control.setCurrent('{USER_ID}')" ondblclick="${infoPrefix}Control.getInfo({})">{SGG_NM}</td>
|
||||
<td onclick="${infoPrefix}Control.setCurrent('{USER_ID}')" ondblclick="${infoPrefix}Control.getInfo({})">{INST_NM}</td>
|
||||
<td onclick="${infoPrefix}Control.setCurrent('{USER_ID}')" ondblclick="${infoPrefix}Control.getInfo({})">{DEPT_NM}</td>
|
||||
<td onclick="${infoPrefix}Control.setCurrent('{USER_ID}')" ondblclick="${infoPrefix}Control.getInfo({})">{USER_ACNT}</td>
|
||||
<td onclick="${infoPrefix}Control.setCurrent('{USER_ID}')" ondblclick="${infoPrefix}Control.getInfo({})">{USER_NM}</td>
|
||||
<td onclick="${infoPrefix}Control.setCurrent('{USER_ID}')" ondblclick="${infoPrefix}Control.getInfo({})">{REG_DT}</td>
|
||||
</tr>
|
||||
</template>
|
||||
<template id="_${infoPrefix}NotFound">
|
||||
<tr class="odd">
|
||||
<td valign="top" colspan="7" class="dataTables_empty text-center">${prefixName} 정보를 찾지 못했습니다.</td>
|
||||
</tr>
|
||||
</template>
|
||||
</table>
|
||||
<div class="d-flex flex-row p-3 justify-content-between">
|
||||
<label id="_${infoPrefix}PagingInfo" class="dataTables_info" role="status" aria-live="polite"></label>
|
||||
<ul id="_${infoPrefix}Paging" class="pagination pagination-primary">
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!--/ Page Body -->
|
||||
<script >
|
||||
var ${infoPrefix}Control = new UserControl();
|
||||
|
||||
function getSelectedUser() {
|
||||
let selected = ${infoPrefix}Control.dataset.getKeys("selected");
|
||||
if (selected.length < 1)
|
||||
return dialog.alert("사용자를 선택하십시오.");
|
||||
else
|
||||
return selected;
|
||||
}
|
||||
|
||||
function search${infoPrefix}s() {
|
||||
${infoPrefix}Control.query = {
|
||||
by:$("#_userBy").val(),
|
||||
term:$("#_userTerm").val()
|
||||
};
|
||||
${infoPrefix}Control.load(1);
|
||||
}
|
||||
|
||||
${infoPrefix}Control.onDatasetChange = obj => {
|
||||
let ${infoPrefix}List = ${infoPrefix}Control.dataset;
|
||||
let empty = ${infoPrefix}List.empty;
|
||||
|
||||
let trs = empty ?
|
||||
[document.getElementById("_${infoPrefix}NotFound").innerHTML] : <%-- from template#${infoPrefix}NotFound --%>
|
||||
${infoPrefix}List.inStrings(document.getElementById("_${infoPrefix}Row").innerHTML); <%-- from template#${infoPrefix}Row --%>
|
||||
$("#_${infoPrefix}List").html(trs.join());
|
||||
$("#_${infoPrefix}Thead").find("th input[type='checkbox']").prop("checked", false);
|
||||
|
||||
$("#_${infoPrefix}Paging").setPaging({
|
||||
list:${infoPrefix}Control.dataset,
|
||||
prefix:${infoPrefix}Control.prefix,
|
||||
start:obj.${infoPrefix}Start,
|
||||
totalSize:obj.${infoPrefix}Total,
|
||||
fetchSize:obj.${infoPrefix}Fetch,
|
||||
func:"${infoPrefix}Control.load({index})"
|
||||
});
|
||||
};
|
||||
|
||||
${infoPrefix}Control.onCurrentChange = item => {
|
||||
if (!item) return;
|
||||
|
||||
let key = item.data.USER_ID;
|
||||
$("#_${infoPrefix}List").setCurrentRow(key);
|
||||
};
|
||||
|
||||
${infoPrefix}Control.onSelectionChange = selected => {
|
||||
let ${infoPrefix}List = ${infoPrefix}Control.dataset;
|
||||
let keys = selected.map(e => ${infoPrefix}List.getKey(e));
|
||||
$("#_${infoPrefix}List input[type='checkbox']").each(function() {
|
||||
let checkbox = $(this);
|
||||
checkbox.prop("checked", keys.includes(checkbox.val()));
|
||||
});
|
||||
};
|
||||
|
||||
$("#_userTerm").onEnterPress(search${infoPrefix}s);
|
||||
|
||||
$(function(){
|
||||
${onload}
|
||||
${infoPrefix}Control.setData({
|
||||
${infoPrefix}List:${userList},
|
||||
${infoPrefix}Start:${userStart},
|
||||
${infoPrefix}Fetch:${userFetch},
|
||||
${infoPrefix}Total:${userTotal}
|
||||
});
|
||||
});
|
||||
//# sourceURL=select-user.jsp
|
||||
</script>
|
||||
@ -1,246 +0,0 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
<c:set var="prefixName" scope="request">기관 정보</c:set>
|
||||
<!-- Page Body -->
|
||||
<div class="d-flex flex-column flex-grow-1">
|
||||
<div id="DataTables_Table_0_wrapper" class="dataTables_wrapper dt-bootstrap5 no-footer">
|
||||
|
||||
<div class="d-flex flex-row justify-content-evenly">
|
||||
<div style="width:49%;">
|
||||
<h5 class="mt-3">${prefixName}</h5>
|
||||
<div class="d-flex flex-row justify-content-between p-3">
|
||||
<%--div>
|
||||
<div class="input-group" id="${infoPrefix}-query">
|
||||
<select id="${infoPrefix}by" name="by" onchange="document.getElementById('${infoPrefix}term').focus();" aria-controls="DataTables_Table_0" class="form-select">
|
||||
<option value="sggName">이름</option>
|
||||
<option value="sggID">아이디</option>
|
||||
</select>
|
||||
<input id="${infoPrefix}term" name="term" autofocus type="text" placeholder="조회 조건을 입력하십시오." class="form-control">
|
||||
</div>
|
||||
</div--%>
|
||||
<div>
|
||||
<%--button onclick="searchSggs();" class="btn btn-primary">찾기</button--%>
|
||||
<button onclick="sggDeptControl.newSgg();" class="btn btn-primary">+ 추가</button>
|
||||
<button id="btnRemoveSggs" onclick="removeSggs();" class="btn btn-primary">- 제거</button>
|
||||
</div>
|
||||
</div>
|
||||
<table class="datatables-ajax table table-bordered dataTable no-footer" id="DataTables_Table_0" aria-describedby="DataTables_Table_0_info">
|
||||
<thead id="sggThead">
|
||||
<tr><th tabindex="0" aria-controls="DataTables_Table_0" rowspan="1" colspan="1" style="text-align:center;"><input onchange="sggDeptControl.sggs.select(this.checked);" type="checkbox" class="form-check-input"></th>
|
||||
<th class="text-center sorting sorting_asc" tabindex="0" aria-controls="DataTables_Table_0" rowspan="1" colspan="2" aria-sort="ascending">시군구</th>
|
||||
<th class="text-center sorting" tabindex="0" aria-controls="DataTables_Table_0" rowspan="1" colspan="2">기관</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="sggList">
|
||||
</tbody>
|
||||
<template id="sggRow">
|
||||
<tr data-key="{SGG_CD}"{notUsed}>
|
||||
<td style="text-align:center;"><input value="{SGG_CD}" onchange="sggDeptControl.sggs.select('{SGG_CD}', this.checked);" type="checkbox" class="form-check-input"></td>
|
||||
<td onclick="sggDeptControl.sggs.setCurrent('{SGG_CD}')" ondblclick="sggDeptControl.sggs.getInfo({})">{SGG_CD}</td>
|
||||
<td onclick="sggDeptControl.sggs.setCurrent('{SGG_CD}')" ondblclick="sggDeptControl.sggs.getInfo({})">{SGG_NM}</td>
|
||||
<td onclick="sggDeptControl.sggs.setCurrent('{SGG_CD}')" ondblclick="sggDeptControl.sggs.getInfo({})">{INST_CD}</td>
|
||||
<td onclick="sggDeptControl.sggs.setCurrent('{SGG_CD}')" ondblclick="sggDeptControl.sggs.getInfo({})">{INST_NM}</td>
|
||||
</tr>
|
||||
</template>
|
||||
<template id="sggNotFound">
|
||||
<tr class="odd">
|
||||
<td valign="top" colspan="5" class="dataTables_empty text-center">${prefixName}를 찾지 못했습니다.</td>
|
||||
</tr>
|
||||
</template>
|
||||
</table>
|
||||
<div class="d-flex flex-row p-3 justify-content-between">
|
||||
<label id="sggPagingInfo" class="dataTables_info" role="status" aria-live="polite"></label>
|
||||
<ul id="sggPaging" class="pagination pagination-primary">
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div style="width:49%;">
|
||||
<h5 class="mt-3">부서 정보</h5>
|
||||
<div class="d-flex flex-row justify-content-end p-3">
|
||||
<div>
|
||||
<button id="btnAddDept" onclick="sggDeptControl.newDept();" class="btn btn-primary">+ 추가</button>
|
||||
<button id="btnRemoveDepts" onclick="removeDepts();" class="btn btn-primary">- 제거</button>
|
||||
</div>
|
||||
</div>
|
||||
<table class="datatables-ajax table table-bordered dataTable no-footer" id="DataTables_Table_0" aria-describedby="DataTables_Table_0_info">
|
||||
<thead id="deptThead">
|
||||
<tr><th tabindex="0" aria-controls="DataTables_Table_0" rowspan="1" colspan="1" style="text-align:center;"><input id="deptToggler" onchange="sggDeptControl.depts.select(this.checked);" type="checkbox" class="form-check-input"></th>
|
||||
<th class="sorting" tabindex="0" aria-controls="DataTables_Table_0" rowspan="1" colspan="1">부서코드</th>
|
||||
<th class="sorting" tabindex="0" aria-controls="DataTables_Table_0" rowspan="1" colspan="1">부서이름</th>
|
||||
<th class="sorting" tabindex="0" aria-controls="DataTables_Table_0" rowspan="1" colspan="1">전화번호</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="deptList">
|
||||
</tbody>
|
||||
<template id="deptRow">
|
||||
<tr data-key="{DEPT_CD}"{notUsed}>
|
||||
<td style="text-align:center;"><input value="{DEPT_CD}" onchange="sggDeptControl.depts.select('{DEPT_CD}', this.checked);" type="checkbox" class="form-check-input"></td>
|
||||
<td onclick="sggDeptControl.depts.setCurrent('{DEPT_CD}')" ondblclick="sggDeptControl.depts.getInfo({})">{DEPT_CD}</td>
|
||||
<td onclick="sggDeptControl.depts.setCurrent('{DEPT_CD}')" ondblclick="sggDeptControl.depts.getInfo({})">{DEPT_NM}</td>
|
||||
<td onclick="sggDeptControl.depts.setCurrent('{DEPT_CD}')" ondblclick="sggDeptControl.depts.getInfo({})">{DEPT_TELNO}</td>
|
||||
</tr>
|
||||
</template>
|
||||
<template id="deptNotFound">
|
||||
<tr class="odd">
|
||||
<td valign="top" colspan="4" class="dataTables_empty text-center">부서 정보를 찾지 못했습니다.</td>
|
||||
</tr>
|
||||
</template>
|
||||
</table>
|
||||
<div class="d-flex flex-row p-3 justify-content-between">
|
||||
<label id="deptPagingInfo" class="dataTables_info" role="status" aria-live="polite"></label>
|
||||
<ul id="deptPaging" class="pagination pagination-primary">
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!--/ Page Body -->
|
||||
<script >
|
||||
var sggDeptControl = new SggDeptControl();
|
||||
sggDeptControl.sggs.query = {includeAll: true};
|
||||
<%--
|
||||
function searchSggs() {
|
||||
sggDeptControl.sggs.query = {
|
||||
by:$("#${infoPrefix}-query [name='by']").val(),
|
||||
term:$("#${infoPrefix}-query [name='term']").val()
|
||||
includeAll: true
|
||||
};
|
||||
sggDeptControl.sggs.load(1);
|
||||
}--%>
|
||||
|
||||
function removeSggs() {
|
||||
dialog.alert({
|
||||
content:"선택한 ${prefixName} 정보를 제거하시겠습니까?",
|
||||
onOK:() => {
|
||||
sggDeptControl.sggs.remove();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function removeDepts() {
|
||||
dialog.alert({
|
||||
content:"선택한 코드를 삭제하시겠습니까?",
|
||||
onOK:() => {
|
||||
sggDeptControl.depts.remove();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function renderSggList() {
|
||||
let sggList = sggDeptControl.sggs.dataset;
|
||||
let empty = sggList.empty;
|
||||
|
||||
let trs = empty ?
|
||||
[document.getElementById("sggNotFound").innerHTML] : <%-- from template#sggNotFound --%>
|
||||
sggList.inStrings(
|
||||
document.getElementById("sggRow").innerHTML,
|
||||
(tmpl, item) => tmpl.replace(/{notUsed}/gi, item.getValue("USE_YN") == "N" ? "class=\"not-used\"" : "")
|
||||
); <%-- from template#sggRow --%>
|
||||
$("#sggList").html(trs.join());
|
||||
$("#sggThead").find("th input[type='checkbox']").prop("checked", false);
|
||||
$("#deptThead").find("th input[type='checkbox']").prop("checked", false);
|
||||
}
|
||||
|
||||
sggDeptControl.sggs.onDatasetChange = obj => {
|
||||
renderSggList();
|
||||
|
||||
$("#sggPaging").setPaging({
|
||||
list:sggDeptControl.sggs.dataset,
|
||||
prefix:sggDeptControl.sggs.prefix,
|
||||
start:obj.sggStart,
|
||||
totalSize:obj.sggTotal,
|
||||
fetchSize:obj.sggFetch,
|
||||
func:"sggDeptControl.sggs.load({index})"
|
||||
});
|
||||
};
|
||||
|
||||
sggDeptControl.sggs.onCurrentChange = item => {
|
||||
$("#btnAddDept").prop("disabled", !item);
|
||||
if (!item) return;
|
||||
|
||||
let key = item.data.SGG_CD;
|
||||
$("#sggList").setCurrentRow(key);
|
||||
sggDeptControl.getDepts({includeAll: true});
|
||||
};
|
||||
|
||||
sggDeptControl.sggs.onSelectionChange = selected => {
|
||||
let sggList = sggDeptControl.sggs.dataset;
|
||||
let keys = selected.map(e => sggList.getKey(e));
|
||||
$("#sggList input[type='checkbox']").each(function() {
|
||||
let checkbox = $(this);
|
||||
checkbox.prop("checked", keys.includes(checkbox.val()));
|
||||
});
|
||||
|
||||
$("#btnRemoveSggs").prop("disabled", keys.length < 1);
|
||||
};
|
||||
|
||||
function renderDeptList() {
|
||||
let deptList = sggDeptControl.depts.dataset;
|
||||
let empty = deptList.empty;
|
||||
|
||||
let trs = empty ?
|
||||
[document.getElementById("deptNotFound").innerHTML] : <%-- from template#sggNotFound --%>
|
||||
deptList.inStrings(
|
||||
document.getElementById("deptRow").innerHTML,
|
||||
(tmpl, item) => tmpl.replace(/{notUsed}/gi, item.getValue("USE_YN") == "N" ? "class=\"not-used\"" : "")
|
||||
); <%-- from template#sggRow --%>
|
||||
$("#deptList").html(trs.join());
|
||||
$("#deptToggler").prop("checked", false);
|
||||
}
|
||||
|
||||
sggDeptControl.depts.onDatasetChange = obj => {
|
||||
renderDeptList();
|
||||
|
||||
$("#deptPaging").setPaging({
|
||||
list:sggDeptControl.depts.dataset,
|
||||
prefix:sggDeptControl.depts.prefix,
|
||||
start:obj ? obj.deptStart : -1,
|
||||
totalSize:obj ? obj.deptTotal : 0,
|
||||
fetchSize:obj ? obj.deptFetch : 10,
|
||||
func:"sggDeptControl.depts.load({index})"
|
||||
});
|
||||
};
|
||||
|
||||
sggDeptControl.depts.onCurrentChange = item => {
|
||||
if (!item) return;
|
||||
|
||||
let data = item.data;
|
||||
let key = data.DEPT_CD;
|
||||
$("#deptList").setCurrentRow(key);
|
||||
};
|
||||
|
||||
sggDeptControl.depts.onSelectionChange = selected => {
|
||||
let deptList = sggDeptControl.depts.dataset;
|
||||
let keys = selected.map(e => deptList.getKey(e));
|
||||
$("#deptList input[type='checkbox']").each(function() {
|
||||
let checkbox = $(this);
|
||||
checkbox.prop("checked", keys.includes(checkbox.val()));
|
||||
});
|
||||
|
||||
let sgg = sggDeptControl.sggs.getCurrent();
|
||||
sgg = sgg ? sgg.USE_YN : "N";
|
||||
|
||||
$("#btnAddDept").prop("disabled", "N" == sgg);
|
||||
$("#btnRemoveDepts").prop("disabled", selected.length < 1);
|
||||
};
|
||||
|
||||
$(function(){
|
||||
${onload}
|
||||
sggDeptControl.sggs.setData({
|
||||
sggList:${sggList},
|
||||
sggStart:${sggStart},
|
||||
sggFetch:${sggFetch},
|
||||
sggTotal:${sggTotal}
|
||||
});
|
||||
sggDeptControl.depts.setData({
|
||||
deptList:${deptList},
|
||||
deptStart:${deptStart},
|
||||
deptFetch:${deptFetch},
|
||||
deptTotal:${deptTotal}
|
||||
});
|
||||
|
||||
<%-- $("#${infoPrefix}term").onEnterPress(searchSggs); --%>
|
||||
});
|
||||
//# sourceURL=sgg-dept.jsp
|
||||
</script>
|
||||
@ -1,122 +0,0 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
<form id="sgg-form">
|
||||
<div class="row g-3">
|
||||
<div class="col-md-12">
|
||||
<div class="row">
|
||||
<label class="col-sm-3 col-form-label text-sm-end">시군구</label>
|
||||
<div class="col-sm-9">
|
||||
<div class="row justify-content-between" style="padding: 0 .75rem;">
|
||||
<input name="sggID" type="text" required data-map="SGG_CD" maxlength="5" class="form-control" style="width: 28%;" placeholder="시군구 코드" />
|
||||
<input name="sggName" type="text" required data-map="SGG_NM" maxlength="60" class="form-control" style="width: 70%;" placeholder="시군구 이름" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-12">
|
||||
<div class="row">
|
||||
<label class="col-sm-3 col-form-label text-sm-end">기관</label>
|
||||
<div class="col-sm-9">
|
||||
<div class="row justify-content-between" style="padding: 0 .75rem;">
|
||||
<select name="instType" data-map="INST_SE_CD" class="form-control" style="width: 24%;">
|
||||
<option value="">구분</option>
|
||||
<option value="01">시청</option>
|
||||
<option value="02">구청</option>
|
||||
<option value="03">군청</option>
|
||||
<option value="04">도청</option>
|
||||
<option value="05">출장소</option>
|
||||
<option value="06">사무소</option>
|
||||
</select>
|
||||
<input name="instCode" type="text" data-map="INST_CD" maxlength="7" class="form-control" style="width: 25%;" placeholder="기관 코드"/>
|
||||
<input name="instName" type="text" data-map="INST_NM" maxlength="100" class="form-control" style="width: 48%;" placeholder="기관 이름"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-12">
|
||||
<div class="row">
|
||||
<label class="col-sm-3 col-form-label text-sm-end">주소</label>
|
||||
<div class="col-sm-9">
|
||||
<div class="row justify-content-between" style="padding: 0 .75rem;">
|
||||
<input name="instAddress" type="text" data-map="INST_ADDR" maxlength="200" class="form-control" placeholder="주소"/>
|
||||
<input name="instDetailAddress" type="text" data-map="INST_DADDR" maxlength="200" class="form-control" style="margin: .5rem 0;" placeholder="상세주소"/>
|
||||
<input name="instZipCode" type="text" data-map="INST_ZIP" maxlength="6" class="form-control" style="width: 32%;" placeholder="기관 우편번호"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-12">
|
||||
<div class="row">
|
||||
<label class="col-sm-3 col-form-label text-sm-end">직인 파일</label>
|
||||
<div class="col-sm-9">
|
||||
<div class="row justify-content-between" style="padding: 0 .75rem;">
|
||||
<input name="officialSealFilepath" type="text" data-map="OFFCS_FILE_PATH" maxlength="200" class="form-control" placeholder="직인 파일경로"/>
|
||||
<input name="officialSealFilename" type="text" data-map="OFFCS_FILE_NM" maxlength="100" class="form-control" style="margin: .5rem 0;" placeholder="직인 파일이름"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-12">
|
||||
<div class="row">
|
||||
<label class="col-sm-3 col-form-label text-sm-end" for="createdBy">등록자</label>
|
||||
<div class="col-sm-9">
|
||||
<input type="text" data-map="RGTR" readonly class="form-control" placeholder="등록자"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-12">
|
||||
<div class="row">
|
||||
<label class="col-sm-3 col-form-label text-sm-end">등록일자</label>
|
||||
<div class="col-sm-9">
|
||||
<input type="text" data-map="REG_DT" readonly class="form-control" placeholder="등록일자"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-12">
|
||||
<div class="row">
|
||||
<label class="col-sm-3 col-form-label text-sm-end">사용여부</label>
|
||||
<div class="col-sm-9" style="padding:.5em .7em;">
|
||||
<input name="useYN" type="hidden" data-map="USE_YN" />
|
||||
<span id="sggInUse"></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mt-4 justify-content-end">
|
||||
<div class="col-sm-12" style="text-align:right;">
|
||||
<button onclick="saveSgg();" type="button" class="btn btn-primary">저장</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<script type="text/javascript">
|
||||
|
||||
var sggFields = new FormFields("#sgg-form");
|
||||
|
||||
sggDeptControl.sggs.setInfo = obj => {
|
||||
let info = obj.data;
|
||||
sggFields.set(sggDeptControl.sggs, obj);
|
||||
let create = isEmpty(info.SGG_CD);
|
||||
$("input[name='sggID']").prop("readonly", !create);
|
||||
$("#sgg-form input").onEnterPress(saveSgg);
|
||||
$("#sggInUse").html(info.USE_YN == "Y" ? "사용 중" : "사용하지 않음");
|
||||
|
||||
document.querySelector("input[name='" + (create ? "sggID" : "sggName") + "']").focus();
|
||||
}
|
||||
|
||||
sggDeptControl.sggs.onModify = (changed) => {
|
||||
if (["SGG_NM"].filter(e => changed.includes(e)).length < 1)
|
||||
return;
|
||||
|
||||
renderSggList();
|
||||
sggDeptControl.sggs.dataset.setState();
|
||||
}
|
||||
|
||||
function saveSgg() {
|
||||
if (!$("#sgg-form input").validInputs()) return;
|
||||
|
||||
dialog.alert({
|
||||
content:"현재 시군구 정보를 저장하시겠습니까?",
|
||||
onOK:() => sggDeptControl.sggs.save(sggFields.get())
|
||||
});
|
||||
}
|
||||
//# sourceURL=sgg-info.jsp
|
||||
</script>
|
||||
@ -1,309 +0,0 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
<form id="infoPrefix-form">
|
||||
<input type="hidden" name="cntnSeCd" data-map="CNTN_SE_CD" />
|
||||
|
||||
<div class="row g-3">
|
||||
<div class="col-md-6">
|
||||
<div class="row">
|
||||
<label class="col-sm-3 text-sm-end col-form-label required">
|
||||
사용자구분
|
||||
</label>
|
||||
<div class="col-sm-9">
|
||||
<select name="userSeCd" class="form-select" data-map="USER_SE_CD"
|
||||
required title="사용자구분">
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
</div>
|
||||
<div class="col-md-12">
|
||||
<label class="col-form-label required">
|
||||
시군구/기관 및 부서
|
||||
</label>
|
||||
<select name="institute" class="form-select no-bgi" data-map="NSTT_CD"
|
||||
required title="시군구/기관 및 부서" disabled>
|
||||
<option value=""></option>
|
||||
<c:forEach items="${allOgdpList}" var="item">
|
||||
<option value="${item.INST_CD}">${item.SGG_NM} / ${item.INST_NM}</option>
|
||||
</c:forEach>
|
||||
</select>
|
||||
<select name="deptCode" class="form-select no-bgi" data-map="DEPT_CD"
|
||||
required title="시군구/기관 및 부서" disabled>
|
||||
<option value=""></option>
|
||||
<c:forEach items="${allOgdpList}" var="item">
|
||||
<option value="${item.DEPT_CD}">${item.DEPT_NM}</option>
|
||||
</c:forEach>
|
||||
</select>
|
||||
<input type="hidden" name="orgID" data-map="ORG_ID" />
|
||||
|
||||
<div class="dropdown d-inline-flex">
|
||||
<button type="button"
|
||||
id="btnSelectOgdp"
|
||||
class="btn btn-md btn-secondary dropdown-toggle"
|
||||
data-bs-toggle="dropdown"
|
||||
>선택</button>
|
||||
<ul class="dropdown-menu oy-auto mh-px-300">
|
||||
<c:forEach items="${ableOgdpList}" var="item">
|
||||
<li>
|
||||
<a class="dropdown-item"
|
||||
onclick="setOgdpCodeValues('${item.INST_CD}','${item.DEPT_CD}','${item.SGG_CD}')">
|
||||
${item.OGDP_NM}
|
||||
</a>
|
||||
</li>
|
||||
</c:forEach>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-6">
|
||||
<div class="row">
|
||||
<label class="col-sm-3 col-form-label text-sm-end required" for="account"
|
||||
>계정</label>
|
||||
<div class="col-sm-9">
|
||||
<input name="id" type="hidden" data-map="USER_ID" />
|
||||
<input name="account" type="text" required data-map="USER_ACNT" class="form-control" placeholder="prefixName 계정" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="row">
|
||||
<label class="col-sm-3 col-form-label text-sm-end required" for="name"
|
||||
>이름</label
|
||||
>
|
||||
<div class="col-sm-9">
|
||||
<input name="name" type="text" required data-map="USER_NM" class="form-control" placeholder="prefixName 이름" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="row">
|
||||
<label class="col-sm-3 col-form-label text-sm-end required" for="password"
|
||||
>비밀번호</label
|
||||
>
|
||||
<div class="col-sm-9">
|
||||
<input name="password" type="password" required class="form-control" placeholder="비밀번호" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="row">
|
||||
<label class="col-sm-3 col-form-label text-sm-end required" for="confirmPassword"
|
||||
>비밀번호 확인</label
|
||||
>
|
||||
<div class="col-sm-9">
|
||||
<input name="confirmPassword" type="password" required class="form-control" placeholder="비밀번호 확인" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="row">
|
||||
<label class="col-sm-3 col-form-label text-sm-end required" for="emailAddress"
|
||||
>이메일 주소</label
|
||||
>
|
||||
<div class="col-sm-9">
|
||||
<input name="emailAddress" type="email" required data-map="EML_ADRS" class="form-control" placeholder="이메일 주소" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6 select2-primary">
|
||||
<div class="row">
|
||||
<label class="col-sm-3 col-form-label text-sm-end" for="phoneNo"
|
||||
>전화번호(유선)</label
|
||||
>
|
||||
<div class="col-sm-9">
|
||||
<input name="phoneNo" type="text" data-map="TELNO" class="form-control phone-mask" placeholder="000-0000-0000" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="row">
|
||||
<label class="col-sm-3 col-form-label text-sm-end" for="faxNo">팩스</label>
|
||||
<div class="col-sm-9">
|
||||
<input name="faxNo" type="text" data-map="FXNO" class="form-control phone-mask" placeholder="000-0000-0000"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="row">
|
||||
<label class="col-sm-3 col-form-label text-sm-end" for="positionName">직위</label>
|
||||
<div class="col-sm-9">
|
||||
<input name="positionName" type="text" data-map="POS_NM" class="form-control" placeholder="직위"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="row">
|
||||
<label class="col-sm-3 col-form-label text-sm-end" for="mobilePhoneNo">휴대전화</label>
|
||||
<div class="col-sm-9">
|
||||
<input name="mobilePhoneNo" type="text" data-map="MBL_TELNO" class="form-control" placeholder="휴대전화"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="row">
|
||||
<label class="col-sm-3 col-form-label text-sm-end" for="status">상태</label>
|
||||
<div class="col-sm-9">
|
||||
<c:if test='${currentUser.hasAuthorities("ROLE_ADMIN")}'>
|
||||
<div class="form-check form-check-inline mt-3">
|
||||
<input name="status" value="P" type="radio" data-map="STTS" class="form-check-input"/>
|
||||
<label class="form-check-label" for="approved">승인</label>
|
||||
</div>
|
||||
<div class="form-check form-check-inline">
|
||||
<input name="status" value="A" type="radio" data-map="STTS" class="form-check-input"/>
|
||||
<label class="form-check-label" for="applied">신청</label>
|
||||
</div>
|
||||
<div class="form-check form-check-inline">
|
||||
<input name="status" value="D" type="radio" data-map="STTS" class="form-check-input"/>
|
||||
<label class="form-check-label" for="removed">삭제</label>
|
||||
</div>
|
||||
</c:if>
|
||||
<c:if test='${!currentUser.hasAuthorities("ROLE_ADMIN")}'>
|
||||
<input name="status" type="hidden" data-map="STTS" class="form-control" placeholder="상태"/>
|
||||
<label class="col-form-label" for=STTS></label>
|
||||
</c:if>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mt-4 justify-content-end">
|
||||
<div class="col-md-6">
|
||||
<div class="row justify-content-end">
|
||||
<div class="col-sm-3">
|
||||
<button onclick="saveinfoPrefix();" type="button" class="btn btn-primary">저장</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<datalist id="allOgdpList">
|
||||
<c:forEach items="${allOgdpList}" var="item">
|
||||
<option value="${item.OGDP_CD}">${item.OGDP_NM}</option>
|
||||
</c:forEach>
|
||||
</datalist>
|
||||
|
||||
<datalist id="userSeCdList">
|
||||
<c:forEach items="${CMN008List}" var="item">
|
||||
<option value="${item.code}">${item.value}</option>
|
||||
</c:forEach>
|
||||
</datalist>
|
||||
|
||||
<script type="text/javascript">
|
||||
var infoPrefixFields = new FimsFormFields("#infoPrefix-form");
|
||||
|
||||
infoPrefixControl.setInfo = (obj) => {
|
||||
let create = isEmpty(obj.data.USER_ACNT);
|
||||
if(create){
|
||||
obj.data.CNTN_SE_CD = "01";
|
||||
}
|
||||
|
||||
let isInnerUser = (obj.data.CNTN_SE_CD == "01");
|
||||
if(!isInnerUser){
|
||||
$("#infoPrefix-form select[name='userSeCd']").html($("#userSeCdList option[value='21']").clone());
|
||||
$("#btnSelectOgdp").attr("hidden","hidden");
|
||||
} else {
|
||||
$("#infoPrefix-form select[name='userSeCd']").html($("#userSeCdList option[value!='21']").clone());
|
||||
$("#btnSelectOgdp").removeAttr("hidden");
|
||||
}
|
||||
|
||||
infoPrefixFields.set(infoPrefixControl,obj);
|
||||
|
||||
$("#infoPrefix-form input[name='account']").prop("readonly", !create);
|
||||
$("#infoPrefix-form input[name='name']").prop("readonly", !create);
|
||||
|
||||
if(create){
|
||||
$("#infoPrefix-form :radio[name='status'][value='D']").attr("hidden","hidden");
|
||||
$("#infoPrefix-form label[for='removed']").attr("hidden","hidden");
|
||||
} else {
|
||||
$("#infoPrefix-form :radio[name='status'][value='D']").removeAttr("hidden");
|
||||
$("#infoPrefix-form label[for='removed']").removeAttr("hidden");
|
||||
}
|
||||
|
||||
$("#infoPrefix-form input[type='password']").each(function(){
|
||||
let password = $(this).prop("required", create);
|
||||
let div = password.parent().parent().parent();
|
||||
if (create) {
|
||||
div.removeAttr("hidden");
|
||||
} else {
|
||||
div.attr("hidden","hidden");
|
||||
}
|
||||
});
|
||||
|
||||
let positionNameDiv = $("#infoPrefix-form input[name='positionName']").parent().parent().parent();
|
||||
if (isInnerUser) {
|
||||
positionNameDiv.removeAttr("hidden");
|
||||
} else {
|
||||
positionNameDiv.attr("hidden","hidden");
|
||||
}
|
||||
|
||||
let mobilePhoneNoDiv = $("#infoPrefix-form input[name='mobilePhoneNo']").parent().parent().parent();
|
||||
if (!isInnerUser) {
|
||||
mobilePhoneNoDiv.removeAttr("hidden");
|
||||
} else {
|
||||
mobilePhoneNoDiv.attr("hidden","hidden");
|
||||
}
|
||||
|
||||
let stts = "";
|
||||
if(obj.data.STTS == "D"){
|
||||
stts = "삭제";
|
||||
} else if(obj.data.STTS == "P"){
|
||||
stts = "승인";
|
||||
} else {
|
||||
stts = "신청";
|
||||
}
|
||||
$("#infoPrefix-form label[for='STTS']").html(stts);
|
||||
|
||||
$("#infoPrefix-form").find("input,select")
|
||||
.change(function() {
|
||||
let input = $(this),
|
||||
name = input.attr("data-map"),
|
||||
val = input.val();
|
||||
infoPrefixControl.setValue(name, val);
|
||||
})
|
||||
.onEnterPress(saveinfoPrefix);
|
||||
|
||||
document.querySelector("#infoPrefix-form input[name='" + (create ? "account" : "name") + "']").focus();
|
||||
}
|
||||
|
||||
infoPrefixControl.onModify = (changed) => {
|
||||
if (["USER_NM", "EML_ADRS", "MBL_TELNO"].filter(e => changed.includes(e)).length < 1)
|
||||
return;
|
||||
|
||||
renderinfoPrefixList();
|
||||
infoPrefixControl.dataset.setState();
|
||||
}
|
||||
|
||||
function saveinfoPrefix() {
|
||||
if (!$("#infoPrefix-form").find("input,select").validInputs()) return;
|
||||
|
||||
let match = Array.from(document.querySelectorAll("#infoPrefix-form input[type='password']"))
|
||||
.map(input => input.value)
|
||||
.reduce((total, current) => total == current);
|
||||
if (!match) {
|
||||
dialog.alert({
|
||||
content:"비밀번호와 비밀번호 확인이 다릅니다.",
|
||||
onClose:function(){
|
||||
document.querySelector("#infoPrefix-form input[name='confirmPassword']").focus();
|
||||
}
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
dialog.alert({
|
||||
content:"현재 prefixName 정보를 저장하시겠습니까?",
|
||||
onOK:() => {
|
||||
infoPrefixControl.save(infoPrefixFields.get());
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function setOgdpCodeValues(institute, deptCode, sggCd){
|
||||
$("#infoPrefix-form [name='institute']").val(institute).trigger("change");
|
||||
$("#infoPrefix-form [name='deptCode']").val(deptCode).trigger("change");
|
||||
$("#infoPrefix-form [name='orgID']").val(sggCd).trigger("change");
|
||||
}
|
||||
|
||||
//# sourceURL=user-info.jsp
|
||||
</script>
|
||||
@ -1,180 +0,0 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
<c:set var="prefixName" scope="request">사용자</c:set>
|
||||
<!-- Page Body -->
|
||||
<div class="d-flex flex-column flex-grow-1">
|
||||
<div id="DataTables_Table_0_wrapper" class="dataTables_wrapper dt-bootstrap5 no-footer">
|
||||
|
||||
<div class="d-flex flex-row justify-content-between p-3">
|
||||
<div class="d-flex flex-grow-1 me-5" id="${infoPrefix}-query">
|
||||
<div class="input-group me-3 w-px-400">
|
||||
<select id="${infoPrefix}by" name="by" onchange="document.getElementById('${infoPrefix}term').focus();" aria-controls="DataTables_Table_0" class="form-select">
|
||||
<option value="${infoPrefix}Name">이름</option>
|
||||
<option value="${infoPrefix}Account">계정</option>
|
||||
</select>
|
||||
<input id="${infoPrefix}term" name="term" autofocus type="text" placeholder="조회 조건을 입력하십시오." class="form-control">
|
||||
|
||||
</div>
|
||||
<label for="${infoPrefix}status" class="form-label fw-bold px-3 d-flex flex-wrap align-content-center justify-content-center">상태</label>
|
||||
<select id="${infoPrefix}status" name="status" class="form-select">
|
||||
<option value="">전체</option>
|
||||
<option value="A">신청</option>
|
||||
<option value="P">승인</option>
|
||||
<option value="D">삭제</option>
|
||||
</select>
|
||||
<label for="${infoPrefix}type" class="form-label fw-bold px-3 d-flex flex-wrap align-content-center justify-content-center">접속구분</label>
|
||||
<select id="${infoPrefix}type" name="type" class="form-select">
|
||||
<option value="">전체</option>
|
||||
<c:forEach items="${CMN009List}" var="item">
|
||||
<option value="${item.code}">${item.value}</option>
|
||||
</c:forEach>
|
||||
</select>
|
||||
</div>
|
||||
<div>
|
||||
<button onclick="search${infoPrefix}s();" class="btn btn-primary">찾기</button>
|
||||
<button onclick="${infoPrefix}Control.newInfo();" class="btn btn-primary">+ 추가</button>
|
||||
<button id="btnRemove${infoPrefix}s" onclick="remove${infoPrefix}s();" class="btn btn-primary">- 제거</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="table-responsive">
|
||||
<table class="datatables-ajax table table-bordered dataTable no-footer" id="DataTables_Table_0" aria-describedby="DataTables_Table_0_info">
|
||||
<thead id="${infoPrefix}Thead">
|
||||
<tr>
|
||||
<th tabindex="0" style="width: 158.828px; text-align:center;"><input onchange="${infoPrefix}Control.select(this.checked);" type="checkbox" class="form-check-input"></th>
|
||||
<th class="sorting" style="width: 146.156px;">상태</th>
|
||||
<th class="sorting" style="width: 146.156px;">사용자구분</th>
|
||||
<th class="sorting" style="width: 146.156px;">기관</th>
|
||||
<th class="sorting sorting_asc" aria-sort="ascending" style="width: 223.719px;">계정</th>
|
||||
<th class="sorting" style="width: 146.156px;">이름</th>
|
||||
<th class="sorting" style="width: 146.156px;">부서</th>
|
||||
<th class="sorting" style="width: 195.688px;">이메일</th>
|
||||
<th class="sorting" style="width: 160.141px;">전화번호(유선)</th>
|
||||
<th class="sorting" style="width: 230.469px;">등록일자</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="${infoPrefix}List">
|
||||
</tbody>
|
||||
<template id="${infoPrefix}Row">
|
||||
<tr data-key="{USER_ID}">
|
||||
<td style="text-align:center;"><input value="{USER_ID}" onchange="${infoPrefix}Control.select('{USER_ID}', this.checked);" type="checkbox" class="form-check-input"></td>
|
||||
<td {onclick} {ondblclick}>{STTS_NM}</td>
|
||||
<td {onclick} {ondblclick}>{USER_SE_NM}</td>
|
||||
<td {onclick} {ondblclick}>{INST_NM}</td>
|
||||
<td {onclick} {ondblclick}>{USER_ACNT}</td>
|
||||
<td {onclick} {ondblclick}>{USER_NM}</td>
|
||||
<td {onclick} {ondblclick}>{DEPT_NM}</td>
|
||||
<td {onclick} {ondblclick}>{EML_ADRS}</td>
|
||||
<td {onclick} {ondblclick}>{TELNO}</td>
|
||||
<td {onclick} {ondblclick}>{REG_DT}</td>
|
||||
</tr>
|
||||
</template>
|
||||
<template id="${infoPrefix}NotFound">
|
||||
<tr class="odd">
|
||||
<td valign="top" colspan="10" class="dataTables_empty text-center">${prefixName} 정보를 찾지 못했습니다.</td>
|
||||
</tr>
|
||||
</template>
|
||||
</table>
|
||||
</div>
|
||||
<div class="d-flex flex-row p-3 justify-content-between">
|
||||
<label id="${infoPrefix}PagingInfo" class="dataTables_info" role="status" aria-live="polite"></label>
|
||||
<ul id="${infoPrefix}Paging" class="pagination pagination-primary">
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!--/ Page Body -->
|
||||
<script >
|
||||
var ${infoPrefix}Control = new UserControl();
|
||||
|
||||
function search${infoPrefix}s() {
|
||||
${infoPrefix}Control.query = {
|
||||
by: $("#${infoPrefix}-query [name='by']").val(),
|
||||
term: $("#${infoPrefix}-query [name='term']").val(),
|
||||
status: $("#${infoPrefix}-query [name='status']").val(),
|
||||
type: $("#${infoPrefix}-query [name='type']").val(),
|
||||
};
|
||||
|
||||
if(${infoPrefix}Control.query.by == "userAccount"){
|
||||
${infoPrefix}Control.query.term = ${infoPrefix}Control.query.term.toUpperCase();
|
||||
}
|
||||
|
||||
${infoPrefix}Control.load(1);
|
||||
}
|
||||
|
||||
function remove${infoPrefix}s() {
|
||||
dialog.alert({
|
||||
content:"선택한 ${prefixName} 정보를 제거하시겠습니까?",
|
||||
onOK:() => {
|
||||
${infoPrefix}Control.remove();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function render${infoPrefix}List() {
|
||||
let ${infoPrefix}List = ${infoPrefix}Control.dataset;
|
||||
let empty = ${infoPrefix}List.empty;
|
||||
|
||||
let trs = empty ?
|
||||
[document.getElementById("${infoPrefix}NotFound").innerHTML] : <%-- from template#${infoPrefix}NotFound --%>
|
||||
${infoPrefix}List.inStrings(
|
||||
document.getElementById("${infoPrefix}Row").innerHTML, <%-- from template#${infoPrefix}Row --%>
|
||||
(str, dataItem) => str
|
||||
.replace(/{onclick}=""/gi, 'onclick="userControl.setCurrent(\'' + dataItem.getValue("USER_ID") + '\');"')
|
||||
.replace(/{ondblclick}=""/gi, 'ondblclick="userControl.getInfo(\'' + dataItem.getValue("USER_ID") + '\')"')
|
||||
<%-- OR
|
||||
(str, dataItem) => {
|
||||
let userID = dataItem.getValue("USER_ID");
|
||||
return str
|
||||
.replace(/{onclick}=""/gi, 'onclick="userControl.setCurrent(\'' + userID + '\');"')
|
||||
.replace(/{ondblclick}=""/gi, 'ondblclick="userControl.getInfo(\'' + userID + '\')"')
|
||||
}
|
||||
--%>
|
||||
);
|
||||
$("#${infoPrefix}List").html(trs.join());
|
||||
$("#${infoPrefix}Thead").find("th input[type='checkbox']").prop("checked", false);
|
||||
}
|
||||
|
||||
${infoPrefix}Control.onDatasetChange = obj => {
|
||||
render${infoPrefix}List();
|
||||
|
||||
$("#${infoPrefix}Paging").setPaging({
|
||||
list:${infoPrefix}Control.dataset,
|
||||
prefix:${infoPrefix}Control.prefix,
|
||||
start:obj.${infoPrefix}Start,
|
||||
totalSize:obj.${infoPrefix}Total,
|
||||
fetchSize:obj.${infoPrefix}Fetch,
|
||||
func:"${infoPrefix}Control.load({index})"
|
||||
});
|
||||
};
|
||||
|
||||
${infoPrefix}Control.onCurrentChange = item => {
|
||||
if (!item) return;
|
||||
|
||||
let key = item.data.USER_ID;
|
||||
$("#${infoPrefix}List").setCurrentRow(key);
|
||||
};
|
||||
|
||||
${infoPrefix}Control.onSelectionChange = selected => {
|
||||
let ${infoPrefix}List = ${infoPrefix}Control.dataset;
|
||||
let keys = selected.map(e => ${infoPrefix}List.getKey(e));
|
||||
$("#${infoPrefix}List input[type='checkbox']").each(function() {
|
||||
let checkbox = $(this);
|
||||
checkbox.prop("checked", keys.includes(checkbox.val()));
|
||||
});
|
||||
|
||||
$("#btnRemove${infoPrefix}s").prop("disabled", keys.length < 1);
|
||||
};
|
||||
|
||||
$("#${infoPrefix}term").onEnterPress(search${infoPrefix}s);
|
||||
|
||||
$(function(){
|
||||
${onload}
|
||||
${infoPrefix}Control.setData({
|
||||
${infoPrefix}List:${userList},
|
||||
${infoPrefix}Start:${userStart},
|
||||
${infoPrefix}Fetch:${userFetch},
|
||||
${infoPrefix}Total:${userTotal}
|
||||
});
|
||||
});
|
||||
//# sourceURL=user-main.jsp
|
||||
</script>
|
||||
@ -1,838 +0,0 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
|
||||
<div class="wrapper-dashboard">
|
||||
<div id="card1" class="card dashboard-total">
|
||||
<div class="card-body row">
|
||||
<div class="col px-4 card-separator d-flex flex-column align-items-center">
|
||||
<p class="mb-1" id="card1-1">
|
||||
<span class="skeleton">?/?</span>
|
||||
</p>
|
||||
<i class="svg-cctv-fixed w-px-30 d-block" title="고정형CCTV"></i>
|
||||
</div>
|
||||
<div class="col px-4 card-separator d-flex flex-column align-items-center">
|
||||
<p class="mb-1" id="card1-2">
|
||||
<span class="skeleton">?/?</span>
|
||||
</p>
|
||||
<i class="svg-crackdown-road w-px-30 d-block" title="도보"></i>
|
||||
</div>
|
||||
<div class="col px-4 card-separator d-flex flex-column align-items-center">
|
||||
<p class="mb-1" id="card1-3">
|
||||
<span class="skeleton">?/?</span>
|
||||
</p>
|
||||
<i class="svg-cctv-drive w-px-30 d-block" title="주행형CCTV"></i>
|
||||
</div>
|
||||
<div class="col px-4 d-flex flex-column align-items-center">
|
||||
<p class="mb-1" id="card1-4">
|
||||
<span class="skeleton">?/?</span>
|
||||
</p>
|
||||
<i class="svg-crackdown-minwon w-px-30 d-block" title="민원"></i>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-footer ms-auto">
|
||||
<a href="#" id="btnGoToCrdn">단속관리 바로가기 ></a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="card2" class="card dashboard-total">
|
||||
<div class="card-body row">
|
||||
<div class="col px-4 card-separator d-flex flex-column align-items-center">
|
||||
<p class="mb-1" id="card2-1">
|
||||
<span class="skeleton">?/?</span>
|
||||
</p>
|
||||
<i class="svg-target-lvy w-px-30 d-block" title="등록대상"></i>
|
||||
</div>
|
||||
<div class="col px-4 d-flex flex-column align-items-center">
|
||||
<p class="mb-1" id="card2-2">
|
||||
<span class="skeleton">?/?</span>
|
||||
</p>
|
||||
<i class="svg-target-transfer w-px-30 d-block" title="이첩대상"></i>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-footer ms-auto">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="card3" class="card dashboard-total">
|
||||
<div class="card-body row">
|
||||
<div class="col px-4 card-separator d-flex flex-column align-items-center">
|
||||
<p class="mb-1" id="card3-1">
|
||||
<span class="skeleton">?/?</span>
|
||||
</p>
|
||||
<i class="svg-sendstat-guide w-px-30 d-block" title="계도장 발송현황"></i>
|
||||
</div>
|
||||
<div class="col px-4 card-separator d-flex flex-column align-items-center">
|
||||
<p class="mb-1" id="card3-2">
|
||||
<span class="skeleton">?/?</span>
|
||||
</p>
|
||||
<i class="svg-sendstat-before w-px-30 d-block" title="사전통보 발송현황"></i>
|
||||
</div>
|
||||
<div class="col px-4 d-flex flex-column align-items-center">
|
||||
<p class="mb-1" id="card3-3">
|
||||
<span class="skeleton">?/?</span>
|
||||
</p>
|
||||
<i class="svg-sendstat-nop w-px-30 d-block" title="고지서 발송현황"></i>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-footer ms-auto">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="card4" class="card dashboard-total">
|
||||
<div class="card-body row">
|
||||
<div class="col px-4 card-separator d-flex flex-column align-items-center">
|
||||
<p class="mb-1" id="card4-1">
|
||||
<span class="skeleton">?/?</span>
|
||||
</p>
|
||||
<i class="svg-opn-rcp w-px-30 d-block" title="접수"></i>
|
||||
</div>
|
||||
<div class="col px-4 card-separator d-flex flex-column align-items-center">
|
||||
<p class="mb-1" id="card4-2">
|
||||
<span class="skeleton">?/?</span>
|
||||
</p>
|
||||
<i class="svg-opn-decision w-px-30 d-block" title="수용/미수용"></i>
|
||||
</div>
|
||||
<div class="col px-4 d-flex flex-column align-items-center">
|
||||
<p class="mb-1" id="card4-3">
|
||||
<span class="skeleton">?/?</span>
|
||||
</p>
|
||||
<i class="svg-opn-selfdrop w-px-30 d-block" title="자진취하"></i>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-footer ms-auto">
|
||||
<a href="#" id="btnGoToOpnn">의견진술관리 바로가기 ></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="wrapper-dashboard">
|
||||
<div class="card dashboard-chart">
|
||||
<div class="card-header d-flex align-items-center justify-content-between">
|
||||
<h5 class="card-title m-0 me-2">단속 자료 통계(유형별)</h5>
|
||||
<div>건수(최근 15일)</div>
|
||||
</div>
|
||||
<div class="card-body d-flex justify-content-center" id="lineChartCardBody">
|
||||
<canvas id="lineChart" class="chartjs mh-px-300" data-height="500"></canvas>
|
||||
</div>
|
||||
<div class="card-footer ms-auto">
|
||||
통계현황 바로가기 >
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card dashboard-chart">
|
||||
<div class="card-header d-flex align-items-center justify-content-between">
|
||||
<h5 class="card-title m-0 me-2">단속통계</h5>
|
||||
<div>처리유형별(일별)</div>
|
||||
</div>
|
||||
<div class="card-body d-flex justify-content-center" id="doughnutChart1CardBody">
|
||||
<canvas id="doughnutChart1" class="chartjs mh-px-300" data-height="350"></canvas>
|
||||
</div>
|
||||
<div class="card-footer ms-auto">
|
||||
통계현황 바로가기 >
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card dashboard-chart">
|
||||
<div class="card-header d-flex align-items-center justify-content-between">
|
||||
<h5 class="card-title m-0 me-2">발송통계</h5>
|
||||
<div>발송유형별(일별)</div>
|
||||
</div>
|
||||
<div class="card-body d-flex justify-content-center" id="doughnutChart2CardBody">
|
||||
<canvas id="doughnutChart2" class="chartjs mh-px-300" data-height="350"></canvas>
|
||||
</div>
|
||||
<div class="card-footer ms-auto">
|
||||
통계현황 바로가기 >
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card dashboard-chart">
|
||||
<div class="card-header d-flex align-items-center justify-content-between">
|
||||
<h5 class="card-title m-0 me-2">의견진술통계</h5>
|
||||
<div>처리유형별(일별)</div>
|
||||
</div>
|
||||
<div class="card-body d-flex justify-content-center" id="doughnutChart3CardBody">
|
||||
<canvas id="doughnutChart3" class="chartjs mh-px-300" data-height="350"></canvas>
|
||||
</div>
|
||||
<div class="card-footer ms-auto">
|
||||
통계현황 바로가기 >
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<c:set var="dashboardScript" scope="request">
|
||||
|
||||
LoadScript("chartScript","/webjars/3rd-party/sneat/libs/chartjs/chartjs.js");
|
||||
|
||||
|
||||
var falseLineChart = `<svg xmlns="http://www.w3.org/2000/svg" class="skeleton"
|
||||
height="250" viewBox="0 0 24 24">
|
||||
<path class="skeleton" d="M3 3v17a1 1 0 0 0 1 1h17v-2H5V3H3z"></path>
|
||||
<path class="skeleton" d="M15.293 14.707a.999.999 0 0 0 1.414 0l5-5-1.414-1.414L16 12.586l-2.293-2.293a.999.999 0 0 0-1.414 0l-5 5 1.414 1.414L13 12.414l2.293 2.293z"></path>
|
||||
</svg>`;
|
||||
|
||||
var falseDoughnutChart = `<svg xmlns="http://www.w3.org/2000/svg" class="skeleton"
|
||||
height="250" viewBox="0 0 24 24">
|
||||
<path class="skeleton" d="M13 6c2.507.423 4.577 2.493 5 5h4c-.471-4.717-4.283-8.529-9-9v4z"></path>
|
||||
<path class="skeleton" d="M18 13c-.478 2.833-2.982 4.949-5.949 4.949-3.309 0-6-2.691-6-6C6.051 8.982 8.167 6.478 11 6V2c-5.046.504-8.949 4.773-8.949 9.949 0 5.514 4.486 10 10 10 5.176 0 9.445-3.903 9.949-8.949h-4z"></path>
|
||||
</svg>`;
|
||||
|
||||
var statReqArr = [];
|
||||
|
||||
fnMakeSkeleton();
|
||||
sleep(3000).then(() => fnMakeStatReq($("#layout-navbar input[name='taskSeCd']:checked").val()));
|
||||
|
||||
|
||||
//데이터 로딩 전 이미지 표시
|
||||
function fnMakeSkeleton(){
|
||||
|
||||
$("#lineChart").hide();
|
||||
$("#doughnutChart1").hide();
|
||||
$("#doughnutChart2").hide();
|
||||
$("#doughnutChart3").hide();
|
||||
|
||||
$("#lineChartCardBody").append(falseLineChart);
|
||||
$("#doughnutChart1CardBody").append(falseDoughnutChart);
|
||||
$("#doughnutChart2CardBody").append(falseDoughnutChart);
|
||||
$("#doughnutChart3CardBody").append(falseDoughnutChart);
|
||||
}
|
||||
|
||||
|
||||
//통계 요청 데이터 생성(여러 건)
|
||||
function fnMakeStatReq(taskSeCd){
|
||||
var lastDay = DateUtil.getDate().date.replace("-","");
|
||||
var firstDay = DateUtil.getDateDay(-14).date.replaceAll("-","");
|
||||
|
||||
var defaultQuery = {};
|
||||
|
||||
|
||||
//단속구분별 전체/완료 건수
|
||||
defaultQuery = {
|
||||
structureType : "dummy",
|
||||
statDomain : "crdn",
|
||||
groupInfoList : [
|
||||
{
|
||||
refCol : "CRDN_SE_CD",
|
||||
ctgrType : "code",
|
||||
dtlCtgr : "FIM002"
|
||||
}
|
||||
],
|
||||
codeSubsetInfoList : [
|
||||
{
|
||||
sourceGroup : "FIM002",
|
||||
sourceCodes : ["08","09","10","11"],
|
||||
targetCode : "minwon",
|
||||
targetCodeVal : "민원"
|
||||
},
|
||||
{
|
||||
sourceGroup : "FIM002",
|
||||
sourceCodes : ["06","13"],
|
||||
targetCode : "dobo",
|
||||
targetCodeVal : "도보"
|
||||
}
|
||||
],
|
||||
fixedItemId : ["01","02","minwon","dobo"],
|
||||
namedNumberValueSeperator : "completeAndTotal",
|
||||
globalAggregate : "count",
|
||||
taskSeCd : taskSeCd,
|
||||
dayColumn : "REG_DT",
|
||||
firstDay : firstDay,
|
||||
lastDay : lastDay
|
||||
};
|
||||
|
||||
defaultQuery = fnJsonToFormData(defaultQuery, "groupInfoList");
|
||||
defaultQuery = fnJsonToFormData(defaultQuery, "numberValueInfoList");
|
||||
defaultQuery = fnJsonToFormData(defaultQuery, "codeSubsetInfoList");
|
||||
|
||||
statReqArr.push({
|
||||
query : defaultQuery,
|
||||
cursor : "card1",
|
||||
statType : "progressAndTotal"
|
||||
});
|
||||
|
||||
//초기자료처리별 전체/완료건수
|
||||
defaultQuery = {
|
||||
structureType : "dummy",
|
||||
statDomain : "crdn",
|
||||
groupInfoList : [
|
||||
{
|
||||
refCol : "등록대상이첩대상구분",
|
||||
ctgrType : "code",
|
||||
dtlCtgr : "FIM999"
|
||||
}
|
||||
],
|
||||
fixedItemId : ["등록대상","이첩대상"],
|
||||
namedNumberValueSeperator : "completeAndTotal",
|
||||
globalAggregate : "count",
|
||||
taskSeCd : taskSeCd,
|
||||
dayColumn : "REG_DT",
|
||||
firstDay : firstDay,
|
||||
lastDay : lastDay
|
||||
};
|
||||
|
||||
defaultQuery = fnJsonToFormData(defaultQuery, "groupInfoList");
|
||||
defaultQuery = fnJsonToFormData(defaultQuery, "numberValueInfoList");
|
||||
defaultQuery = fnJsonToFormData(defaultQuery, "codeSubsetInfoList");
|
||||
|
||||
statReqArr.push({
|
||||
query : defaultQuery,
|
||||
cursor : "card2",
|
||||
statType : "progressAndTotal"
|
||||
});
|
||||
|
||||
//발송문서별 전체/완료 건수
|
||||
defaultQuery = {
|
||||
structureType : "dummy",
|
||||
statDomain : "sndb",
|
||||
groupInfoList : [
|
||||
{
|
||||
refCol : "SNDNG_SE_CD",
|
||||
ctgrType : "code",
|
||||
dtlCtgr : "FIM047"
|
||||
}
|
||||
],
|
||||
codeSubsetInfoList : [
|
||||
{
|
||||
sourceGroup : "FIM047",
|
||||
sourceCodes : ["01","02"],
|
||||
targetCode : "satong",
|
||||
targetCodeVal : "사전통지서"
|
||||
}
|
||||
],
|
||||
fixedItemId : ["satong", "03", "11"],
|
||||
namedNumberValueSeperator : "completeAndTotal",
|
||||
globalAggregate : "count",
|
||||
taskSeCd : taskSeCd,
|
||||
dayColumn : "REG_DT",
|
||||
firstDay : firstDay,
|
||||
lastDay : lastDay
|
||||
};
|
||||
|
||||
defaultQuery = fnJsonToFormData(defaultQuery, "groupInfoList");
|
||||
defaultQuery = fnJsonToFormData(defaultQuery, "numberValueInfoList");
|
||||
defaultQuery = fnJsonToFormData(defaultQuery, "codeSubsetInfoList");
|
||||
|
||||
statReqArr.push({
|
||||
query : defaultQuery,
|
||||
cursor : "card3",
|
||||
statType : "progressAndTotal"
|
||||
});
|
||||
|
||||
//의견진술자료상태
|
||||
defaultQuery = {
|
||||
structureType : "dummy",
|
||||
statDomain : "excl",
|
||||
groupInfoList : [
|
||||
{
|
||||
refCol : "OPNN_SBMSN_STTS_CD",
|
||||
ctgrType : "code",
|
||||
dtlCtgr : "FIM031"
|
||||
}
|
||||
],
|
||||
codeSubsetInfoList : [
|
||||
{
|
||||
sourceGroup : "FIM031",
|
||||
sourceCodes : ["01","02"],
|
||||
targetCode : "acceptOrNonAccept",
|
||||
targetCodeVal : "수용/미수용"
|
||||
}
|
||||
],
|
||||
fixedItemId : ["00", "acceptOrNonAccept", "03"],
|
||||
namedNumberValueSeperator : "completeAndTotal",
|
||||
globalAggregate : "count",
|
||||
taskSeCd : taskSeCd,
|
||||
dayColumn : "REG_DT",
|
||||
firstDay : firstDay,
|
||||
lastDay : lastDay
|
||||
};
|
||||
|
||||
defaultQuery = fnJsonToFormData(defaultQuery, "groupInfoList");
|
||||
defaultQuery = fnJsonToFormData(defaultQuery, "numberValueInfoList");
|
||||
defaultQuery = fnJsonToFormData(defaultQuery, "codeSubsetInfoList");
|
||||
|
||||
statReqArr.push({
|
||||
query : defaultQuery,
|
||||
cursor : "card4",
|
||||
statType : "progressAndTotal"
|
||||
});
|
||||
|
||||
//단속구분별 최근n일 건수
|
||||
defaultQuery = {
|
||||
structureType : "aggregate",
|
||||
statDomain : "crdn",
|
||||
groupInfoList : [
|
||||
{
|
||||
refCol : "CRDN_SE_CD",
|
||||
ctgrType : "code",
|
||||
dtlCtgr : "FIM002"
|
||||
}
|
||||
],
|
||||
codeSubsetInfoList : [
|
||||
{
|
||||
sourceGroup : "FIM002",
|
||||
sourceCodes : ["08","09","10","11"],
|
||||
targetCode : "minwon",
|
||||
targetCodeVal : "민원"
|
||||
},
|
||||
{
|
||||
sourceGroup : "FIM002",
|
||||
sourceCodes : ["06","13"],
|
||||
targetCode : "dobo",
|
||||
targetCodeVal : "도보"
|
||||
}
|
||||
],
|
||||
fixedItemId : ["01","02","dobo","minwon"],
|
||||
namedNumberValueSeperator : "lastFewDays",
|
||||
globalAggregate : "count",
|
||||
taskSeCd : taskSeCd,
|
||||
dayColumn : "CRDN_YMD",
|
||||
dayRange : 15
|
||||
};
|
||||
|
||||
defaultQuery = fnJsonToFormData(defaultQuery, "groupInfoList");
|
||||
defaultQuery = fnJsonToFormData(defaultQuery, "numberValueInfoList");
|
||||
defaultQuery = fnJsonToFormData(defaultQuery, "codeSubsetInfoList");
|
||||
|
||||
statReqArr.push({
|
||||
query : defaultQuery,
|
||||
cursor : "lineChart",
|
||||
statType : "line"
|
||||
});
|
||||
|
||||
//초기자료처리별 건수 차트
|
||||
defaultQuery = {
|
||||
structureType : "aggregate",
|
||||
statDomain : "crdnSttsHstry",
|
||||
groupInfoList : [
|
||||
{
|
||||
refCol : "CRDN_STTS_CD",
|
||||
ctgrType : "code",
|
||||
dtlCtgr : "FIM010"
|
||||
}
|
||||
],
|
||||
numberValueInfoList : [
|
||||
{
|
||||
aggregateType : "count"
|
||||
}
|
||||
],
|
||||
codeSubsetInfoList : [
|
||||
{
|
||||
sourceGroup : "FIM010",
|
||||
sourceCodes : ["21"],
|
||||
targetCode : "dansokProcess",
|
||||
targetCodeVal : "단속"
|
||||
}
|
||||
],
|
||||
fixedItemId : ["dansokProcess","81","83"],
|
||||
taskSeCd : taskSeCd,
|
||||
dayColumn : "REG_DT",
|
||||
firstDay : firstDay,
|
||||
lastDay : firstDay
|
||||
};
|
||||
|
||||
defaultQuery = fnJsonToFormData(defaultQuery, "groupInfoList");
|
||||
defaultQuery = fnJsonToFormData(defaultQuery, "numberValueInfoList");
|
||||
defaultQuery = fnJsonToFormData(defaultQuery, "codeSubsetInfoList");
|
||||
|
||||
statReqArr.push({
|
||||
query : defaultQuery,
|
||||
cursor : "doughnutChart1",
|
||||
statType : "doughnut"
|
||||
});
|
||||
|
||||
//발송문서종류별 건수 차트
|
||||
defaultQuery = {
|
||||
structureType : "aggregate",
|
||||
statDomain : "sndb",
|
||||
groupInfoList : [
|
||||
{
|
||||
refCol : "SNDNG_SE_CD",
|
||||
ctgrType : "code",
|
||||
dtlCtgr : "FIM047"
|
||||
}
|
||||
],
|
||||
numberValueInfoList : [
|
||||
{
|
||||
aggregateType : "count"
|
||||
}
|
||||
],
|
||||
codeSubsetInfoList : [
|
||||
{
|
||||
sourceGroup : "FIM047",
|
||||
sourceCodes : ["01","02"],
|
||||
targetCode : "satong",
|
||||
targetCodeVal : "사전통지서"
|
||||
}
|
||||
],
|
||||
fixedItemId : ["satong", "03", "11"],
|
||||
taskSeCd : taskSeCd,
|
||||
dayColumn : "SNDNG_YMD",
|
||||
firstDay : firstDay,
|
||||
lastDay : firstDay
|
||||
};
|
||||
|
||||
defaultQuery = fnJsonToFormData(defaultQuery, "groupInfoList");
|
||||
defaultQuery = fnJsonToFormData(defaultQuery, "numberValueInfoList");
|
||||
defaultQuery = fnJsonToFormData(defaultQuery, "codeSubsetInfoList");
|
||||
|
||||
statReqArr.push({
|
||||
query : defaultQuery,
|
||||
cursor : "doughnutChart2",
|
||||
statType : "doughnut"
|
||||
});
|
||||
|
||||
//의견진술결과별 건수 차트
|
||||
defaultQuery = {
|
||||
structureType : "aggregate",
|
||||
statDomain : "excl",
|
||||
groupInfoList : [
|
||||
{
|
||||
refCol : "OPNN_SBMSN_STTS_CD",
|
||||
ctgrType : "code",
|
||||
dtlCtgr : "FIM031"
|
||||
}
|
||||
],
|
||||
numberValueInfoList : [
|
||||
{
|
||||
aggregateType : "count"
|
||||
}
|
||||
],
|
||||
fixedItemId : ["01", "02", "03"],
|
||||
taskSeCd : taskSeCd,
|
||||
dayColumn : "REG_DT",
|
||||
firstDay : firstDay,
|
||||
lastDay : firstDay
|
||||
};
|
||||
|
||||
defaultQuery = fnJsonToFormData(defaultQuery, "groupInfoList");
|
||||
defaultQuery = fnJsonToFormData(defaultQuery, "numberValueInfoList");
|
||||
defaultQuery = fnJsonToFormData(defaultQuery, "codeSubsetInfoList");
|
||||
|
||||
statReqArr.push({
|
||||
query : defaultQuery,
|
||||
cursor : "doughnutChart3",
|
||||
statType : "doughnut"
|
||||
});
|
||||
|
||||
fnLoadStatisticsData();
|
||||
}
|
||||
|
||||
//통계 데이터 조회
|
||||
function fnLoadStatisticsData(){
|
||||
var statArr = statReqArr.pop();
|
||||
|
||||
ajax.get({
|
||||
url : wctx.url("/stat/stat01/010/info.do"),
|
||||
data : statArr.query,
|
||||
success : (resp) => {
|
||||
var statData = resp.stat;
|
||||
|
||||
if(statData != null && statData.statItems != null){
|
||||
fnRenderDashboardContents(statData, statArr.cursor , statArr.statType);
|
||||
}
|
||||
|
||||
if(statReqArr.length != 0){
|
||||
fnLoadStatisticsData();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
//대시보드 콘텐츠 표시
|
||||
function fnRenderDashboardContents(returnData, cursor, statType){
|
||||
|
||||
if(statType == "progressAndTotal"){
|
||||
fnRenderProgressAndTotal(returnData, cursor);
|
||||
return;
|
||||
}
|
||||
|
||||
if(statType == "line"){
|
||||
fnRenderLine(returnData, cursor);
|
||||
return;
|
||||
}
|
||||
|
||||
if(statType == "doughnut"){
|
||||
fnRenderDoughnut(returnData, cursor);
|
||||
return;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//진행건수,전체건수 표시
|
||||
function fnRenderProgressAndTotal(returnData, cursor){
|
||||
|
||||
for(var i=0; i < returnData.statItems.length; i++){
|
||||
var icon = $("#"+cursor).find("i[title='" + returnData.statItems[i].itemName[0] + "']");
|
||||
var p = icon.prev("p");
|
||||
p.html(returnData.statItems[i].numberValue[0] + "/" + returnData.statItems[i].numberValue[1]);
|
||||
}
|
||||
|
||||
if(cursor == "card1"){
|
||||
mappingButtonAndMenu("btnGoToCrdn","단속 관리");
|
||||
return;
|
||||
}
|
||||
|
||||
if(cursor == "card2"){
|
||||
mappingButtonAndMenu("btnGoToOpnn","의견제출 관리");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
//라인차트 표시
|
||||
function fnRenderLine(returnData, cursor){
|
||||
var yellowColor = '#ffe800';
|
||||
var cyanColor = '#28dac6';
|
||||
var orangeLightColor = '#FDAC34';
|
||||
var redColor = '#FF3E1D';
|
||||
var indigoColor = '#696CFF';
|
||||
|
||||
var ctgrColorSet = [yellowColor,cyanColor,orangeLightColor,redColor,indigoColor];
|
||||
|
||||
var borderColor = '#f0f0f0';
|
||||
var gridColor = '#f0f0f0';
|
||||
var tickColor = 'rgba(0, 0, 0, 0.75)'; // x & y axis tick color
|
||||
|
||||
$("#"+cursor).siblings("svg").remove();
|
||||
|
||||
$("#"+cursor).show();
|
||||
|
||||
var maxOfStat = 0;
|
||||
var minOfStat = 0;
|
||||
|
||||
var datasets = [];
|
||||
for(var i=0; i < returnData.statItems.length; i++){
|
||||
var defaultObject = {
|
||||
tension: 0.5,
|
||||
pointStyle: 'circle',
|
||||
fill: false,
|
||||
pointRadius: 1,
|
||||
pointHoverRadius: 5,
|
||||
pointHoverBorderWidth: 5,
|
||||
pointBorderColor: 'transparent',
|
||||
pointHoverBorderColor: config.colors.cardColor
|
||||
};
|
||||
|
||||
defaultObject.label = returnData.statItems[i].itemName[0];
|
||||
|
||||
defaultObject.data = returnData.statItems[i].numberValue;
|
||||
|
||||
var maxOfStatItem = Math.max(defaultObject.data);
|
||||
var minOfStatItem = Math.min(defaultObject.data);
|
||||
|
||||
if(maxOfStatItem > maxOfStat){
|
||||
maxOfStat = maxOfStatItem;
|
||||
}
|
||||
if(minOfStatItem < minOfStat){
|
||||
minOfStat = minOfStatItem;
|
||||
}
|
||||
|
||||
defaultObject.backgroundColor = ctgrColorSet[i % ctgrColorSet.length];
|
||||
defaultObject.pointHoverBackgroundColor = ctgrColorSet[i % ctgrColorSet.length];
|
||||
defaultObject.borderColor = ctgrColorSet[i % ctgrColorSet.length];
|
||||
|
||||
datasets.push(defaultObject);
|
||||
}
|
||||
|
||||
var xAxisLabels = returnData.numberValueLabel;
|
||||
|
||||
var yAxisConf = initYAxis(maxOfStat, minOfStat);
|
||||
|
||||
var lineChart = document.getElementById(cursor);
|
||||
if (lineChart) {
|
||||
var lineChartVar = new Chart(lineChart, {
|
||||
type: 'line',
|
||||
data: {
|
||||
labels: xAxisLabels,
|
||||
datasets: datasets
|
||||
},
|
||||
options: {
|
||||
lineTension : 0,
|
||||
responsive: true,
|
||||
maintainAspectRatio: false,
|
||||
scales: {
|
||||
x: {
|
||||
grid: {
|
||||
color: borderColor,
|
||||
drawBorder: false,
|
||||
borderColor: borderColor
|
||||
},
|
||||
ticks: {
|
||||
color: "black"
|
||||
}
|
||||
},
|
||||
y: {
|
||||
scaleLabel: {
|
||||
display: true
|
||||
},
|
||||
min: yAxisConf.yAxisMin,
|
||||
max: yAxisConf.yAxisMax,
|
||||
ticks: {
|
||||
color: "black",
|
||||
stepSize: yAxisConf.yAxisStep
|
||||
},
|
||||
grid: {
|
||||
color: borderColor,
|
||||
drawBorder: false,
|
||||
borderColor: borderColor
|
||||
}
|
||||
}
|
||||
},
|
||||
plugins: {
|
||||
tooltip: {
|
||||
rtl: true,
|
||||
backgroundColor: config.colors.cardColor,
|
||||
titleColor: config.colors.headingColor,
|
||||
bodyColor: config.colors.bodyColor,
|
||||
borderWidth: 1,
|
||||
borderColor: borderColor
|
||||
},
|
||||
legend: {
|
||||
position: 'left',
|
||||
align: 'stretch',
|
||||
rtl: true,
|
||||
labels: {
|
||||
usePointStyle: true,
|
||||
padding: 6,
|
||||
boxWidth: 12,
|
||||
boxHeight: 30,
|
||||
color: "black"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
return;
|
||||
|
||||
}
|
||||
|
||||
//도넛차트 표시
|
||||
function fnRenderDoughnut(returnData, cursor){
|
||||
var yellowColor = '#ffe800';
|
||||
var cyanColor = '#28dac6';
|
||||
var orangeLightColor = '#FDAC34';
|
||||
var redColor = '#FF3E1D';
|
||||
var indigoColor = '#696CFF';
|
||||
|
||||
var ctgrColorSet = [yellowColor,cyanColor,orangeLightColor,redColor,indigoColor];
|
||||
|
||||
var borderColor = '#f0f0f0';
|
||||
var gridColor = '#f0f0f0';
|
||||
var tickColor = 'rgba(0, 0, 0, 0.75)'; // x & y axis tick color
|
||||
|
||||
var cardColor = config.colors.cardColor;
|
||||
var headingColor = config.colors.headingColor;
|
||||
var labelColor = config.colors.textMuted;
|
||||
var legendColor = config.colors.bodyColor;
|
||||
|
||||
$("#"+cursor).siblings("svg").remove();
|
||||
$("#"+cursor).show();
|
||||
|
||||
|
||||
var lebels = [];
|
||||
var datas = [];
|
||||
var colors = [];
|
||||
for(var i=0; i < returnData.statItems.length; i++){
|
||||
lebels.push(returnData.statItems[i].itemName[0]);
|
||||
datas.push(returnData.statItems[i].numberValue[0]);
|
||||
|
||||
colors.push(ctgrColorSet[i % ctgrColorSet.length]);
|
||||
}
|
||||
|
||||
|
||||
var doughnutChart = document.getElementById(cursor);
|
||||
if (doughnutChart) {
|
||||
var doughnutChartVar = new Chart(doughnutChart, {
|
||||
type: 'doughnut',
|
||||
data: {
|
||||
labels: lebels,
|
||||
datasets: [
|
||||
{
|
||||
data: datas,
|
||||
backgroundColor: colors,
|
||||
borderWidth: 1,
|
||||
pointStyle: 'rectRounded'
|
||||
}
|
||||
]
|
||||
},
|
||||
options: {
|
||||
responsive: true,
|
||||
animation: {
|
||||
duration: 500
|
||||
},
|
||||
cutout: '68%',
|
||||
plugins: {
|
||||
legend: {
|
||||
display: true,
|
||||
position : 'left'
|
||||
},
|
||||
tooltip: {
|
||||
callbacks: {
|
||||
label: function (context) {
|
||||
const label = context.label || '';
|
||||
const value = context.parsed;
|
||||
const output = ' ' + label + ' : ' + value + ' 건';
|
||||
return output;
|
||||
}
|
||||
},
|
||||
// Updated default tooltip UI
|
||||
rtl: true,
|
||||
backgroundColor: cardColor,
|
||||
titleColor: headingColor,
|
||||
bodyColor: legendColor,
|
||||
borderWidth: 1,
|
||||
borderColor: borderColor
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
return;
|
||||
|
||||
|
||||
}
|
||||
|
||||
//차트y축 표시최대값,표시최소값,간격 설정
|
||||
function initYAxis(max, min){
|
||||
|
||||
if(max <= 10){
|
||||
var yAxisConf = {
|
||||
yAxisMax : 10,
|
||||
yAxisMin : 0,
|
||||
yAxisStep : 2
|
||||
};
|
||||
|
||||
return yAxisConf;
|
||||
}
|
||||
|
||||
if(max <= 100){
|
||||
var yAxisConf = {
|
||||
yAxisMax : 100,
|
||||
yAxisMin : 0,
|
||||
yAxisStep : 20
|
||||
};
|
||||
|
||||
return yAxisConf;
|
||||
}
|
||||
|
||||
var yAxisMax = Math.ceil(max / 100) * 100
|
||||
var yAxisMin = Math.floor(min / 100) * 100;
|
||||
|
||||
if(yAxisMax - yAxisMin <= 100){
|
||||
yAxisMin = yAxisMax - 100;
|
||||
}
|
||||
|
||||
var yAxisStep = (yAxisMax - yAxisMin)/5;
|
||||
|
||||
var yAxisConf = {
|
||||
yAxisMax : yAxisMax,
|
||||
yAxisMin : yAxisMin,
|
||||
yAxisStep : yAxisStep
|
||||
};
|
||||
return yAxisConf;
|
||||
|
||||
}
|
||||
|
||||
|
||||
</c:set>
|
||||
@ -1,82 +0,0 @@
|
||||
<%@ page language="java" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
<%@ page import="java.util.HashMap, javax.servlet.http.HttpServletRequest, cokr.xit.foundation.data.Convert" %>
|
||||
<%! private static final HashMap<String, String> titles = new HashMap<>();
|
||||
|
||||
static {
|
||||
titles.put("404", "Page Not Found");
|
||||
titles.put("sessionExpired", "Session Expired");
|
||||
titles.put("invalidSession", "Invalid Session");
|
||||
titles.put("accessDenied", "Access Denied");
|
||||
titles.put("500", "Server Error");
|
||||
}
|
||||
|
||||
private static void setTitle(HttpServletRequest hreq) {
|
||||
String status = Convert.toString(hreq.getAttribute("status"));
|
||||
if (status == "")
|
||||
status = "500";
|
||||
String title = titles.get(status);
|
||||
if (title == null)
|
||||
title = titles.get("500");
|
||||
hreq.setAttribute("title", title);
|
||||
}
|
||||
%>
|
||||
<% setTitle(request); %>
|
||||
<c:if test="${json}"><%
|
||||
response.setContentType("application/json; charset=UTF-8");
|
||||
String stacktrace = (String)request.getAttribute("stacktrace");
|
||||
request.setAttribute("stacktrace", Convert.rntq(stacktrace));
|
||||
%>{
|
||||
"path": "${path}",
|
||||
"failed": true,
|
||||
"status": "${status}",
|
||||
"title": "${title}",
|
||||
"message": "${message}",
|
||||
"description": "${description}",
|
||||
"stacktrace": "${stacktrace}"
|
||||
}</c:if>
|
||||
<c:if test="${!json}"><%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
<jsp:include page="/WEB-INF/jsp/include/head.jsp" />
|
||||
<style>
|
||||
.misc-wrapper {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
min-height: calc(100vh - (1.625rem * 2));
|
||||
text-align: center;
|
||||
}
|
||||
</style>
|
||||
<body>
|
||||
<!-- Content -->
|
||||
|
||||
<!-- Error -->
|
||||
<div class="container-xxl container-p-y">
|
||||
<div class="misc-wrapper">
|
||||
<h2 class="mb-2 mx-2">${title} :(</h2>
|
||||
<p class="mb-4 mx-2">죄송합니다. 😖</p>
|
||||
<p class="mb-4 mx-2">${message}</p>
|
||||
<a onclick="wctx.home();" class="btn btn-primary" href="javascript:void(0);">처음으로 돌아가기</a>
|
||||
<a onclick="history.back();" class="btn btn-primary mt-2" href="javascript:void(0);" autofocus>이전으로 돌아가기</a>
|
||||
<div class="mt-3">
|
||||
<img
|
||||
src="<c:url value="/webjars/img/illustrations/page-misc-error-light.png"/>"
|
||||
alt="page-misc-error-light"
|
||||
width="500"
|
||||
class="img-fluid"
|
||||
data-app-dark-img="illustrations/page-misc-error-dark.png"
|
||||
data-app-light-img="illustrations/page-misc-error-light.png"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- /Error -->
|
||||
|
||||
<!-- / Content -->
|
||||
|
||||
<jsp:include page="/WEB-INF/jsp/include/tail.jsp" />
|
||||
<script>
|
||||
${functions}
|
||||
</script>
|
||||
</body>
|
||||
</html></c:if>
|
||||
@ -1,64 +0,0 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
<form id="frmEdit--${pageName}">
|
||||
<div class="d-flex flex-row justify-content-evenly">
|
||||
<div class="card" style="width:1000px;min-height:200px;">
|
||||
<div class="row">
|
||||
<div class="col-4">
|
||||
<label class="w-px-130 bg-lighter pe-2 col-form-label text-sm-end">업무</label>
|
||||
<select id="taskSeCd--${pageName}" name="taskSeCd" class="form-select">
|
||||
<c:forEach items="${taskSeCdList}" var="item">
|
||||
<option value="${item.CODE}">${item.CODE_VAL}</option>
|
||||
</c:forEach>
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-4">
|
||||
<label class="w-px-130 bg-lighter pe-2 col-form-label text-sm-end">소스 시군구</label>
|
||||
<select id="srcSgg--${pageName}" name="srcSgg" class="form-select">
|
||||
<c:forEach items="${sggList}" var="item">
|
||||
<option value="${item.SGG_CD}">${item.SGG_NM}</option>
|
||||
</c:forEach>
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-4">
|
||||
<label class="w-px-130 bg-lighter pe-2 col-form-label text-sm-end">타겟 시군구</label>
|
||||
<select id="trgtSgg--${pageName}" name="trgtSgg" class="form-select">
|
||||
<c:forEach items="${sggList}" var="item">
|
||||
<option value="${item.SGG_CD}">${item.SGG_NM}</option>
|
||||
</c:forEach>
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-12">
|
||||
<span class="float-end p-4">
|
||||
<button type="button" id="btnCopyStng--${pageName}" class="btn btn-primary">업무,위반 설정 복사</button>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<script>
|
||||
$("#btnCopyStng--${pageName}").on("click", function(){
|
||||
|
||||
if($("#srcSgg--${pageName}").val() == $("#trgtSgg--${pageName}").val()){
|
||||
alert("동일한 시군구 선택 불가");
|
||||
return;
|
||||
}
|
||||
|
||||
ajax.get({
|
||||
url : wctx.url("admin/copySggStng.do"),
|
||||
data : {
|
||||
taskSeCd : $("#taskSeCd--${pageName}").val(),
|
||||
srcSgg : $("#srcSgg--${pageName}").val(),
|
||||
trgtSgg : $("#trgtSgg--${pageName}").val()
|
||||
},
|
||||
success : (resp) => {
|
||||
if(resp.saved){
|
||||
alert('완료');
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
@ -1,299 +0,0 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
<!-- inner page html -->
|
||||
<div class="content-wrapper">
|
||||
<div class="container-xxl flex-grow-1 px-0">
|
||||
<c:set var="pageKorName" scope="request">최고관리자 메뉴</c:set>
|
||||
<div class="card">
|
||||
<div class="wrapper-list">
|
||||
|
||||
<div class="fieldset-legend mt-4">
|
||||
<div class="fieldset-legend-content fs-big" data-label="배치 수동 실행">
|
||||
<button type="button" class="btn btn-primary" onclick="executeBatch('smgReceive');">국민신문고 수신</button>
|
||||
<button type="button" class="btn btn-primary" onclick="executeBatch('smgSend');">국민신문고 답변 송신</button>
|
||||
<button type="button" class="btn btn-primary" onclick="executeBatch('epostSend');">전자우편 송신</button>
|
||||
<button type="button" class="btn btn-primary" onclick="executeBatch('epostReceive');">전자우편결과 수신</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="fieldset-legend mt-4">
|
||||
<div class="fieldset-legend-content fs-big" data-label="업무시스템 수동 통보">
|
||||
<button type="button" class="btn btn-primary" onclick="exceuteAlert('smgReceive');">국민신문고 수신</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="fieldset-legend mt-4">
|
||||
<div class="fieldset-legend-content fs-big" data-label="파일 현황">
|
||||
<div class="card-datatable text-nowrap">
|
||||
<div id="DataTables_Table_0_wrapper" class="dataTables_wrapper dt-bootstrap5 no-footer">
|
||||
<div class="d-flex flex-row justify-content-evenly mh-px-400">
|
||||
<div class="w-50 mx-2 oy-auto">
|
||||
<h5 class="mt-3">파일트리</h5>
|
||||
<div id="menu-tree" class="main-left d-flex flex-column flex-grow-1">
|
||||
<div class="d-flex justify-content-between py-2 border-separator-y">
|
||||
<button type="button" class="btn btn-primary"
|
||||
onclick="getFileTree();">갱신</button>
|
||||
</div>
|
||||
<div id="fileTree" class="ox-auto oy-auto pt-3 h-px-300">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="w-50 mx-2">
|
||||
<h5 class="mt-3">파일내용</h5>
|
||||
<div class="d-flex flex-row justify-content-start p-3">
|
||||
<textarea id="viewCn" rows="14" cols="100%" readonly="readonly"></textarea>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="fieldset-legend mt-4">
|
||||
<div class="fieldset-legend-content fs-big" data-label="시군구 정보 백업 & 복제">
|
||||
<button type="button" class="btn btn-primary" id="btnOpenSggAddDel">시군구 추가/삭제</button>
|
||||
<button type="button" class="btn btn-primary" id="btnOpenCopySggStng">시군구 설정 복사</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<input type="file" id="serverFile" name="serverFile" hidden onchange="fnImportFile(this);" />
|
||||
|
||||
<div class="content-backdrop fade"></div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
|
||||
/**
|
||||
* 수동 배치 실행
|
||||
*/
|
||||
function executeBatch(batch){
|
||||
ajax.get({
|
||||
url : wctx.url("/admin/executeBatch.do"),
|
||||
data : { batch : batch},
|
||||
success : (resp) => {
|
||||
dialog.alert("실행되었습니다.");
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function exceuteAlert(alertName){
|
||||
if(alertName != "smgReceive"){
|
||||
return;
|
||||
}
|
||||
|
||||
var interfaceKey = prompt("인터페이스키를 입력하세요.");
|
||||
|
||||
if(interfaceKey == null || interfaceKey == ""){
|
||||
return;
|
||||
}
|
||||
|
||||
ajax.post({
|
||||
url : wctx.url("/admin/executeAlert.do"),
|
||||
data : {
|
||||
alertName : alertName,
|
||||
interfaceKey : interfaceKey
|
||||
},
|
||||
success : (resp) => {
|
||||
dialog.alert("실행되었습니다.");
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
var tempPathArray = [];
|
||||
|
||||
/**
|
||||
* 파일트리 컨텍스트 메뉴
|
||||
*/
|
||||
function customContextMenu(node){
|
||||
var items = {
|
||||
|
||||
newDirectory : {
|
||||
label:"디렉토리 추가",
|
||||
action:function(data){
|
||||
var inst = $.jstree.reference(data.reference);
|
||||
var obj = inst.get_node(data.reference);
|
||||
var pathArray = $("#fileTree").jstree("get_path", obj.id);
|
||||
|
||||
var directoryName = prompt("디렉토리명을 입력하세요");
|
||||
|
||||
if(directoryName != null && directoryName != ""){
|
||||
pathArray.push(directoryName);
|
||||
|
||||
ajax.post({
|
||||
url : wctx.url("/admin/createDirectory.do"),
|
||||
data : {
|
||||
directories : pathArray
|
||||
},
|
||||
success : (resp) => {
|
||||
if(resp.saved){
|
||||
getFileTree();
|
||||
} else {
|
||||
alert("폴더 생성에 실패하였습니다.");
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
},
|
||||
newFile : {
|
||||
label:"파일 추가",
|
||||
action:function(data){
|
||||
var inst = $.jstree.reference(data.reference);
|
||||
var obj = inst.get_node(data.reference);
|
||||
var pathArray = $("#fileTree").jstree("get_path", obj.id);
|
||||
tempPathArray = pathArray;
|
||||
|
||||
$("#serverFile").click();
|
||||
|
||||
}
|
||||
},
|
||||
viewCn : {
|
||||
label : "내용 보기",
|
||||
action:function(data){
|
||||
var inst = $.jstree.reference(data.reference);
|
||||
var obj = inst.get_node(data.reference);
|
||||
var pathArray = $("#fileTree").jstree("get_path", obj.id);
|
||||
|
||||
ajax.post({
|
||||
url : wctx.url("/admin/getFileText.do"),
|
||||
data : {
|
||||
directories : pathArray
|
||||
},
|
||||
success : (resp) => {
|
||||
$("#viewCn").val(resp.fileCn);
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
if(node.type == "file") {
|
||||
delete items.newDirectory;
|
||||
delete items.newFile;
|
||||
}
|
||||
|
||||
if(node.type == "directory"){
|
||||
delete items.viewCn;
|
||||
} else if(!node.text.endsWith(".txt") && !node.text.endsWith(".xml")
|
||||
&& !node.text.endsWith(".TXT") && !node.text.endsWith(".XML")){
|
||||
delete items.viewCn;
|
||||
}
|
||||
|
||||
return items;
|
||||
}
|
||||
|
||||
$('#fileTree').jstree({
|
||||
"core" : {
|
||||
"data": {}
|
||||
},
|
||||
"plugins": ["types","contextmenu"],
|
||||
"types" : {
|
||||
"directory" : { "icon" : "fa fa-folder" },
|
||||
"file" : { "icon" : "fa fa-file" }
|
||||
},
|
||||
trace: true,
|
||||
core : {
|
||||
check_callback:true,
|
||||
multiple:false
|
||||
},
|
||||
contextmenu : {
|
||||
items : customContextMenu
|
||||
}
|
||||
});
|
||||
$("#fileTree").bind("refresh.jstree", function(){
|
||||
$(this).jstree("open_all");
|
||||
});
|
||||
|
||||
/**
|
||||
* 파일트리 조회
|
||||
*/
|
||||
function getFileTree(){
|
||||
ajax.get({
|
||||
url : wctx.url("/admin/getFileTree.do"),
|
||||
data : {},
|
||||
headers: { Accept: "application/json; charset=utf-8" },
|
||||
success : (resp) => {
|
||||
|
||||
$('#fileTree').jstree(true).settings.core.data = resp.tree;
|
||||
$('#fileTree').jstree(true).refresh();
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 파일 추가
|
||||
*/
|
||||
function fnImportFile(obj){
|
||||
if(obj.files.length == 0){
|
||||
return;
|
||||
}
|
||||
|
||||
var form = new FormData();
|
||||
form.append("newFile", obj.files[0]);
|
||||
form.append("directories[]", tempPathArray);
|
||||
|
||||
ajax.post({
|
||||
url : wctx.url("/admin/importFile.do"),
|
||||
data : form,
|
||||
processData : false,
|
||||
contentType : false,
|
||||
success : (resp) => {
|
||||
if(resp.saved){
|
||||
getFileTree();
|
||||
} else {
|
||||
alert("파일 추가에 실패하였습니다.");
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
$("#btnOpenSggAddDel").on("click", function(){
|
||||
ajax.get({
|
||||
url : "/admin/sggAddDelInfo.do",
|
||||
data: {},
|
||||
success: (resp) => {
|
||||
|
||||
dialog.open({
|
||||
id: "sggAddDelDialog",
|
||||
title: "시군구 추가,삭제",
|
||||
content: resp ,
|
||||
size: "xxl",
|
||||
init:() => {}
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
$("#btnOpenCopySggStng").on("click", function(){
|
||||
ajax.get({
|
||||
url : "/admin/copySggStngInfo.do",
|
||||
data: {},
|
||||
success: (resp) => {
|
||||
|
||||
dialog.open({
|
||||
id: "copySggStngDialog",
|
||||
title: "시군구 설정 복사",
|
||||
content: resp ,
|
||||
size: "xl",
|
||||
init:() => {}
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
$(document).ready(function(){
|
||||
getFileTree();
|
||||
});
|
||||
|
||||
</script>
|
||||
@ -1,192 +0,0 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
<form id="frmEdit--${pageName}">
|
||||
<div class="d-flex flex-row justify-content-evenly">
|
||||
<div class="card" style="width:500px;">
|
||||
<h3>시군구 백업</h3>
|
||||
|
||||
<div class="card-datatable text-nowrap">
|
||||
<div id="backupSgg-DataTables_Table_0_wrapper--${pageName}" class="dataTables_wrapper dt-bootstrap5 no-footer">
|
||||
<div id="backupSgg-table-responsive--${pageName}" class="table-responsive"
|
||||
style="overflow-x: scroll;height:500px;overflow-y: scroll;">
|
||||
<table id="backupSgg-DataTables_Table_0--${pageName}"
|
||||
class="table-layout-fixed datatables-ajax table table-bordered dataTable no-footer">
|
||||
<thead class="sticky-thead">
|
||||
<tr data-key="{SGG_CD}">
|
||||
<th style="width: 50px;"></th>
|
||||
<th style="width: 140px;" >시군구코드</th>
|
||||
<th style="width: 300px;" >시군구명</th>
|
||||
<th class="cmn dummy-th"></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="backupSggTbody--${pageName}">
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="card" style="width:100px;">
|
||||
<div style="display: flex;flex-direction: column;justify-content: space-evenly;height: 100%;">
|
||||
<button type="button" id="btnAdd--${pageName}">추가 >></button>
|
||||
<button type="button" id="btnDel--${pageName}"><< 삭제</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card" style="width:500px;">
|
||||
<h3>시군구</h3>
|
||||
|
||||
<div class="card-datatable text-nowrap">
|
||||
<div id="originalSgg-DataTables_Table_0_wrapper--${pageName}" class="dataTables_wrapper dt-bootstrap5 no-footer">
|
||||
<div id="originalSgg-table-responsive--${pageName}" class="table-responsive"
|
||||
style="overflow-x: scroll;height:500px;overflow-y: scroll;">
|
||||
<table id="originalSgg-DataTables_Table_0--${pageName}"
|
||||
class="table-layout-fixed datatables-ajax table table-bordered dataTable no-footer">
|
||||
<thead class="sticky-thead">
|
||||
<tr data-key="{SGG_CD}">
|
||||
<th style="width: 50px;"></th>
|
||||
<th style="width: 140px;" >시군구코드</th>
|
||||
<th style="width: 300px;" >시군구명</th>
|
||||
<th class="cmn dummy-th"></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="originalSggTbody--${pageName}">
|
||||
</tbody>
|
||||
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
</form>
|
||||
|
||||
|
||||
<template id="sggRow--${pageName}">
|
||||
<tr data-key="{SGG_CD}">
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-center cmn">
|
||||
<input type="checkbox" value="{SGG_CD}" />
|
||||
</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-center cmn">{SGG_CD}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-center cmn">{SGG_NM}</td>
|
||||
<td class="dummy-td cmn"></td>
|
||||
</tr>
|
||||
</template>
|
||||
<template id="sggNotFound--${pageName}">
|
||||
<tr>
|
||||
<td valign="top" colspan="14" class="dataTables_empty text-center">
|
||||
정보를 찾지 못했습니다.
|
||||
</td>
|
||||
</tr>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
pageObject['${pageName}'] = {};
|
||||
|
||||
pageObject['${pageName}'].originalDataset = new Dataset({
|
||||
keymapper : info => info ? info.SGG_CD : ""
|
||||
});
|
||||
pageObject['${pageName}'].backupDataset = new Dataset({
|
||||
keymapper : info => info ? info.SGG_CD : ""
|
||||
});
|
||||
|
||||
|
||||
function fnRenderBackupAndOriginal(list,tbodyId,dataset){
|
||||
$("#"+tbodyId).html("");
|
||||
|
||||
if(list != null && list.length > 0){
|
||||
dataset.setData(list);
|
||||
} else {
|
||||
dataset.setData([]);
|
||||
}
|
||||
|
||||
var empty = dataset.empty;
|
||||
var notFound = [document.getElementById("sggNotFound--${pageName}").innerHTML];
|
||||
var found = document.getElementById("sggRow--${pageName}").innerHTML;
|
||||
var replacer = (str, dataItem) => str.replace(/{onclick}/gi, "");
|
||||
var trs = empty ? notFound : dataset.inStrings(found, replacer);
|
||||
$("#"+tbodyId).html(trs.join());
|
||||
}
|
||||
|
||||
function getBackupAndOriginalDataList(){
|
||||
ajax.get({
|
||||
url : wctx.url("/admin/sggBackup/list.do"),
|
||||
data : {
|
||||
originalTable : "TB_SGG",
|
||||
backupTable : "TB_SGG_ORG",
|
||||
pkName : "SGG_CD"
|
||||
},
|
||||
success : (resp) => {
|
||||
|
||||
fnRenderBackupAndOriginal(resp.originalDataList,"originalSggTbody--${pageName}", pageObject['${pageName}'].originalDataset);
|
||||
fnRenderBackupAndOriginal(resp.backupDataList,"backupSggTbody--${pageName}", pageObject['${pageName}'].backupDataset);
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
$("#btnAdd--${pageName}").on("click", function(){
|
||||
var checked = $("#backupSggTbody--${pageName}").find("input[type='checkbox']:checked");
|
||||
if(checked.length < 1){
|
||||
return;
|
||||
}
|
||||
|
||||
var arr = [];
|
||||
checked.each(function(){
|
||||
arr.push(this.value);
|
||||
});
|
||||
|
||||
ajax.post({
|
||||
url : wctx.url("/admin/sggBackup/activate.do"),
|
||||
data : {
|
||||
originalTable : "TB_SGG",
|
||||
backupTable : "TB_SGG_ORG",
|
||||
pkName : "SGG_CD",
|
||||
pks : arr.join(",")
|
||||
},
|
||||
success : (resp) => {
|
||||
if(resp.saved){
|
||||
getBackupAndOriginalDataList();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
});
|
||||
$("#btnDel--${pageName}").on("click", function(){
|
||||
var checked = $("#originalSggTbody--${pageName}").find("input[type='checkbox']:checked");
|
||||
if(checked.length < 1){
|
||||
return;
|
||||
}
|
||||
var arr = [];
|
||||
checked.each(function(){
|
||||
arr.push(this.value);
|
||||
});
|
||||
|
||||
ajax.post({
|
||||
url : wctx.url("/admin/sggBackup/deactivate.do"),
|
||||
data : {
|
||||
originalTable : "TB_SGG",
|
||||
backupTable : "TB_SGG_ORG",
|
||||
pkName : "SGG_CD",
|
||||
pks : arr.join(",")
|
||||
},
|
||||
success : (resp) => {
|
||||
if(resp.saved){
|
||||
getBackupAndOriginalDataList();
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
$(document).ready(function(){
|
||||
getBackupAndOriginalDataList();
|
||||
});
|
||||
|
||||
</script>
|
||||
@ -1,325 +0,0 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
<c:set var="pageKorName" scope="request">장비단속레이아웃 관리</c:set>
|
||||
|
||||
<div class="content-wrapper">
|
||||
<div class="container-xxl flex-grow-1 px-0">
|
||||
<div class="card wrapper-list">
|
||||
|
||||
<div class="container-page-btn">
|
||||
<button type="button" id="btnReset--${pageName}" class="btn btn-outline-dark w-px-120" title="초기화">
|
||||
초기화
|
||||
</button>
|
||||
<span class="container-window-btn-right">
|
||||
<button type="button" id="btnSearch--${pageName}" class="btn btn-search w-px-120" title="검색">
|
||||
검색
|
||||
</button>
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<form id="frmSearch--${pageName}" name="frmSearch">
|
||||
<div class="container-search">
|
||||
<div class="row g-1">
|
||||
<div class="col-6">
|
||||
<span class="form-label fw-bold form-search-title">업무구분</span>
|
||||
<span class="form-search-linebox">
|
||||
<c:forEach items="${TaskListForSgg}" var="item">
|
||||
<label>
|
||||
<input name="taskSeCd" type="radio" value="${item.code}"
|
||||
class="form-check-input" alt="업무구분"
|
||||
onchange="pageObject['${pageName}'].fnResetAndChangeBiz(this.value);">
|
||||
${item.value}
|
||||
</label>
|
||||
</c:forEach>
|
||||
</span>
|
||||
</div>
|
||||
<div class="col-6">
|
||||
|
||||
</div>
|
||||
<div class="col-6">
|
||||
|
||||
</div>
|
||||
<div class="col-6">
|
||||
|
||||
</div>
|
||||
<div class="col-6">
|
||||
|
||||
</div>
|
||||
<div class="col-6">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<div>
|
||||
<div id="gridbuttonArea--${pageName}" class="container-page-btn">
|
||||
<div class="d-flex flex-row justify-content-between">
|
||||
<span id="layoutPaging--${pageName}PagingInfo" class="dataTables_info" role="status" aria-live="polite"></span>
|
||||
<ul id="layoutPaging--${pageName}" class="pagination pagination-primary">
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<span class="container-window-btn-right">
|
||||
<button type="button" class="btn btn-primary w-px-120"
|
||||
id="btnAdd--${pageName}" title="추가">
|
||||
추가
|
||||
</button>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card-datatable text-nowrap">
|
||||
<div id="DataTables_Table_0_wrapper--${pageName}" class="dataTables_wrapper dt-bootstrap5 no-footer">
|
||||
<div id="table-responsive--${pageName}" class="table-responsive ox-scroll oy-scroll h-px-500">
|
||||
<table id="DataTables_Table_0--${pageName}"
|
||||
class="table-layout-fixed datatables-ajax table table-bordered dataTable no-footer">
|
||||
<thead class="sticky-thead">
|
||||
<tr id="layoutThead--${pageName}">
|
||||
<th style="width: 80px;">No.</th>
|
||||
<th style="width: 160px;">업무명</th>
|
||||
<th style="width: 240px;">부서명</th>
|
||||
<th style="width: 240px;">파일형식</th>
|
||||
<th style="width: 160px;">업체명</th>
|
||||
<th style="width: 160px;">업체명(연계)</th>
|
||||
<th class="cmn dummy-th"></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="layoutTbody--${pageName}">
|
||||
</tbody>
|
||||
<template id="layoutRow--${pageName}">
|
||||
<tr data-key="{FILE_LAYOUT_ID}">
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-end">{ROW_NUM}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-center">{TASK_SE_NM}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-center">{DEPT_NM}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-center">{DATA_FILE_SE_NM}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-center">{ENT_NM}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-center">{LINK_ENT_NM}</td>
|
||||
<td class="dummy-td cmn"></td>
|
||||
</tr>
|
||||
</template>
|
||||
<template id="layoutNotFound--${pageName}">
|
||||
<tr>
|
||||
<td valign="top" colspan="7" class="dataTables_empty text-center">
|
||||
레이아웃 정보를 찾지 못했습니다.
|
||||
</td>
|
||||
</tr>
|
||||
</template>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="content-backdrop fade"></div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
|
||||
/**************************************************************************
|
||||
* Global Variable
|
||||
**************************************************************************/
|
||||
pageObject["${pageName}"] = {};
|
||||
|
||||
|
||||
$(document).ready(function(){
|
||||
|
||||
var $P = pageObject["${pageName}"];
|
||||
|
||||
/**************************************************************************
|
||||
* DatasetControl
|
||||
**************************************************************************/
|
||||
$P.layoutControl = new DatasetControl({
|
||||
dataGetter : obj => obj["List"], appendData:true,
|
||||
keymapper : info => info ? info.LAYOUT_ID : "",
|
||||
urls : {
|
||||
load : "",
|
||||
getInfo : ""
|
||||
},
|
||||
formats: {
|
||||
REG_DT : datetimeFormat,
|
||||
MDFCN_DT : datetimeFormat
|
||||
}
|
||||
});
|
||||
$P.layoutControl.defaultFetchSize = FETCH_XS;
|
||||
$P.layoutControl.query = { pageNum : 1, fetchSize : $P.layoutControl.defaultFetchSize };
|
||||
/**************************************************************************
|
||||
* Dataset.on
|
||||
**************************************************************************/
|
||||
$P.layoutControl.dataset.onDatasetChange = (obj, option) => {
|
||||
var t = $P.getGridTemplate();
|
||||
var trs = Apply.fromDataset.getTbody($P.layoutControl.dataset, t.found, t.notFound, t.replacer);
|
||||
$P.renderLayoutList(obj["Total"], $P.layoutControl.dataset.length, trs, option);
|
||||
|
||||
Apply.fromDataset.paging($P.layoutControl.dataset, obj, "layoutPaging--${pageName}");
|
||||
};
|
||||
|
||||
$P.layoutControl.dataset.onCurrentChange = (dataItem) => {
|
||||
Apply.fromDataset.currentRow($P.layoutControl.dataset, dataItem, $("#layoutTbody--${pageName}")[0]);
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* pageObject.function
|
||||
**************************************************************************/
|
||||
$P.fnResetAndChangeBiz = (taskSeCd) => {
|
||||
$P.layoutControl.urls.load = wctx.url("/"+taskSeCd+"/crdn/crdn01/010/list.do");
|
||||
$P.layoutControl.urls.getInfo = wctx.url("/"+taskSeCd+"/crdn/crdn01/020/info.do");
|
||||
|
||||
$P.fnReset();
|
||||
}
|
||||
|
||||
$P.fnReset = () => {
|
||||
var searchForm = $("#frmSearch--${pageName}");
|
||||
searchForm.find("input[type='radio']").not("[name='taskSeCd']").prop("checked", false);
|
||||
searchForm.find("input[type='checkbox']").prop("checked", false);
|
||||
searchForm.find("input[type='hidden']").val("");
|
||||
searchForm.find("input[type='text']").val("");
|
||||
|
||||
$P.layoutControl.dataset.setData([]);
|
||||
}
|
||||
|
||||
$P.getParams = () => {
|
||||
var formFields = new FimsFormFields("#frmSearch--${pageName}");
|
||||
var data = formFields.get();
|
||||
data.fetchSize = $P.layoutControl.defaultFetchSize;
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
$P.searchLayoutList = () => {
|
||||
$P.layoutControl.query = $P.getParams();
|
||||
$P.layoutControl.load(1);
|
||||
}
|
||||
|
||||
$P.scrollLayoutList = () => {
|
||||
$P.layoutControl.load($P.layoutControl.query.pageNum + 1);
|
||||
}
|
||||
|
||||
$P.refreshLayoutList = () => {
|
||||
if($P.layoutControl.query.pageNum == null){
|
||||
return;
|
||||
}
|
||||
|
||||
$P.layoutControl.reload({all : true});
|
||||
}
|
||||
|
||||
$P.getGridTemplate = () => {
|
||||
var notFound = [document.getElementById("layoutNotFound--${pageName}").innerHTML];
|
||||
var found = document.getElementById("layoutRow--${pageName}").innerHTML;
|
||||
var replacer = (str, dataItem) => str
|
||||
.replace(/{onclick}/gi, "pageObject['${pageName}'].clickLayoutList('" + dataItem.getValue("FILE_LAYOUT_ID") + "');")
|
||||
.replace(/{ondblclick}/gi, "pageObject['${pageName}'].dblclickLayoutList('" + dataItem.getValue("FILE_LAYOUT_ID") + "');");
|
||||
|
||||
return {
|
||||
found : found,
|
||||
notFound : notFound,
|
||||
replacer : replacer
|
||||
};
|
||||
}
|
||||
|
||||
$P.renderLayoutList = (total, listLength, trs, option) => {
|
||||
|
||||
let noMore = (listLength >= total);
|
||||
var initScroll = ($P.layoutControl.query.pageNum < 2);
|
||||
if(option != null && option.reloaded){
|
||||
initScroll = false;
|
||||
}
|
||||
|
||||
$("#table-responsive--${pageName}")[0].changeContent(trs, initScroll, noMore);
|
||||
|
||||
fn_securityModeToggle($("#securityMode--top").is(":checked")); //보안모드
|
||||
}
|
||||
|
||||
$P.clickLayoutList = (dataKey) => {
|
||||
if(dataKey == ""){
|
||||
return;
|
||||
}
|
||||
|
||||
$("#layoutTbody--${pageName}").setCurrentRow(dataKey);
|
||||
|
||||
Apply.toDataset.current($P.layoutControl.dataset, dataKey);
|
||||
}
|
||||
|
||||
$P.dblclickLayoutList = (dataKey) => {
|
||||
$P.getInfo(dataKey);
|
||||
}
|
||||
|
||||
$P.createLayout = () => {
|
||||
$P.getInfo();
|
||||
}
|
||||
|
||||
$P.getInfo = (fileLayoutId) => {
|
||||
var params = {};
|
||||
if(fileLayoutId != null){
|
||||
params.fileLayoutId = fileLayoutId;
|
||||
}
|
||||
|
||||
ajax.get({
|
||||
url : $P.layoutControl.urls.getInfo,
|
||||
data : params,
|
||||
success : (resp) => {
|
||||
|
||||
dialog.open({
|
||||
id : "layoutInfoDialog",
|
||||
title : "레이아웃 정보",
|
||||
size : "xl",
|
||||
content : resp,
|
||||
init : () => {
|
||||
var parentRes = new Object();
|
||||
var childReq = pageObject.childReq.pop();
|
||||
|
||||
for(var reqKey in childReq) {
|
||||
if($P.provide[reqKey]){
|
||||
parentRes[reqKey] = $P.provide[reqKey];
|
||||
} else {
|
||||
parentRes[reqKey] = function(){};
|
||||
}
|
||||
}
|
||||
|
||||
pageObject.parentRes.push(parentRes);
|
||||
|
||||
setDialogZindex();
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
$P.provide = {
|
||||
"refreshList" : function(){
|
||||
$P.refreshLayoutList();
|
||||
},
|
||||
};
|
||||
|
||||
/**************************************************************************
|
||||
* element.on
|
||||
**************************************************************************/
|
||||
$('#btnReset--${pageName}').on('click', () => $P.fnReset());
|
||||
$('#btnSearch--${pageName}').on('click', () => $P.searchLayoutList());
|
||||
$('#btnAdd--${pageName}').on('click', () => $P.createLayout());
|
||||
$('#btnDel--${pageName}').on('click', () => $P.removeLayout());
|
||||
|
||||
/**************************************************************************
|
||||
* 초기화
|
||||
**************************************************************************/
|
||||
fnMakeResizableTable($("#table-responsive--${pageName}")[0]);
|
||||
fnMakeScrollableTable($("#table-responsive--${pageName}")[0], $P.scrollLayoutList);
|
||||
|
||||
var defaultBizValue = $("#layout-navbar input[name='taskSeCd']:checked").val();
|
||||
$("#frmSearch--${pageName} input[name='taskSeCd'][value='" + defaultBizValue + "']").prop("checked",true);
|
||||
$P.fnResetAndChangeBiz(defaultBizValue);
|
||||
|
||||
fn_securityModeToggle($("#securityMode--top").is(":checked")); //보안모드
|
||||
|
||||
$("#frmSearch--${pageName} input[name='taskSeCd']").each(function(i) {
|
||||
$(this).prop("disabled", "true");
|
||||
});
|
||||
});
|
||||
|
||||
</script>
|
||||
@ -1,372 +0,0 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
<c:set var="pageKorName" scope="request">장비단속레이아웃 상세</c:set>
|
||||
|
||||
<div class="content-wrapper">
|
||||
<div class="container-xxl flex-grow-1 px-0">
|
||||
<form id="frmEdit--${pageName}" name="frmEdit">
|
||||
|
||||
<div class="card my-2">
|
||||
<div class="card-header">
|
||||
<h5>파일 레이아웃</h5>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<input type="hidden" id="fileLayoutId--${pageName}" name="fileLayoutId" data-map="FILE_LAYOUT_ID" />
|
||||
<input type="hidden" id="sggCd--${pageName}" name="sggCd" data-map="SGG_CD" />
|
||||
<input type="hidden" id="taskSeCd--${pageName}" name="taskSeCd" data-map="TASK_SE_CD" />
|
||||
<input type="hidden" id="instCd--${pageName}" name="instCd" data-map="INST_CD" />
|
||||
<input type="hidden" id="deptCd--${pageName}" name="deptCd" data-map="DEPT_CD" />
|
||||
|
||||
<div class="row g-1">
|
||||
<div class="col-md-4">
|
||||
<label for="fileGroup--${pageName}"
|
||||
class="w-px-130 bg-lighter pe-2 col-form-label text-sm-end required">
|
||||
자료 파일 구분
|
||||
</label>
|
||||
<select id="fileGroup--${pageName}" name="fileGroup" data-map="DATA_FILE_SE"
|
||||
class="form-select" required>
|
||||
<option value="">선택</option>
|
||||
<option value="TXT">텍스트파일 포함</option>
|
||||
<option value="JPG">텍스트파일 미포함</option>
|
||||
<option value="BIN">단일 바이너리 파일</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
<label for="fileNameLength--${pageName}"
|
||||
class="w-px-130 bg-lighter pe-2 col-form-label text-sm-end">
|
||||
파일명 길이
|
||||
</label>
|
||||
<input type="text" id="fileNameLength--${pageName}" name="fileNameLength" data-map="FILE_NM_SZ"
|
||||
class="form-control w-px-70" maxlength="4" data-maxlengthb="4" />
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
<label for="enterpriseName--${pageName}"
|
||||
class="w-px-130 bg-lighter pe-2 col-form-label text-sm-end">
|
||||
업체명
|
||||
</label>
|
||||
<input type="text" id="enterpriseName--${pageName}" name="enterpriseName" data-map="ENT_NM"
|
||||
class="form-control" maxlength="100" data-maxlengthb="100" />
|
||||
</div>
|
||||
<div class="col-md-2">
|
||||
<label for="fileNameSeperator--${pageName}"
|
||||
class="w-px-130 bg-lighter pe-2 ps-2 col-form-label text-sm-start">
|
||||
파일명 구분 유형
|
||||
</label>
|
||||
<select id="fileNameSeperator--${pageName}" name="fileNameSeperator" data-map="FILE_NM_SE_TYPE"
|
||||
class="form-select">
|
||||
<option value=""></option>
|
||||
<option value="_">언더바</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-md-10">
|
||||
<label for="fileNameItmes--${pageName}"
|
||||
class="w-px-130 bg-lighter pe-2 ps-2 col-form-label text-sm-start">
|
||||
파일명 형식
|
||||
</label>
|
||||
<input type="text" id="fileNameItmes--${pageName}" name="fileNameItmes" data-map="FILE_NM_LAYOUT"
|
||||
class="form-control w-100" maxlength="500" data-maxlengthb="500" />
|
||||
</div>
|
||||
<div class="col-md-2">
|
||||
<label for="contentSeperator--${pageName}"
|
||||
class="w-px-130 bg-lighter pe-2 ps-2 col-form-label text-sm-start">
|
||||
자료 구분 유형1
|
||||
</label>
|
||||
<select id="contentSeperator--${pageName}" name="contentSeperator" data-map="DATA_SE_TYPE1"
|
||||
class="form-select">
|
||||
<option value=""></option>
|
||||
<option value=",">콤마</option>
|
||||
<option value="byte">바이트</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-md-10">
|
||||
<label for="contentItems--${pageName}"
|
||||
class="w-px-130 bg-lighter pe-2 ps-2 col-form-label text-sm-start">
|
||||
자료 형식1
|
||||
</label>
|
||||
<input type="text" id="contentItems--${pageName}" name="contentItems" data-map="DATA_LAYOUT1"
|
||||
class="form-control w-100" maxlength="500" data-maxlengthb="500" />
|
||||
</div>
|
||||
<div class="col-md-2">
|
||||
<label for="contentSecondSeperator--${pageName}"
|
||||
class="w-px-130 bg-lighter pe-2 ps-2 col-form-label text-sm-start">
|
||||
자료 구분 유형2
|
||||
</label>
|
||||
<select id="contentSecondSeperator--${pageName}" name="contentSecondSeperator" data-map="DATA_SE_TYPE2"
|
||||
class="form-select">
|
||||
<option value=""></option>
|
||||
<option value=",">콤마</option>
|
||||
<option value="LineBreak">줄바꿈문자</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-md-10">
|
||||
<label for="secondSeperatorStarterItems--${pageName}"
|
||||
class="w-px-130 bg-lighter pe-2 ps-2 col-form-label text-sm-start">
|
||||
자료 형식2
|
||||
</label>
|
||||
<input type="text" id="secondSeperatorStarterItems--${pageName}" name="secondSeperatorStarterItems" data-map="DATA_LAYOUT2"
|
||||
class="form-control w-100" maxlength="500" data-maxlengthb="500" />
|
||||
</div>
|
||||
<div class="col-md-2">
|
||||
<label for="countPerFileGroup--${pageName}"
|
||||
class="w-px-130 bg-lighter pe-2 ps-2 col-form-label text-sm-start">
|
||||
파일 총 건수
|
||||
</label>
|
||||
<input type="text" id="countPerFileGroup--${pageName}" name="countPerFileGroup" data-map="FILE_TNOCS"
|
||||
class="form-control w-50" maxlength="2" data-maxlengthb="2" />
|
||||
</div>
|
||||
<div class="col-md-10">
|
||||
<label for="linkFileLocation--${pageName}"
|
||||
class="w-px-130 bg-lighter pe-2 ps-2 col-form-label text-sm-start">
|
||||
연계 파일 경로
|
||||
</label>
|
||||
<input type="text" id="linkFileLocation--${pageName}" name="linkFileLocation" data-map="LINK_FILE_PATH"
|
||||
class="form-control w-100" maxlength="200" data-maxlengthb="200" />
|
||||
</div>
|
||||
<div class="col-md-9">
|
||||
<label for="sameItemsInFileGroup--${pageName}"
|
||||
class="w-px-130 bg-lighter pe-2 col-form-label text-sm-end">
|
||||
동일 항목
|
||||
</label>
|
||||
<input type="text" id="sameItemsInFileGroup--${pageName}" name="sameItemsInFileGroup" data-map="SAME_ITEMS"
|
||||
class="form-control w-px-600" maxlength="300" data-maxlengthb="300" />
|
||||
</div>
|
||||
<div class="col-md-9">
|
||||
<label for="increaseItemInFileGroup--${pageName}"
|
||||
class="w-px-130 bg-lighter pe-2 col-form-label text-sm-end">
|
||||
증가 항목
|
||||
</label>
|
||||
<input type="text" id="increaseItemInFileGroup--${pageName}" name="increaseItemInFileGroup" data-map="INCREASE_ITEM"
|
||||
class="form-control w-px-600" maxlength="300" data-maxlengthb="300" />
|
||||
</div>
|
||||
<div class="col-md-3">
|
||||
<label for="increaseTypeInFileGroup--${pageName}"
|
||||
class="w-px-130 bg-lighter pe-2 col-form-label text-sm-end">
|
||||
증가 형식
|
||||
</label>
|
||||
<select id="increaseTypeInFileGroup--${pageName}" name="increaseTypeInFileGroup" data-map="INCREASE_TYPE"
|
||||
class="form-select">
|
||||
<option value=""></option>
|
||||
<option value="number">숫자</option>
|
||||
<option value="alphabet">영문자</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card my-2">
|
||||
<div class="card-header">
|
||||
<h5>파일전송 연계 정보</h5>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="row g-1">
|
||||
<div class="col-md-4">
|
||||
<label for="linkEnterpriseName--${pageName}"
|
||||
class="w-px-130 bg-lighter pe-2 col-form-label text-sm-end">
|
||||
업체명(연계)
|
||||
</label>
|
||||
<input type="text" id="linkEnterpriseName--${pageName}" name="linkEnterpriseName" data-map="LINK_ENT_NM"
|
||||
class="form-control" maxlength="100" data-maxlengthb="100" />
|
||||
</div>
|
||||
|
||||
<div class="col-md-4">
|
||||
<label for="ip--${pageName}"
|
||||
class="w-px-130 bg-lighter pe-2 col-form-label text-sm-end">
|
||||
아이피
|
||||
</label>
|
||||
<input type="text" id="ip--${pageName}" name="ip" data-map="REMOTE_IP"
|
||||
class="form-control" maxlength="100" data-maxlengthb="100" />
|
||||
</div>
|
||||
|
||||
<div class="col-md-4">
|
||||
<label for="port--${pageName}"
|
||||
class="w-px-130 bg-lighter pe-2 col-form-label text-sm-end">
|
||||
포트
|
||||
</label>
|
||||
<input type="number" id="port--${pageName}" name="port" data-map="REMOTE_PORT"
|
||||
class="form-control" min="1" max="65535" />
|
||||
</div>
|
||||
|
||||
<div class="col-md-6">
|
||||
<label for="id--${pageName}"
|
||||
class="w-px-130 bg-lighter pe-2 col-form-label text-sm-end">
|
||||
아이디
|
||||
</label>
|
||||
<input type="text" id="id--${pageName}" name="id" data-map="REMOTE_ID"
|
||||
class="form-control" maxlength="100" data-maxlengthb="100" />
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<label for="pw--${pageName}"
|
||||
class="w-px-130 bg-lighter pe-2 col-form-label text-sm-end">
|
||||
패스워드
|
||||
</label>
|
||||
<input type="text" id="pw--${pageName}" name="pw" data-map="REMOTE_PASSWORD"
|
||||
class="form-control" maxlength="100" data-maxlengthb="100" />
|
||||
</div>
|
||||
|
||||
<div class="col-md-2">
|
||||
<label for="osType--${pageName}"
|
||||
class="w-px-130 bg-lighter pe-2 ps-2 col-form-label text-sm-start">
|
||||
운영체제
|
||||
</label>
|
||||
<select id="osType--${pageName}" name="osType" data-map="REMOTE_OS"
|
||||
class="form-select w-100">
|
||||
<option value=""></option>
|
||||
<option value="linux">리눅스</option>
|
||||
<option value="windows">윈도우</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="col-md-10">
|
||||
<label for="workPath--${pageName}"
|
||||
class="w-px-130 bg-lighter pe-2 ps-2 col-form-label text-sm-start">
|
||||
파일경로
|
||||
</label>
|
||||
<input type="text" id="workPath--${pageName}" name="workPath" data-map="REMOTE_WORK_PATH"
|
||||
class="form-control w-100" maxlength="100" data-maxlengthb="100" />
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row m-3">
|
||||
<div class="col-md-12">
|
||||
<span class="float-end">
|
||||
<button type="button" id="btnSave--${pageName}" class="btn btn-primary">저장</button>
|
||||
<button type="button" id="btnDelete--${pageName}" class="btn btn-primary">삭제</button>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
pageObject["${pageName}"] = {};
|
||||
pageObject["${pageName}"].provided = {};
|
||||
|
||||
pageObject.childReq = [];
|
||||
pageObject.childReq.push({
|
||||
refreshList : function(){ },
|
||||
});
|
||||
|
||||
$(document).ready(function(){
|
||||
|
||||
var $P = pageObject["${pageName}"];
|
||||
|
||||
if(pageObject.parentRes.length > 0){
|
||||
$P.provided = pageObject.parentRes.pop();
|
||||
} else {
|
||||
$P.provided = pageObject.childReq.pop();
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* DatasetControl, Dataset, FormFields
|
||||
**************************************************************************/
|
||||
$P.formFields = new FimsFormFields("#frmEdit--${pageName}");
|
||||
|
||||
$P.layoutControl = new DatasetControl({
|
||||
dataGetter : obj => obj["List"], appendData : true,
|
||||
keymapper : info => info ? info.FILE_LAYOUT_ID : "",
|
||||
urls : {
|
||||
create : wctx.url("/${taskSeCd}/crdn/crdn01/020/create.do"),
|
||||
update : wctx.url("/${taskSeCd}/crdn/crdn01/020/update.do"),
|
||||
remove : wctx.url("/${taskSeCd}/crdn/crdn01/020/remove.do")
|
||||
},
|
||||
formats: {
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
/**************************************************************************
|
||||
* Dataset.on
|
||||
**************************************************************************/
|
||||
$P.layoutControl.dataset.onCurrentChange = (dataItem) => {
|
||||
if(!dataItem){
|
||||
return;
|
||||
}
|
||||
$P.formFields.set($P.layoutControl, dataItem);
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* pageObject.function
|
||||
**************************************************************************/
|
||||
$P.fnSave = () => {
|
||||
|
||||
if(!customValidate($("#frmEdit--${pageName}").find("input,select,textarea"))) return;
|
||||
|
||||
var info = $P.formFields.get();
|
||||
|
||||
var create = $P.layoutControl.dataset.empty;
|
||||
|
||||
ajax.post({
|
||||
url : create ? $P.layoutControl.urls.create : $P.layoutControl.urls.update,
|
||||
data : info,
|
||||
success : (resp) => {
|
||||
if(resp.saved){
|
||||
dialog.close("layoutInfoDialog");
|
||||
dialog.alert({
|
||||
content:"저장되었습니다.",
|
||||
init : () => {
|
||||
setDialogZindex();
|
||||
focusClose();
|
||||
},
|
||||
onClose : () => $P.provided.refreshList()
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
$P.fnRemove = () => {
|
||||
|
||||
var info = $P.formFields.get();
|
||||
|
||||
ajax.post({
|
||||
url : $P.layoutControl.urls.remove,
|
||||
data : {
|
||||
fileLayoutId : info.fileLayoutId
|
||||
},
|
||||
success : (resp) => {
|
||||
if(resp.saved){
|
||||
dialog.close("layoutInfoDialog");
|
||||
dialog.alert({
|
||||
content:"삭제되었습니다.",
|
||||
init : () => {
|
||||
setDialogZindex();
|
||||
focusClose();
|
||||
},
|
||||
onClose : () => $P.provided.refreshList()
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* element.on
|
||||
**************************************************************************/
|
||||
$("#btnSave--${pageName}").on('click', () => $P.fnSave());
|
||||
$("#btnDelete--${pageName}").on('click', () => $P.fnRemove());
|
||||
|
||||
/**************************************************************************
|
||||
* 초기화
|
||||
**************************************************************************/
|
||||
var layoutInfo = ${layoutInfo};
|
||||
if(layoutInfo != null){
|
||||
$P.layoutControl.dataset.setData([layoutInfo]);
|
||||
} else {
|
||||
$P.layoutControl.dataset.setData([]);
|
||||
$("#sggCd--${pageName}").val(MY_INFO.info.sggCd);
|
||||
$("#instCd--${pageName}").val(MY_INFO.info.instCd);
|
||||
$("#deptCd--${pageName}").val(MY_INFO.info.deptCd);
|
||||
$("#taskSeCd--${pageName}").val("${taskSeCd}");
|
||||
$("#btnDelete--${pageName}").attr("hidden","hidden");
|
||||
}
|
||||
|
||||
});
|
||||
</script>
|
||||
File diff suppressed because it is too large
Load Diff
@ -1,175 +0,0 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
|
||||
<div class="card">
|
||||
<form id="frmEdit--${pageName}" name="frmEdit">
|
||||
|
||||
<input type="hidden" id="crdnId--${pageName}" name="crdnId" data-map="CRDN_ID" />
|
||||
|
||||
<div class="row g-1">
|
||||
<div class="col-md-12">
|
||||
<label for="levyExclRsnCd--${pageName}"
|
||||
class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end required">금액 수정 구분</label>
|
||||
<select class="form-select" id="chgAmtSe--${pageName}" name="chgAmtSe" required>
|
||||
<option value="1">가산</option>
|
||||
<option value="2">감액</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-md-12">
|
||||
★ 가산은 단속원금에 만원을 더합니다.<br />
|
||||
★ 감액은 단속원금을 만원만 남깁니다.
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<div>
|
||||
<span class="container-page-btn">
|
||||
<span class="container-window-btn-right">
|
||||
<button type="button" class="btn btn-primary" id="btnSave--${pageName}" title="금액 수정">금액 수정</button>
|
||||
<button type="button" class="btn btn-primary" id="btnRestore--${pageName}" title="원금 복원">원금 복원</button>
|
||||
</span>
|
||||
</span>
|
||||
</div>
|
||||
<!-- / 업무 버튼 표시 -->
|
||||
|
||||
<script>
|
||||
|
||||
/**************************************************************************
|
||||
* Global Variable
|
||||
**************************************************************************/
|
||||
pageObject["${pageName}"] = {};
|
||||
|
||||
$(document).ready(function(){
|
||||
|
||||
var $P = pageObject["${pageName}"];
|
||||
/**************************************************************************
|
||||
* DatasetControl, Dataset, FormFields
|
||||
**************************************************************************/
|
||||
$P.formFields = new FimsFormFields("#frmEdit--${pageName}");
|
||||
|
||||
$P.crdnControl = new DatasetControl({
|
||||
dataGetter : obj => obj.crdnInfo,
|
||||
keymapper : info => info ? info.CRDN_ID : "",
|
||||
urls : {
|
||||
update : wctx.url("/PVS/crdn/crdn02/050/update.do")
|
||||
},
|
||||
formats: {}
|
||||
});
|
||||
|
||||
|
||||
|
||||
/**************************************************************************
|
||||
* Dataset.on
|
||||
**************************************************************************/
|
||||
$P.crdnControl.dataset.onCurrentChange = (dataItem) => {
|
||||
$P.formFields.set($P.crdnControl,dataItem);
|
||||
}
|
||||
|
||||
|
||||
/**************************************************************************
|
||||
* pageObject.function
|
||||
**************************************************************************/
|
||||
$P.fnSave = async() => {
|
||||
|
||||
var alertMessage = "";
|
||||
if($("#chgAmtSe--${pageName}").val() == "1"){
|
||||
if(crdnInfo.OVTM_YN == "Y"){
|
||||
dialog.alert({
|
||||
content : "이미 가산 처리된 자료입니다.",
|
||||
init : function(){
|
||||
setDialogZindex();
|
||||
focusClose();
|
||||
}
|
||||
});
|
||||
return;
|
||||
}
|
||||
alertMessage = "가산 처리하시겠습니까?";
|
||||
|
||||
} else if($("#chgAmtSe--${pageName}").val() == "2"){
|
||||
if(crdnInfo.OVTM_PRTTN_YN == "Y"){
|
||||
dialog.alert({
|
||||
content : "이미 감액 처리된 자료입니다.",
|
||||
init : function(){
|
||||
setDialogZindex();
|
||||
focusClose();
|
||||
}
|
||||
});
|
||||
return;
|
||||
}
|
||||
alertMessage = "감액 처리하시겠습니까?";
|
||||
}
|
||||
|
||||
if(await confirm2(alertMessage)){
|
||||
var info = $P.formFields.get();
|
||||
if (!info) {
|
||||
return;
|
||||
}
|
||||
|
||||
ajax.post({
|
||||
url : $P.crdnControl.urls.update,
|
||||
data : info,
|
||||
success : (resp) => {
|
||||
$P.saveCallback(resp);
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
$P.fnRestore = async() => {
|
||||
|
||||
if(crdnInfo.OVTM_YN != "Y" && crdnInfo.OVTM_PRTTN_YN != "Y"){
|
||||
dialog.alert({
|
||||
content: "2시간 초과 처리되지 않은 자료입니다.",
|
||||
init : function() {
|
||||
setDialogZindex();
|
||||
focusClose();
|
||||
}
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
if(await confirm2("원금 복원하시겠습니까?")){
|
||||
var info = $P.formFields.get();
|
||||
info.chgAmtSe = "0";
|
||||
|
||||
ajax.post({
|
||||
url : $P.crdnControl.urls.update,
|
||||
data : info,
|
||||
success : (resp) => {
|
||||
$P.saveCallback(resp);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
$P.saveCallback = (resp) => {
|
||||
if (resp.saved) {
|
||||
dialog.alert({
|
||||
content : "저장됐습니다.",
|
||||
init : function(){
|
||||
setDialogZindex();
|
||||
focusClose();
|
||||
}
|
||||
});
|
||||
dialog.close("overTimeProcessDialog--${openerPageName}");
|
||||
|
||||
if ("${savedCallbackFuncName}" != "") {
|
||||
${savedCallbackFuncName}(resp.saved);
|
||||
}
|
||||
}
|
||||
};
|
||||
/**************************************************************************
|
||||
* element.on
|
||||
**************************************************************************/
|
||||
$("#btnSave--${pageName}").on("click", () => $P.fnSave() );
|
||||
$("#btnRestore--${pageName}").on("click", () => $P.fnRestore() );
|
||||
/**************************************************************************
|
||||
* 초기화
|
||||
**************************************************************************/
|
||||
var crdnInfo = ${crdnInfo};
|
||||
$P.crdnControl.dataset.setData([crdnInfo]);
|
||||
});
|
||||
|
||||
|
||||
</script>
|
||||
@ -1,391 +0,0 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
<c:set var="pageKorName" scope="request">표지 정보 미확인 자료</c:set>
|
||||
<div class="content-wrapper">
|
||||
<div class="container-xxl flex-grow-1 px-0">
|
||||
<div class="card wrapper-list">
|
||||
|
||||
<div class="container-page-btn">
|
||||
<button type="button" id="btnReset--${pageName}" class="btn btn-outline-dark w-px-120" title="초기화">
|
||||
초기화
|
||||
</button>
|
||||
<span class="container-window-btn-right">
|
||||
<button type="button" id="btnSearch--${pageName}" class="btn btn-search w-px-120"
|
||||
title="검색">검색</button>
|
||||
<button type="button" id="btnExcel--${pageName}" class="btn btn-excel w-px-120"
|
||||
title="엑셀 저장">엑셀</button>
|
||||
</span>
|
||||
</div>
|
||||
<form id="frmSearch--${pageName}" name="frmSearch">
|
||||
<div class="container-search">
|
||||
<div class="row g-1">
|
||||
<div class="col-6">
|
||||
<span class="form-label fw-bold form-search-title w-px-120 text-end">단속일자</span>
|
||||
<span class="form-search-linebox">
|
||||
<input type="text" id="schCrdnYmdFrom--${pageName}" name="schCrdnYmdFrom"
|
||||
class="form-control form-date"
|
||||
data-fmt-type="day" title="시작 날짜 선택" />
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
~
|
||||
<input type="text" id="schCrdnYmdTo--${pageName}" name="schCrdnYmdTo"
|
||||
class="form-control form-date"
|
||||
data-fmt-type="day" title="종료 날짜 선택">
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
</span>
|
||||
</div>
|
||||
<div class="col-6">
|
||||
<input type="hidden" id="by--${pageName}" name="by" />
|
||||
<input type="text" class="form-control fw-bold w-px-120 text-end" id="byOutput--${pageName}" value="동적 검색" readonly />
|
||||
<input type="hidden" id="mainOption--${pageName}" name="mainOption" />
|
||||
<input type="hidden" id="subOption--${pageName}" name="subOption" />
|
||||
<input type="text" class="form-control w-px-400" id="term--${pageName}" name="term" autocomplete="off" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<div>
|
||||
<span class="container-page-btn">
|
||||
<div class="d-flex flex-row justify-content-between">
|
||||
<span id="crdnPaging--${pageName}PagingInfo" class="dataTables_info"
|
||||
role="status" aria-live="polite"></span>
|
||||
<ul id="crdnPaging--${pageName}" class="pagination pagination-primary">
|
||||
</ul>
|
||||
</div>
|
||||
<span class="container-window-btn-right">
|
||||
<button type="button" id="btnUpdateToConfirmData--${pageName}"
|
||||
class="btn btn-primary" title="개별 확인 자료로 수정">개별 확인 자료로 수정</button>
|
||||
</span>
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<div class="card-datatable text-nowrap">
|
||||
<div id="DataTables_Table_0_wrapper--${pageName}" class="dataTables_wrapper dt-bootstrap5 no-footer">
|
||||
<div id="table-responsive--${pageName}" class="table-responsive ox-scroll oy-scroll h-px-600">
|
||||
<table id="DataTables_Table_0--${pageName}"
|
||||
class="table-layout-fixed datatables-ajax table table-bordered dataTable no-footer" >
|
||||
<thead class="sticky-thead">
|
||||
<tr id="crdnTheadTr--${pageName}"
|
||||
data-by="by--${pageName}" data-by-output="byOutput--${pageName}"
|
||||
data-main-option="mainOption--${pageName}" data-sub-option="subOption--${pageName}">
|
||||
<th style="width: 100px;">No.</th>
|
||||
<th onclick="searchFromGridTitle('CRDN_INPT_SE_CD',this.innerText,'codeValue','FIM003');"
|
||||
style="width: 200px;">자료출처</th>
|
||||
<th onclick="searchFromGridTitle('CRDN_YMD','위반일자','ymd','');"
|
||||
style="width: 200px;">위반일시</th>
|
||||
<th onclick="searchFromGridTitle('VHRNO',this.innerText,'match','part');"
|
||||
style="width: 200px;">차량번호</th>
|
||||
<th onclick="searchFromGridTitle('CRDN_STDG_NM',this.innerText,'match','perfect');"
|
||||
style="width: 200px;">법정동</th>
|
||||
<th
|
||||
style="width: 200px;"
|
||||
class="text-orange">잔액</th>
|
||||
<th onclick="searchFromGridTitle('ATCH_FILE_CNT',this.innerText,'match','perfect');"
|
||||
style="width: 200px;">사진건수</th>
|
||||
<th onclick="searchFromGridTitle('CRDN_SN',this.innerText,'match','perfect');"
|
||||
style="width: 200px;">발행번호</th>
|
||||
<th class="dummy-th"></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="crdnTbody--${pageName}">
|
||||
</tbody>
|
||||
<template id="crdnRow--${pageName}">
|
||||
<tr data-key="{CRDN_ID}">
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-end">{ROW_NUM}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-center">{CRDN_INPT_SE_CD}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-center">{CRDN_YMD_TM}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-center">{VHRNO}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-center">{CRDN_STDG_NM}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-end">{BLNC}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-center">{ATCH_FILE_CNT}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-start">{CRDN_SN}</td>
|
||||
<td class="dummy-td"></td>
|
||||
</tr>
|
||||
</template>
|
||||
<template id="crdnNotFound--${pageName}">
|
||||
<tr>
|
||||
<td valign="top" colspan="9" class="dataTables_empty text-center">
|
||||
단속 정보를 찾지 못했습니다.
|
||||
</td>
|
||||
</tr>
|
||||
</template>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="content-backdrop fade"></div>
|
||||
</div>
|
||||
|
||||
|
||||
<script>
|
||||
|
||||
/**************************************************************************
|
||||
* Global Variable
|
||||
**************************************************************************/
|
||||
var FIM003 = new CommonCodes(${FIM003});
|
||||
var FIM010 = new CommonCodes(${FIM010});
|
||||
pageObject["${pageName}"] = {};
|
||||
|
||||
|
||||
$(document).ready(function(){
|
||||
|
||||
var $P = pageObject["${pageName}"];
|
||||
|
||||
/**************************************************************************
|
||||
* DatasetControl
|
||||
**************************************************************************/
|
||||
$P.crdnControl = new DatasetControl({
|
||||
dataGetter : obj => obj["List"], appendData:true,
|
||||
keymapper : info => info ? info.CRDN_ID : "",
|
||||
urls : {
|
||||
load : wctx.url("/DPV/crdn/crdn03/030/list.do"),
|
||||
getInfo : wctx.url("/DPV/sprt/sprt02/010/main.do"),
|
||||
update: wctx.url("/DPV/crdn/crdn03/030/update.do")
|
||||
},
|
||||
formats: {
|
||||
CRDN_INPT_SE_CD : FIM003,
|
||||
CRDN_YMD_TM : datetimeFormat,
|
||||
FFNLG_CRDN_AMT : numberFormat,
|
||||
CRDN_STTS_CD : FIM010,
|
||||
BLNC : numberFormat
|
||||
}
|
||||
});
|
||||
$P.crdnControl.defaultFetchSize = FETCH_XS;
|
||||
$P.crdnControl.query = { pageNum : 1, fetchSize : $P.crdnControl.defaultFetchSize };
|
||||
$P.crdnControl.beforeCurrent = null;
|
||||
|
||||
/**************************************************************************
|
||||
* Dataset.on
|
||||
**************************************************************************/
|
||||
$P.crdnControl.dataset.onDatasetChange = (obj, option) => {
|
||||
|
||||
var t = $P.getGridTemplate();
|
||||
var trs = Apply.fromDataset.getTbody($P.crdnControl.dataset, t.found, t.notFound, t.replacer);
|
||||
$P.renderCrdnList(obj["Total"], $P.crdnControl.dataset.length, trs, option);
|
||||
|
||||
Apply.fromDataset.paging($P.crdnControl.dataset, obj, "crdnPaging--${pageName}");
|
||||
};
|
||||
|
||||
$P.crdnControl.dataset.onCurrentChange = (dataItem) => {
|
||||
Apply.fromDataset.currentRow($P.crdnControl.dataset, dataItem, $("#crdnTbody--${pageName}")[0]);
|
||||
};
|
||||
|
||||
/**************************************************************************
|
||||
* pageObject.function
|
||||
**************************************************************************/
|
||||
$P.fnReset = () => {
|
||||
var searchForm = $("#frmSearch--${pageName}");
|
||||
searchForm.find("input[type='radio']").not("[name='taskSeCd']").prop("checked", false);
|
||||
searchForm.find("input[type='checkbox']").prop("checked", false);
|
||||
searchForm.find("input[type='text']").val("");
|
||||
searchForm.find("input[type='hidden']").val("");
|
||||
searchForm.find("select").each(function(){ $(this).find("option:eq(0)").prop("selected", true); });
|
||||
|
||||
$("#byOutput--${pageName}").val("동적 검색");
|
||||
$('#schCrdnYmdFrom--${pageName}').datepicker('setDate', DateUtil.getDateDay(-5475).date);
|
||||
$('#schCrdnYmdTo--${pageName}').datepicker('setDate', TODAY());
|
||||
$P.crdnControl.dataset.setData([]);
|
||||
}
|
||||
|
||||
$P.getParams = () => {
|
||||
var formFields = new FimsFormFields("#frmSearch--${pageName}");
|
||||
var data = formFields.get();
|
||||
data.taskSeCd = "DPV";
|
||||
data.fetchSize = $P.crdnControl.defaultFetchSize;
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
$P.searchCrdnList = () => {
|
||||
$P.crdnControl.query = $P.getParams();
|
||||
$P.crdnControl.load(1);
|
||||
}
|
||||
|
||||
$P.scrollCrdnList = () => {
|
||||
$P.crdnControl.load($P.crdnControl.query.pageNum + 1);
|
||||
}
|
||||
|
||||
$P.refreshCrdnList = () => {
|
||||
|
||||
$P.crdnControl.beforeCurrent = {
|
||||
key : $P.crdnControl.dataset.getCurrent()["CRDN_ID"],
|
||||
index : $P.crdnControl.dataset.getCurrent()["ROW_NUM"] - 1
|
||||
};
|
||||
|
||||
Apply.fromDatasetControl.reload($P.crdnControl).then((resp)=>{
|
||||
Apply.toDataset.set($P.crdnControl.dataset, resp);
|
||||
$P.crdnControl.dataset.onDatasetChange(resp, {reloaded : true});
|
||||
|
||||
if($P.crdnControl.beforeCurrent != null){
|
||||
let beforeCurrentKey = $P.crdnControl.beforeCurrent.key;
|
||||
let beforeCurrentIndex = $P.crdnControl.beforeCurrent.index;
|
||||
$P.crdnControl.beforeCurrent = null;
|
||||
|
||||
if(!$P.crdnControl.dataset.empty){
|
||||
var info = $P.crdnControl.dataset.getData(beforeCurrentKey);
|
||||
|
||||
if(info != null){
|
||||
$P.crdnControl.dataset.setCurrent(beforeCurrentKey,true);
|
||||
} else {
|
||||
|
||||
if(beforeCurrentIndex > ($P.crdnControl.dataset.length - 1)){
|
||||
info = $P.crdnControl.dataset.getDataset()[$P.crdnControl.dataset.length - 1];
|
||||
} else {
|
||||
info = $P.crdnControl.dataset.getDataset()[beforeCurrentIndex];
|
||||
}
|
||||
|
||||
$P.crdnControl.dataset.setCurrent(info["CRDN_ID"],true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
$P.fnExcelDown = () => {
|
||||
|
||||
if($P.crdnControl.dataset.empty){
|
||||
alert("조회된 자료가 없습니다.");
|
||||
return;
|
||||
}
|
||||
|
||||
var cellDefs = getCellDefs($("#crdnTheadTr--${pageName} th").not(".dummy-th").not(":eq(0)"),
|
||||
$($("#crdnRow--${pageName}")[0].content).find("td").not(".dummy-td").not(":eq(0)"));
|
||||
$P.crdnControl.query.cellDefs = cellDefs;
|
||||
|
||||
$P.crdnControl.download();
|
||||
}
|
||||
|
||||
$P.getGridTemplate = () => {
|
||||
|
||||
var notFound = [document.getElementById("crdnNotFound--${pageName}").innerHTML];
|
||||
var found = document.getElementById("crdnRow--${pageName}").innerHTML;
|
||||
var replacer = (str, dataItem) => str
|
||||
.replace(/{onclick}/gi, "pageObject['${pageName}'].clickCrdnList('" + dataItem.getValue("CRDN_ID") + "');")
|
||||
.replace(/{ondblclick}/gi, "pageObject['${pageName}'].dblclickCrdnList('" + dataItem.getValue("CRDN_ID") + "');");
|
||||
|
||||
return {
|
||||
found : found,
|
||||
notFound : notFound,
|
||||
replacer : replacer
|
||||
};
|
||||
}
|
||||
|
||||
$P.renderCrdnList = (total, listLength, trs, option) => {
|
||||
|
||||
let noMore = (listLength >= total);
|
||||
var initScroll = ($P.crdnControl.query.pageNum < 2);
|
||||
if(option != null && option.reloaded){
|
||||
initScroll = false;
|
||||
}
|
||||
|
||||
$("#table-responsive--${pageName}")[0].changeContent(trs, initScroll, noMore);
|
||||
|
||||
//보안모드
|
||||
fn_securityModeToggle($("#securityMode--top").is(":checked"));
|
||||
}
|
||||
|
||||
$P.clickCrdnList = (dataKey) => {
|
||||
if(dataKey == ""){
|
||||
return;
|
||||
}
|
||||
|
||||
$("#crdnTbody--${pageName}").setCurrentRow(dataKey);
|
||||
Apply.toDataset.current($P.crdnControl.dataset, dataKey);
|
||||
|
||||
}
|
||||
|
||||
$P.dblclickCrdnList = (dataKey) => {
|
||||
let params = {
|
||||
callControlName : "pageObject['${pageName}'].crdnControl"
|
||||
, crdnId : dataKey
|
||||
}
|
||||
|
||||
ajax.get({
|
||||
url : $P.crdnControl.urls.getInfo,
|
||||
data : params,
|
||||
success : (resp) => {
|
||||
|
||||
dialog.open({
|
||||
id : "totalInfoMainDialog",
|
||||
title : "개별총정보", size : "xxl", content : resp,
|
||||
init : () => {}
|
||||
});
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
$P.save = () => {
|
||||
|
||||
if(!$P.crdnControl.dataset.getCurrent()) {
|
||||
dialog.alert({
|
||||
content : "선택된 자료가 없습니다.",
|
||||
init : function(){
|
||||
focusClose();
|
||||
}
|
||||
});
|
||||
return;
|
||||
};
|
||||
|
||||
dialog.alert({
|
||||
content : "현 자료를 장애차량 확인된 자료로 변경하시겠습니까?",
|
||||
init : function(){
|
||||
focusOK();
|
||||
},
|
||||
onOK : () => {
|
||||
var info = { 'crdnId' : $P.crdnControl.dataset.getCurrent()["CRDN_ID"] };
|
||||
ajax.post({
|
||||
url : $P.crdnControl.urls.update,
|
||||
data : info,
|
||||
success : (resp) => {
|
||||
$P.saveCallback(resp);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
$P.saveCallback = (resp) => {
|
||||
if (resp.saved) {
|
||||
dialog.alert({
|
||||
content : "저장됐습니다.",
|
||||
onClose : () => {
|
||||
$P.refreshCrdnList();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* element.on
|
||||
**************************************************************************/
|
||||
$('#btnReset--${pageName}').on('click', () => $P.fnReset());
|
||||
$('#btnSearch--${pageName}').on('click', () => $P.searchCrdnList());
|
||||
// 동적검색에서 엔터(Enter) 키를 누르면 검색한다.
|
||||
$("#term--${pageName}").onEnterPress($P.searchCrdnList);
|
||||
$('#btnExcel--${pageName}').on('click', () => $P.fnExcelDown());
|
||||
|
||||
fnMakeResizableTable($("#table-responsive--${pageName}")[0]);
|
||||
fnMakeScrollableTable($("#table-responsive--${pageName}")[0], $P.scrollCrdnList);
|
||||
|
||||
$('#btnUpdateToConfirmData--${pageName}').on('click', () => $P.save());
|
||||
|
||||
/**************************************************************************
|
||||
* 초기화
|
||||
**************************************************************************/
|
||||
//달력 초기화
|
||||
initDatepicker("frmSearch--${pageName}");
|
||||
|
||||
$P.fnReset();
|
||||
|
||||
//보안모드
|
||||
fn_securityModeToggle($("#securityMode--top").is(":checked"));
|
||||
|
||||
});
|
||||
|
||||
</script>
|
||||
@ -1,305 +0,0 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
<c:set var="pageKorName" scope="request">단속 자료 등록</c:set>
|
||||
<div class="content-wrapper">
|
||||
<div class="container-xxl flex-grow-1 px-0">
|
||||
<div class="card wrapper-list">
|
||||
|
||||
<div class="container-page-btn">
|
||||
<button type="button" id="btnReset--${pageName}"
|
||||
class="btn btn-outline-dark w-px-120" title="초기화">초기화</button>
|
||||
<span class="container-window-btn-right">
|
||||
<button type="button" id="btnSearch--${pageName}"
|
||||
class="btn btn-search w-px-120" title="검색">검색</button>
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<form id="frmSearch--${pageName}" name="frmSearch">
|
||||
<div class="container-search">
|
||||
<div class="row g-1">
|
||||
<div class="col-6">
|
||||
<span class="form-label fw-bold form-search-title w-px-120 text-end">업무구분</span>
|
||||
<span class="form-search-linebox">
|
||||
<c:forEach items="${TaskListForSgg}" var="item">
|
||||
<label>
|
||||
<input name="taskSeCd" type="radio" value="${item.code}"
|
||||
class="form-check-input" alt="업무구분"
|
||||
onchange="pageObject['${pageName}'].fnResetAndChangeBiz(this.value);">
|
||||
${item.value}
|
||||
</label>
|
||||
</c:forEach>
|
||||
</span>
|
||||
</div>
|
||||
<div class="col-6">
|
||||
<label class="form-label fw-bold form-search-title w-px-120 text-end" for="regDt--${pageName}">등록일자</label>
|
||||
<input type="text" id="regDt--${pageName}" name="regDt"
|
||||
class="form-control form-date" data-fmt-type="day"
|
||||
title="금일" disabled="disabled" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<div>
|
||||
<span class="container-page-btn">
|
||||
<div class="d-flex flex-row justify-content-between">
|
||||
<span id="crdnPaging--${pageName}PagingInfo" class="dataTables_info"
|
||||
role="status" aria-live="polite"></span>
|
||||
<ul id="crdnPaging--${pageName}" class="pagination pagination-primary">
|
||||
</ul>
|
||||
</div>
|
||||
<span class="container-window-btn-right">
|
||||
<button type="button" id="btnInsertByFile--${pageName}" class="btn btn-primary"
|
||||
title="단속 파일 등록">단속 파일 등록</button>
|
||||
<button type="button" id="btnInsertByHand--${pageName}" class="btn btn-primary"
|
||||
title="단속 수기 등록">단속 수기 등록</button>
|
||||
</span>
|
||||
</span>
|
||||
</div>
|
||||
<div class="card-datatable text-nowrap">
|
||||
<div id="DataTables_Table_0_wrapper--${pageName}" class="dataTables_wrapper dt-bootstrap5 no-footer">
|
||||
<div id="table-responsive--${pageName}"
|
||||
class="table-responsive ox-scroll oy-scroll h-px-600">
|
||||
<table id="DataTables_Table_0--${pageName}"
|
||||
class="table-layout-fixed datatables-ajax table table-bordered dataTable no-footer">
|
||||
<thead class="sticky-thead">
|
||||
<tr id="crdnTheadTr--${pageName}">
|
||||
<th style="width: 80px;">No.</th>
|
||||
<th style="width: 200px;">등록구분</th>
|
||||
<th style="width: 200px;">자료출처</th>
|
||||
<th style="width: 200px;">위반일시</th>
|
||||
<th style="width: 200px;">차량번호</th>
|
||||
<th style="width: 400px;">단속장소</th>
|
||||
<th style="width: 200px;">위반내용</th>
|
||||
<th class="dummy-th"></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="crdnTbody--${pageName}"></tbody>
|
||||
<template id="crdnRow--${pageName}">
|
||||
<tr data-key="{CRDN_ID}">
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-end">{ROW_NUM}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-center">{CRDN_REG_SE_CD}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-center">{CRDN_INPT_SE_CD}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-center">{CRDN_YMD_TM}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-center">{VHRNO}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-start">{CRDN_PLC}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-start">{VLTN_ARTCL}</td>
|
||||
<td class="dummy-td"></td>
|
||||
</tr>
|
||||
</template>
|
||||
<template id="crdnNotFound--${pageName}">
|
||||
<tr>
|
||||
<td valign="top" colspan="8" class="dataTables_empty text-center">
|
||||
단속 정보를 찾지 못했습니다.
|
||||
</td>
|
||||
</tr>
|
||||
</template>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="content-backdrop fade"></div>
|
||||
</div>
|
||||
<script>
|
||||
/**************************************************************************
|
||||
* Global Variable
|
||||
**************************************************************************/
|
||||
var FIM003 = new CommonCodes(${FIM003});
|
||||
var FIM026 = new CommonCodes(${FIM026});
|
||||
|
||||
pageObject["${pageName}"] = {};
|
||||
|
||||
|
||||
$(document).ready(function(){
|
||||
|
||||
var $P = pageObject["${pageName}"];
|
||||
|
||||
/**************************************************************************
|
||||
* DatasetControl
|
||||
**************************************************************************/
|
||||
$P.crdnControl = new DatasetControl({
|
||||
dataGetter : obj => obj["List"], appendData:true,
|
||||
keymapper : info => info ? info.CRDN_ID : "",
|
||||
urls : {
|
||||
load : ""
|
||||
},
|
||||
formats: {
|
||||
CRDN_INPT_SE_CD : FIM003,
|
||||
CRDN_REG_SE_CD : FIM026,
|
||||
CRDN_YMD_TM : datetimeFormat
|
||||
}
|
||||
});
|
||||
$P.crdnControl.defaultFetchSize = FETCH_XS;
|
||||
$P.crdnControl.query = { pageNum : 1, fetchSize : $P.crdnControl.defaultFetchSize };
|
||||
$P.crdnControl.beforeCurrent = null;
|
||||
|
||||
$P.crdnControl.urls.newInfoByFile = "";
|
||||
$P.crdnControl.urls.newInfoByHand = "";
|
||||
|
||||
/**************************************************************************
|
||||
* Dataset.on
|
||||
**************************************************************************/
|
||||
$P.crdnControl.dataset.onDatasetChange = (obj, option) => {
|
||||
var t = $P.getGridTemplate();
|
||||
var trs = Apply.fromDataset.getTbody($P.crdnControl.dataset, t.found, t.notFound, t.replacer);
|
||||
$P.renderCrdnList(obj["Total"], $P.crdnControl.dataset.length, trs, option);
|
||||
|
||||
Apply.fromDataset.paging($P.crdnControl.dataset, obj, "crdnPaging--${pageName}");
|
||||
|
||||
};
|
||||
|
||||
$P.crdnControl.dataset.onCurrentChange = (dataItem) => {
|
||||
Apply.fromDataset.currentRow($P.crdnControl.dataset, dataItem, $("#crdnTbody--${pageName}")[0]);
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* pageObject.function
|
||||
**************************************************************************/
|
||||
$P.fnReset = () => {
|
||||
$("#regDt--${pageName}").datepicker('setDate', TODAY());
|
||||
$P.crdnControl.dataset.setData([]);
|
||||
}
|
||||
|
||||
$P.fnResetAndChangeBiz = (taskSeCd) => {
|
||||
$P.fnReset();
|
||||
$P.crdnControl.urls.load = wctx.url("/"+taskSeCd+"/crdn/crdn05/010/list.do");
|
||||
$P.crdnControl.urls.newInfoByFile = wctx.url("/"+taskSeCd+"/crdn/crdn05/020/info.do");
|
||||
$P.crdnControl.urls.newInfoByHand = wctx.url("/"+taskSeCd+"/crdn/crdn05/030/info.do");
|
||||
|
||||
switch(taskSeCd){
|
||||
case "PVS" :
|
||||
case "BPV" :
|
||||
case "DPV" :
|
||||
case "ECA" :
|
||||
case "DVS" :
|
||||
$("#btnInsertByFile--${pageName}").show();
|
||||
break;
|
||||
case "PES" :
|
||||
default :
|
||||
$("#btnInsertByFile--${pageName}").hide();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
$P.getParams = () => {
|
||||
var formFields = new FimsFormFields("#frmSearch--${pageName}");
|
||||
var data = formFields.get();
|
||||
data.fetchSize = $P.crdnControl.defaultFetchSize;
|
||||
return data;
|
||||
}
|
||||
|
||||
$P.searchCrdnList = () => {
|
||||
$P.crdnControl.query = $P.getParams();
|
||||
$P.crdnControl.load(1);
|
||||
}
|
||||
|
||||
$P.scrollCrdnList = () => {
|
||||
$P.crdnControl.load($P.crdnControl.query.pageNum + 1);
|
||||
}
|
||||
|
||||
$P.refreshCrdnList = () => {
|
||||
$P.crdnControl.reload({all : true});
|
||||
}
|
||||
|
||||
|
||||
$P.getGridTemplate = () => {
|
||||
var notFound = [document.getElementById("crdnNotFound--${pageName}").innerHTML];
|
||||
var found = document.getElementById("crdnRow--${pageName}").innerHTML;
|
||||
var replacer = (str, dataItem) => str
|
||||
.replace(/{onclick}/gi, "pageObject['${pageName}'].clickCrdnList('" + dataItem.getValue("CRDN_ID") + "');")
|
||||
.replace(/{ondblclick}/gi, "");
|
||||
|
||||
return {
|
||||
found : found,
|
||||
notFound : notFound,
|
||||
replacer : replacer
|
||||
};
|
||||
}
|
||||
|
||||
$P.renderCrdnList = (total, listLength, trs, option) => {
|
||||
|
||||
let noMore = (listLength >= total);
|
||||
var initScroll = ($P.crdnControl.query.pageNum < 2);
|
||||
if(option != null && option.reloaded){
|
||||
initScroll = false;
|
||||
}
|
||||
|
||||
$("#table-responsive--${pageName}")[0].changeContent(trs, initScroll, noMore);
|
||||
|
||||
//보안모드
|
||||
fn_securityModeToggle($("#securityMode--top").is(":checked"));
|
||||
|
||||
}
|
||||
|
||||
$P.clickCrdnList = (dataKey) => {
|
||||
if(dataKey == ""){
|
||||
return;
|
||||
}
|
||||
$("#crdnTbody--${pageName}").setCurrentRow(dataKey);
|
||||
|
||||
$P.crdnControl.dataset.setCurrent(dataKey);
|
||||
Apply.toDataset.current($P.crdnControl.dataset, dataKey);
|
||||
}
|
||||
|
||||
$P.newInfo = (type) => {
|
||||
var url = "";
|
||||
if(type == "file") url = $P.crdnControl.urls.newInfoByFile;
|
||||
if(type == "hand") url = $P.crdnControl.urls.newInfoByHand;
|
||||
|
||||
var dialogId = "";
|
||||
if(type == "file") dialogId = "fileDialog";
|
||||
if(type == "hand") dialogId = "manualDialog";
|
||||
|
||||
var title = "";
|
||||
if(type == "file") title = "단속파일 등록";
|
||||
if(type == "hand") title = "단속자료 수기 등록";
|
||||
|
||||
|
||||
ajax.get({
|
||||
url : url,
|
||||
data : {},
|
||||
success : (resp) => {
|
||||
dialog.open({
|
||||
id: dialogId,
|
||||
title: title,
|
||||
content:resp,
|
||||
size: "xxl",
|
||||
init:() => {}
|
||||
});
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
/**************************************************************************
|
||||
* element.on
|
||||
**************************************************************************/
|
||||
$('#btnReset--${pageName}').on('click', () => $P.fnReset());
|
||||
$("#btnSearch--${pageName}").on("click", () => $P.searchCrdnList());
|
||||
$("#btnInsertByFile--${pageName}").on('click', () => { $P.newInfo("file"); });
|
||||
$("#btnInsertByHand--${pageName}").on('click', () => { $P.newInfo("hand"); });
|
||||
|
||||
fnMakeResizableTable($("#table-responsive--${pageName}")[0]);
|
||||
fnMakeScrollableTable($("#table-responsive--${pageName}")[0], $P.scrollCrdnList);
|
||||
|
||||
/**************************************************************************
|
||||
* 초기화
|
||||
**************************************************************************/
|
||||
initDatepicker("frmSearch--${pageName}"); //달력 초기화
|
||||
|
||||
var defaultBizValue = $("#layout-navbar input[name='taskSeCd']:checked").val();
|
||||
$("#frmSearch--${pageName} input[name='taskSeCd'][value='" + defaultBizValue + "']").prop("checked",true);
|
||||
$P.fnResetAndChangeBiz(defaultBizValue);
|
||||
//보안모드
|
||||
fn_securityModeToggle($("#securityMode--top").is(":checked"));
|
||||
|
||||
$("#frmSearch--${pageName} input[name='taskSeCd']").each(function(i) {
|
||||
$(this).prop("disabled", "true");
|
||||
});
|
||||
});
|
||||
|
||||
</script>
|
||||
@ -1,509 +0,0 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
<c:set var="pageKorName" scope="request">단속 파일 등록</c:set>
|
||||
<div class="d-flex flex-column">
|
||||
<div class="d-flex flex-row justify-content-evenly">
|
||||
<div class="card h-px-80 w-px-1400">
|
||||
<form id="frmFirst--${pageName}" method="post" enctype="multipart/form-data">
|
||||
<div class="row g-1">
|
||||
<div class="col-md-12">
|
||||
<div class="form-check form-switch">
|
||||
<input class="form-check-input" type="checkbox" role="switch" id="direct--${pageName}">
|
||||
<label class="form-check-label" for="direct--${pageName}">로컬파일업로드</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row g-1">
|
||||
<div class="col-md-12 d-flex align-items-center flex-nowrap">
|
||||
<label for="taskSeCd--${pageName}"
|
||||
class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">과태료업무</label>
|
||||
<select id="taskSeCd--${pageName}" name="taskSeCd" class="form-select" disabled>
|
||||
<c:forEach items="${TaskListForSgg}" var="item">
|
||||
<option value="${item.code}"
|
||||
<c:if test="${item.code eq taskSeCd}"> selected="selected" </c:if>
|
||||
>${item.value}</option>
|
||||
</c:forEach>
|
||||
</select>
|
||||
<span id="uploadFilesArea" hidden>
|
||||
<label for="uploadFiles--${pageName}"
|
||||
class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">파일</label>
|
||||
<input type="file" id="uploadFiles--${pageName}" name="uploadFiles"
|
||||
multiple="multiple" class="form-control"/>
|
||||
</span>
|
||||
<span class="d-flex justify-content-end float-start ms-4">
|
||||
<button type="button" id="btnSearch--${pageName}"
|
||||
class="btn btn-primary">조회</button>
|
||||
<button type="button" id="btnFileUpload--${pageName}"
|
||||
class="btn btn-primary" hidden>업로드</button>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<div class="d-flex flex-row justify-content-evenly">
|
||||
<div class="card my-4 px-4 h-px-600 w-px-700">
|
||||
<form id="frmGrid--${pageName}">
|
||||
<div>
|
||||
<span class="container-page-btn">
|
||||
<div class="d-flex flex-row justify-content-between">
|
||||
<span id="parsedInfoPaging--${pageName}PagingInfo" class="dataTables_info"
|
||||
role="status" aria-live="polite"></span>
|
||||
<ul id="parsedInfoPaging--${pageName}" class="pagination pagination-primary">
|
||||
</ul>
|
||||
</div>
|
||||
<span class="container-window-btn-right">
|
||||
</span>
|
||||
</span>
|
||||
</div>
|
||||
<div class="card-datatable text-nowrap">
|
||||
<div id="DataTables_Table_0_wrapper--${pageName}"
|
||||
class="dataTables_wrapper dt-bootstrap5 no-footer">
|
||||
<div id="table-responsive--${pageName}" class="table-responsive ox-scroll oy-scroll h-px-550">
|
||||
<span>
|
||||
<table
|
||||
class="datatables-ajax table table-bordered dataTable no-footer">
|
||||
<thead class="sticky-thead">
|
||||
<tr>
|
||||
<th style="min-width: 80px;">단속자료</th>
|
||||
<th style="min-width: 80px;" title="더블클릭시 축소/확대 됩니다."
|
||||
class="downsize" ondblclick="fnDownsizeToggle(this);" href="#">
|
||||
파일명 <i class='bx bx-expand'></i>
|
||||
</th>
|
||||
<th style="min-width: 80px;">타임스탬프</th>
|
||||
<th style="min-width: 80px;">파일사이즈</th>
|
||||
<th style="min-width: 80px;">파일확장자</th>
|
||||
<th style="min-width: 80px;">파일상태</th>
|
||||
<th style="min-width: 80px;">총사진갯수</th>
|
||||
<th style="min-width: 80px;">파일순번</th>
|
||||
<th style="min-width: 80px;">장비코드</th>
|
||||
<th style="min-width: 80px;">차량번호</th>
|
||||
<th style="min-width: 80px;">사진구분명</th>
|
||||
<th style="min-width: 80px;">업체코드</th>
|
||||
<th style="min-width: 80px;">위반내용</th>
|
||||
<th style="min-width: 80px;">차량속도</th>
|
||||
<th style="min-width: 80px;">번호판위치x</th>
|
||||
<th style="min-width: 80px;">번호판위치y</th>
|
||||
<th style="min-width: 80px;">번호판width</th>
|
||||
<th style="min-width: 80px;">번호판height</th>
|
||||
<th style="min-width: 80px;">위치좌표x</th>
|
||||
<th style="min-width: 80px;">위치좌표y</th>
|
||||
<th style="min-width: 80px;">날짜</th>
|
||||
<th style="min-width: 80px;">시간</th>
|
||||
<th style="min-width: 80px;">단속시작시간</th>
|
||||
<th style="min-width: 80px;">단속종료시간</th>
|
||||
<th style="min-width: 80px;">어린이보호구역</th>
|
||||
<th style="min-width: 80px;">단속장소명</th>
|
||||
<th style="min-width: 80px;">단속법정동</th>
|
||||
<th style="min-width: 80px;">단속장소(주소)</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody></tbody>
|
||||
<template class="found">
|
||||
<tr data-key="{FILE_NAME}">
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-center">{TEMP_GROUP_ID}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}"
|
||||
title="{FILE_NAME}"
|
||||
class="text-start text-truncate max-w-th">{FILE_NAME}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-center">{FILE_LAST_MODIFIED}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-center">{FILE_SIZE}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-start">{FILE_EXTENSION}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-start">{FILE_STATUS_NM}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-end">{PHOTO_CNT}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-center">{FILE_SEQ}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-center">{EQPMNT_CD}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-start">{VHRNO}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-start">{PHOTO_TYPE_NM}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-center">{BZENTY_CD}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-start">{VLTN_NM}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-center">{CAR_VELOCITY}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-end">{MOSC_X}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-end">{MOSC_Y}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-end">{PLATE_WIDTH}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-end">{PLATE_HEIGHT}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-end">{GPS_X}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-end">{GPS_Y}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-center">{CRDN_YMD}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-center">{CRDN_TM}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-center">{CRDN_BGNG_TM}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-center">{CRDN_END_TM}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-start">{CRDN_SPAREA_NM}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-start">{CRDN_PLC}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-start">{CRDN_STDG_NM}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-start">{CRDN_ROAD_NM}</td>
|
||||
</tr>
|
||||
</template>
|
||||
<template class="notFound">
|
||||
<tr>
|
||||
<td valign="top" colspan="28" class="dataTables_empty text-center">
|
||||
정보를 찾지 못했습니다.
|
||||
</td>
|
||||
</tr>
|
||||
</template>
|
||||
</table>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<div id="imageArea--${pageName}" class="card my-4 px-4 w-px-600 h-px-600 justify-content-center">
|
||||
</div>
|
||||
|
||||
<div class="card my-4 px-2 w-px-120 h-px-600">
|
||||
<div class="d-flex my-2 flex-column">
|
||||
<button type="button" id="btnInsertCrdn--${pageName}" class="btn btn-primary my-2">단속등록</button>
|
||||
<button type="button" id="btnDelete--${pageName}" class="btn btn-primary my-2">삭제</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<form id="frmMultipart--${pageName}" method="post" enctype="multipart/form-data"></form>
|
||||
|
||||
<script>
|
||||
pageObject["${pageName}"] = {};
|
||||
|
||||
$(document).ready(function(){
|
||||
|
||||
var $P = pageObject["${pageName}"];
|
||||
|
||||
$P.tempGroup = {};
|
||||
|
||||
/**************************************************************************
|
||||
* DatasetControl
|
||||
**************************************************************************/
|
||||
$P.parsedInfoControl = new DatasetControl({
|
||||
dataGetter : obj => obj["List"],
|
||||
keymapper : info => info ? info.FILE_NAME : "",
|
||||
urls : { },
|
||||
formats: {
|
||||
CRDN_YMD : dateFormat,
|
||||
CRDN_TM : timeFormat,
|
||||
CRDN_BGNG_TM : timeFormat,
|
||||
CRDN_END_TM : timeFormat
|
||||
}
|
||||
});
|
||||
|
||||
/**************************************************************************
|
||||
* Dataset.on
|
||||
**************************************************************************/
|
||||
$P.parsedInfoControl.dataset.onDatasetChange = (obj, option) => {
|
||||
|
||||
var t = $P.getGridTemplate();
|
||||
var trs = Apply.fromDataset.getTbody($P.parsedInfoControl.dataset, t.found, t.notFound, t.replacer);
|
||||
$P.renderParsedInfoList(obj["Total"], $P.parsedInfoControl.dataset.length, trs);
|
||||
|
||||
Apply.fromDataset.paging($P.parsedInfoControl.dataset, obj, "parsedInfoPaging--${pageName}");
|
||||
};
|
||||
|
||||
$P.parsedInfoControl.dataset.onCurrentChange = (dataItem) => {
|
||||
$("#imageArea--${pageName}").html("");
|
||||
|
||||
if(dataItem && dataItem.data){
|
||||
var dataKey = dataItem.data.FILE_NAME;
|
||||
|
||||
$("#table-responsive--${pageName}").find("tbody").setCurrentRow(dataKey);
|
||||
|
||||
if(dataItem.data.FILE_GROUP_TYPE == "BIN"){
|
||||
var srcArr = [];
|
||||
|
||||
for(var i=1; i <= dataItem.data.PHOTO_CNT; i++){
|
||||
srcArr.push("data:image/jpg;base64," + dataItem.data["B64IMAGE"+i])
|
||||
}
|
||||
|
||||
$P.renderImage(srcArr);
|
||||
} else {
|
||||
if(!dataKey.endsWith(".txt") && !dataKey.endsWith(".TXT")){
|
||||
var src = dataItem.data.FILE_PATH;
|
||||
$P.renderImage(src);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
};
|
||||
|
||||
/**************************************************************************
|
||||
* pageObject.function
|
||||
**************************************************************************/
|
||||
|
||||
//ftp체크
|
||||
$P.checkFTP = () => {
|
||||
|
||||
ajax.post({
|
||||
url : wctx.url("/${taskSeCd}/crdn/crdn05/020/importFileFromServer.do"),
|
||||
data : {
|
||||
taskSeCd : $("#taskSeCd--${pageName}").val()
|
||||
},
|
||||
success : (resp) => {
|
||||
if(resp.saved){
|
||||
$P.searchFileList();
|
||||
} else {
|
||||
dialog.alert({
|
||||
content : "파일 조회에 실패하였습니다.",
|
||||
init : function(){
|
||||
setDialogZindex();
|
||||
focusClose();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
//로컬파일업로드
|
||||
$P.uploadLocalFile = () => {
|
||||
|
||||
if($("#uploadFiles--${pageName}").val() == ""){
|
||||
dialog.alert({
|
||||
content : "파일이 없습니다.",
|
||||
init : function(){
|
||||
setDialogZindex();
|
||||
focusClose();
|
||||
}
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
var formData = new FormData(document.getElementById("frmFirst--${pageName}"));
|
||||
formData.append("taskSeCd", "${taskSeCd}");
|
||||
|
||||
ajax.post({
|
||||
url : wctx.url("/${taskSeCd}/crdn/crdn05/020/importFileFromClient.do"),
|
||||
contentType : false, processData : false,
|
||||
data : formData,
|
||||
success : (resp) => {
|
||||
if(resp.saved){
|
||||
$("#uploadFiles--${pageName}").val("");
|
||||
$P.searchFileList();
|
||||
} else {
|
||||
dialog.alert({
|
||||
content : "파일 업로드에 실패하였습니다.",
|
||||
init : function(){
|
||||
setDialogZindex();
|
||||
focusClose();
|
||||
}
|
||||
});
|
||||
return;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
//서버에 등록된 파일 조회
|
||||
$P.searchFileList = () => {
|
||||
|
||||
$P.parsedInfoControl.dataset.setData([]);
|
||||
|
||||
ajax.post({
|
||||
url : wctx.url("/${taskSeCd}/crdn/crdn05/020/list.do"),
|
||||
data : {
|
||||
taskSeCd : $("#taskSeCd--${pageName}").val()
|
||||
},
|
||||
success : (resp) => {
|
||||
$P.parsedInfoControl.dataset.setData(resp);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
$P.getGridTemplate = () => {
|
||||
var notFound = [$("#table-responsive--${pageName}").find("template.notFound")[0].innerHTML];
|
||||
var found = $("#table-responsive--${pageName}").find("template.found")[0].innerHTML;
|
||||
var replacer = (str, dataItem) => str
|
||||
.replace(/{onclick}/gi, "pageObject['${pageName}'].clickParsedInfoList('" + dataItem.getValue("FILE_NAME") + "');");
|
||||
|
||||
return {
|
||||
found : found,
|
||||
notFound : notFound,
|
||||
replacer : replacer
|
||||
};
|
||||
}
|
||||
//테이블 렌더링
|
||||
$P.renderParsedInfoList = (total, listLength, trs) => {
|
||||
|
||||
$("#table-responsive--${pageName}").find("tbody").html(trs);
|
||||
|
||||
if(listLength != 0){
|
||||
fnDownsizeCheck($("#table-responsive--${pageName}").find("table")[0]);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//사진 표시
|
||||
$P.renderImage = (src) => {
|
||||
|
||||
if(Array.isArray(src)){
|
||||
var div = document.createElement("div");
|
||||
div.style["margin-top"] = "20px";
|
||||
div.style["margin-bottom"] = "20px";
|
||||
div.style["overflow-y"] = "scroll";
|
||||
for(var i=0; i < src.length; i++){
|
||||
var span = document.createElement("span");
|
||||
span.style["max-width"] = "260px";
|
||||
span.style["max-height"] = "260px";
|
||||
var img = document.createElement("img");
|
||||
img.style["object-fit"] = "contain";
|
||||
img.style["max-width"] = "inherit";
|
||||
img.style["max-height"] = "inherit";
|
||||
img.src = src[i];
|
||||
span.appendChild(img);
|
||||
div.appendChild(span);
|
||||
}
|
||||
$("#imageArea--${pageName}").append(div);
|
||||
} else {
|
||||
|
||||
var img = document.createElement("img");
|
||||
img.style["object-fit"] = "contain";
|
||||
img.src = src;
|
||||
$("#imageArea--${pageName}").append(img);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
$P.clickParsedInfoList = (dataKey) => {
|
||||
if(dataKey == ""){
|
||||
return;
|
||||
}
|
||||
|
||||
$P.parsedInfoControl.dataset.setCurrent(dataKey);
|
||||
};
|
||||
|
||||
$P.createCrdn = () => {
|
||||
|
||||
if($.isEmptyObject($P.tempGroup)){
|
||||
dialog.alert({
|
||||
content : "모든 자료가 처리 완료되었습니다.",
|
||||
init : function(){
|
||||
setDialogZindex();
|
||||
focusClose();
|
||||
}
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
var firstGroupKey = Object.keys($P.tempGroup)[0];
|
||||
var formData = new FormData(document.getElementById("frmMultipart--${pageName}"));
|
||||
formData.append("taskSeCd", "${taskSeCd}");
|
||||
formData.append("fileGroupType", $P.tempGroup[firstGroupKey][0].FILE_GROUP_TYPE);
|
||||
formData.append("fileLayoutId", $P.tempGroup[firstGroupKey][0].FILE_LAYOUT_ID);
|
||||
if($P.tempGroup[firstGroupKey].length == 1){
|
||||
formData.append("linkFileInfos", JSON.stringify({}));
|
||||
}
|
||||
for(var i=0; i<$P.tempGroup[firstGroupKey].length; i++){
|
||||
formData.append("linkFileInfos", JSON.stringify($P.tempGroup[firstGroupKey][i]));
|
||||
}
|
||||
|
||||
ajax.post({
|
||||
url : wctx.url("/${taskSeCd}/crdn/crdn05/020/create.do"),
|
||||
contentType : false, processData : false,
|
||||
data : formData,
|
||||
success : (resp) => {
|
||||
|
||||
var removedFileName = $P.tempGroup[firstGroupKey].map(item => item.FILE_NAME);
|
||||
|
||||
delete $P.tempGroup[firstGroupKey];
|
||||
|
||||
if(resp.saved){
|
||||
|
||||
$P.removeCallback(removedFileName);
|
||||
|
||||
if(resp.alertMessage){
|
||||
alert(resp.alertMessage);
|
||||
}
|
||||
} else {
|
||||
alert(resp.failReason);
|
||||
}
|
||||
|
||||
//다음자료 진행
|
||||
$P.createCrdn();
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
$P.deleteFile = () => {
|
||||
var current = $P.parsedInfoControl.dataset.getCurrent();
|
||||
if(current == null) return;
|
||||
|
||||
var fileName = current.FILE_NAME;
|
||||
var fileLayoutId = current.FILE_LAYOUT_ID;
|
||||
|
||||
ajax.get({
|
||||
url : wctx.url("/${taskSeCd}/crdn/crdn05/020/remove.do"),
|
||||
data : {
|
||||
taskSeCd : $("#taskSeCd--${pageName}").val(),
|
||||
fileLayoutId : fileLayoutId,
|
||||
fileName : fileName
|
||||
},
|
||||
success : (resp) => {
|
||||
if(resp.saved){
|
||||
$P.removeCallback(fileName);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
$P.removeCallback = (removedFileName) => {
|
||||
$P.parsedInfoControl.dataset.remove(removedFileName);
|
||||
$P.removeTableRow(removedFileName);
|
||||
}
|
||||
|
||||
$P.removeTableRow = (removedFileName) => {
|
||||
|
||||
var fileListTable = $("#table-responsive--${pageName}").find("table")[0];
|
||||
|
||||
var targetArr = [];
|
||||
if(Array.isArray(removedFileName)){
|
||||
targetArr = removedFileName;
|
||||
} else {
|
||||
targetArr = [removedFileName];
|
||||
}
|
||||
|
||||
for(var i = 0; i < targetArr.length; i++){
|
||||
var target = targetArr[i];
|
||||
var tr = $(fileListTable).find("tbody").find("tr[data-key='"+target+"']");
|
||||
var trIndex = $(fileListTable).find("tbody tr").index(tr);
|
||||
fileListTable.deleteRow(trIndex+1);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* element.on
|
||||
**************************************************************************/
|
||||
$("#btnSearch--${pageName}").on("click", function(){ $P.checkFTP(); });
|
||||
|
||||
$("#btnFileUpload--${pageName}").on("click", function(){ $P.uploadLocalFile(); });
|
||||
|
||||
$("#btnInsertCrdn--${pageName}").on("click", function(){
|
||||
$P.tempGroup = Object.groupBy($P.parsedInfoControl.dataset.getDataset(), ({ TEMP_GROUP_ID }) => "temp"+TEMP_GROUP_ID);
|
||||
|
||||
if($.isEmptyObject($P.tempGroup)){
|
||||
alert("처리할 자료가 없습니다.");
|
||||
return;
|
||||
}
|
||||
|
||||
$P.createCrdn();
|
||||
});
|
||||
|
||||
$("#btnDelete--${pageName}").on("click", function(){ $P.deleteFile(); });
|
||||
|
||||
$("#direct--${pageName}").on("click", function(){
|
||||
if($(this).is(":checked")){
|
||||
$("#uploadFilesArea").removeAttr("hidden");
|
||||
$("#btnFileUpload--${pageName}").removeAttr("hidden");
|
||||
$("#btnSearch--${pageName}").attr("hidden","hidden");
|
||||
} else {
|
||||
$("#uploadFilesArea").attr("hidden","hidden");
|
||||
$("#btnFileUpload--${pageName}").attr("hidden","hidden");
|
||||
$("#btnSearch--${pageName}").removeAttr("hidden");
|
||||
$("#uploadFiles--${pageName}").val("");
|
||||
}
|
||||
});
|
||||
|
||||
$P.parsedInfoControl.dataset.setData([]);
|
||||
});
|
||||
|
||||
</script>
|
||||
@ -1,741 +0,0 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
<c:set var="pageKorName" scope="request">단속자료 수기 등록</c:set>
|
||||
<div class="d-flex flex-row justify-content-evenly">
|
||||
<div class="card mw-px-1000">
|
||||
<form id="frmEdit--${pageName}">
|
||||
<input type="hidden" id="crdnId-${pageName}" name="crdnId" data-map="CRDN_ID" />
|
||||
<input type="hidden" id="rtpyrId--${pageName}" name="rtpyrId" data-map="RTPYR_ID"/>
|
||||
<input type="hidden" id="addrSn--${pageName}" name="addrSn" data-map="ADDR_SN"/>
|
||||
<input type="hidden" id="sggCd--${pageName}" name="sggCd" value="${sggCd}" />
|
||||
<input type="hidden" id="taskSeCd--${pageName}" name="taskSeCd" value="${taskSeCd}" />
|
||||
<div class="row g-1">
|
||||
<div class="col-md-12" slot="edit">
|
||||
<template class="pvs bpv">
|
||||
<slot>
|
||||
<label for="crdnSeCd--${pageName}"
|
||||
class="w-px-130 bg-lighter pe-2 col-form-label text-sm-end">
|
||||
단속구분
|
||||
</label>
|
||||
<select id="crdnSeCd--${pageName}" name="crdnSeCd"
|
||||
data-map="CRDN_SE_CD" class="form-select">
|
||||
<c:forEach items="${FIM002List}" var="item">
|
||||
<option value="${item.code}">${item.value}</option>
|
||||
</c:forEach>
|
||||
</select>
|
||||
</slot>
|
||||
</template>
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
<label for="crdnYmd--${pageName}"
|
||||
class="w-px-130 bg-lighter pe-2 col-form-label text-sm-end required">
|
||||
위반일자
|
||||
</label>
|
||||
<input type="text" id="crdnYmd--${pageName}" name="crdnYmd" data-map="CRDN_YMD"
|
||||
class="form-control form-date" data-fmt-type="day" maxlength="10" required />
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
<label for="crdnTm--${pageName}"
|
||||
class="w-px-130 bg-lighter pe-2 col-form-label text-sm-end required">
|
||||
위반시간
|
||||
</label>
|
||||
<input type="text" id="crdnTm--${pageName}" name="crdnTm" data-map="CRDN_TM"
|
||||
class="form-control form-time" data-fmt-type="time" maxlength="8" required
|
||||
placeholder="시:분:초" />
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
<label for="vhrno--${pageName}"
|
||||
class="w-px-130 bg-lighter pe-2 col-form-label text-sm-end required">
|
||||
차량번호
|
||||
</label>
|
||||
<input type="text" id="vhrno--${pageName}" name="vhrno" data-map="VHRNO" class="form-control"
|
||||
data-maxlengthb="30" required />
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
<label for="vltnCd--${pageName}"
|
||||
class="w-px-130 bg-lighter pe-2 col-form-label text-sm-end">
|
||||
위반내용
|
||||
</label>
|
||||
<select id="vltnCd--${pageName}" name="vltnCd" class="form-select" data-map="VLTN_CD">
|
||||
<c:forEach items="${VLTNList}" var="item">
|
||||
<option value="${item.code}">${item.value}</option>
|
||||
</c:forEach>
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-md-4 select2-primary">
|
||||
<label for="crdnStdgNm--${pageName}"
|
||||
class="w-px-130 bg-lighter pe-2 col-form-label text-sm-end">
|
||||
법정동
|
||||
</label>
|
||||
<input type="text" id="crdnStdgNm--${pageName}" name="crdnStdgNm" data-map="CRDN_STDG_NM"
|
||||
class="form-control w-px-150" list="stdgNmList--${pageName}" />
|
||||
<datalist id="stdgNmList--${pageName}">
|
||||
<c:forEach items="${stdgNmList}" var="item">
|
||||
<option value="${item}"></option>
|
||||
</c:forEach>
|
||||
</datalist>
|
||||
</div>
|
||||
<div class="col-md-4 select2-primary">
|
||||
<label for="crdnRoadNm--${pageName}"
|
||||
class="w-px-130 bg-lighter pe-2 col-form-label text-sm-end">
|
||||
도로명
|
||||
</label>
|
||||
<input type="text" id="crdnRoadNm--${pageName}" name="crdnRoadNm" data-map="CRDN_ROAD_NM"
|
||||
class="form-control" />
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<label for="crdnPlc--${pageName}"
|
||||
class="w-px-130 bg-lighter pe-2 col-form-label text-sm-end">
|
||||
단속장소
|
||||
</label>
|
||||
<input type="text" id="crdnPlc--${pageName}" name="crdnPlc" data-map="CRDN_PLC"
|
||||
class="form-control w-px-300" data-maxlengthb="200" />
|
||||
</div>
|
||||
<div class="col-md-6" slot="edit">
|
||||
<template class="bpv">
|
||||
<slot>
|
||||
<label for="dtlCrdnPlc--${pageName}"
|
||||
class="w-px-130 bg-lighter pe-2 col-form-label text-sm-end">
|
||||
상세단속장소
|
||||
</label>
|
||||
<input type="text" id="dtlCrdnPlc--${pageName}" name="dtlCrdnPlc"
|
||||
data-map="DTL_CRDN_PLC" class="form-control"
|
||||
data-maxlenghb="200" />
|
||||
</slot>
|
||||
</template>
|
||||
<template class="pvs">
|
||||
<slot>
|
||||
<label for="crdnSpareaCd--${pageName}"
|
||||
class="w-px-130 bg-lighter pe-2 col-form-label text-sm-end">
|
||||
특별구역
|
||||
</label>
|
||||
<select id="crdnSpareaCd--${pageName}" name="crdnSpareaCd"
|
||||
data-map="CRDN_SPAREA_CD" class="form-select">
|
||||
<c:forEach items="${FIM007List}" var="item">
|
||||
<option value="${item.code}">${item.value}</option>
|
||||
</c:forEach>
|
||||
</select>
|
||||
</slot>
|
||||
</template>
|
||||
</div>
|
||||
<div class="col-md-12">
|
||||
<label for="etcCn--${pageName}"
|
||||
class="w-px-130 bg-lighter pe-2 col-form-label text-sm-end">
|
||||
특기사항
|
||||
</label>
|
||||
<input type="text" id="etcCn--${pageName}" name="etcCn"
|
||||
data-map="ETC_CN" class="form-control"
|
||||
data-maxlengthb="1000" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="row my-1 mx-4 g-1 border-card rounded-3">
|
||||
<div class="col-md-4">
|
||||
<label for="rtpyrNm--${pageName}"
|
||||
class="w-px-130 bg-lighter pe-2 col-form-label text-sm-end">납부자명</label>
|
||||
<input type="text" id="rtpyrNm--${pageName}" name="rtpyrNm" data-map="RTPYR_NM"
|
||||
class="form-control" readonly
|
||||
/>
|
||||
</div>
|
||||
<div class="col-md-3">
|
||||
<label for="rtpyrSeCd--${pageName}"
|
||||
class="w-px-130 bg-lighter pe-2 col-form-label text-sm-end">납부자구분</label>
|
||||
<select id="rtpyrSeCd--${pageName}" name="rtpyrSeCd" data-map="RTPYR_SE_CD"
|
||||
class="form-select" disabled>
|
||||
<option value=""></option>
|
||||
<c:forEach items="${FIM011List}" var="item">
|
||||
<option value="${item.code}">${item.value}</option>
|
||||
</c:forEach>
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-md-5">
|
||||
<label for="rtpyrNo--${pageName}"
|
||||
class="w-px-130 bg-lighter pe-2 col-form-label text-sm-end">납부자번호</label>
|
||||
<input type="text" id="rtpyrNo--${pageName}" name="rtpyrNo" data-map="RTPYR_NO"
|
||||
class="form-control privacy" readonly />
|
||||
<input type="text" id="mask-rtpyrNo--${pageName}"
|
||||
class="form-control privacy-mask" disabled value="******"/>
|
||||
</div>
|
||||
<div class="col-md-12">
|
||||
<label for="zip--${pageName}" class="w-px-130 bg-lighter pe-2 col-form-label text-sm-end">
|
||||
우편번호
|
||||
</label>
|
||||
<input type="text" id="zip--${pageName}" name="zip" data-map="ZIP" class="form-control w-px-100"
|
||||
readonly maxlength="7" pattern="(\d{3}-\d{3}|\d{6}|\d{5})" />
|
||||
</div>
|
||||
<div class="col-md-12">
|
||||
<label for="addr--${pageName}" class="w-px-130 bg-lighter pe-2 col-form-label text-sm-end">
|
||||
주소
|
||||
</label>
|
||||
<input type="text" id="addr--${pageName}" name="addr" data-map="ADDR"
|
||||
class="form-control w-px-700" readonly data-maxlengthb="320" />
|
||||
</div>
|
||||
<div class="col-md-12">
|
||||
<label for="dtlAddr--${pageName}"
|
||||
class="w-px-130 bg-lighter pe-2 col-form-label text-sm-end">
|
||||
상세주소
|
||||
</label>
|
||||
<input type="text" id="dtlAddr--${pageName}" name="dtlAddr" data-map="DTL_ADDR"
|
||||
class="form-control w-px-700" readonly data-maxlengthb="200" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="row g-1">
|
||||
<div class="col-md-4">
|
||||
<label for="vin--${pageName}"
|
||||
class="w-px-130 bg-lighter pe-2 col-form-label text-sm-end">
|
||||
차대번호
|
||||
</label>
|
||||
<input type="text" id="vin--${pageName}" name="vin"
|
||||
data-map="VIN" class="form-control" readonly
|
||||
placeholder="입력항목이 아닙니다." />
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
<label for="vhclNm--${pageName}"
|
||||
class="w-px-130 bg-lighter pe-2 col-form-label text-sm-end">
|
||||
차량명칭
|
||||
</label>
|
||||
<input type="text" id="vhclNm--${pageName}" name="vhclNm"
|
||||
data-map="VHCL_NM" class="form-control" readonly
|
||||
placeholder="입력항목이 아닙니다." />
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
<label for="vhclColr--${pageName}"
|
||||
class="w-px-130 bg-lighter pe-2 col-form-label text-sm-end">
|
||||
차량색상
|
||||
</label>
|
||||
<input type="text" id="vhclColr--${pageName}" name="vhclColr"
|
||||
data-map="VHCL_COLR" class="form-control" readonly
|
||||
placeholder="입력항목이 아닙니다." />
|
||||
</div>
|
||||
<div class="col-md-12" slot="edit">
|
||||
<template class="pvs bpv">
|
||||
<slot>
|
||||
<label for="ffnlgCarmdlCd--${pageName}"
|
||||
class="w-px-130 bg-lighter pe-2 col-form-label text-sm-end">
|
||||
차종
|
||||
</label>
|
||||
<select id="ffnlgCarmdlCd--${pageName}" name ="ffnlgCarmdlCd"
|
||||
data-map="FFNLG_CARMDL_CD" class="form-select">
|
||||
<option value=""></option>
|
||||
<c:forEach items="${FIM009List}" var="item">
|
||||
<option value="${item.code}">${item.value}</option>
|
||||
</c:forEach>
|
||||
</select>
|
||||
</slot>
|
||||
</template>
|
||||
</div>
|
||||
<div class="col-md-12" slot="edit">
|
||||
<template class="eca">
|
||||
<slot>
|
||||
<label for="useFuelCd--${pageName}"
|
||||
class="w-px-130 bg-lighter pe-2 col-form-label text-sm-end">
|
||||
연료구분
|
||||
</label>
|
||||
<select id="useFuelCd--${pageName}" name="useFuelCd"
|
||||
data-map="USE_FUEL_CD" class="form-select" disabled>
|
||||
<option value=""></option>
|
||||
<c:forEach items="${LVS005List}" var="item">
|
||||
<option value="${item.code}">${item.value}</option>
|
||||
</c:forEach>
|
||||
</select>
|
||||
</slot>
|
||||
</template>
|
||||
</div>
|
||||
<div class="col-md-4" slot="edit">
|
||||
<template class="dpv eca pvs">
|
||||
<slot>
|
||||
<label for="towngYn--${pageName}"
|
||||
class="w-px-130 bg-lighter pe-2 col-form-label text-sm-end">
|
||||
견인지시
|
||||
</label>
|
||||
<select id="towngYn--${pageName}" name="towngYn" class="form-select" data-map="TOWNG_YN">
|
||||
<c:forEach items="${FIM053List}" var="item">
|
||||
<option value="${item.code}">${item.value}</option>
|
||||
</c:forEach>
|
||||
</select>
|
||||
</slot>
|
||||
</template>
|
||||
</div>
|
||||
<div class="col-md-4" slot="edit">
|
||||
<template class="dpv eca pvs">
|
||||
<slot>
|
||||
<label for="crdnSn--${pageName}"
|
||||
class="w-px-130 bg-lighter pe-2 col-form-label text-sm-end">
|
||||
스티커번호
|
||||
</label>
|
||||
<input type="text" id="crdnSn--${pageName}" name="crdnSn"
|
||||
data-map="CRDN_SN" class="form-control"
|
||||
maxlength="20" data-maxlengthb="20" />
|
||||
</slot>
|
||||
</template>
|
||||
</div>
|
||||
<div class="col-md-4" slot="edit">
|
||||
<template class="dpv">
|
||||
<slot>
|
||||
<label for="prkPsbltyRsltCd--${pageName}"
|
||||
class="w-px-130 bg-lighter pe-2 col-form-label text-sm-end">
|
||||
장애차량확인
|
||||
</label>
|
||||
<select id="prkPsbltyRsltCd--${pageName}" name="prkPsbltyRsltCd"
|
||||
data-map="PRK_PSBLTY_RSLT_CD" class="form-select">
|
||||
<c:forEach items="${FIM034List}" var="item">
|
||||
<c:if test="${item.code == '0' or item.code == '1'}">
|
||||
<option value="${item.code}">${item.value}</option>
|
||||
</c:if>
|
||||
</c:forEach>
|
||||
</select>
|
||||
</slot>
|
||||
</template>
|
||||
</div>
|
||||
<div class="col-md-12" slot="edit">
|
||||
<template class="pvs bpv">
|
||||
<slot>
|
||||
<label for="teamId--${pageName}"
|
||||
class="w-px-130 bg-lighter pe-2 col-form-label text-sm-end">
|
||||
단속조
|
||||
</label>
|
||||
<select id="teamId--${pageName}" name="teamId" data-map="TEAM_ID" class="form-select">
|
||||
<option value=""></option>
|
||||
<c:forEach items="${TeamList}" var="item">
|
||||
<option value="${item.TEAM_ID}">${item.TEAM_NM}</option>
|
||||
</c:forEach>
|
||||
</select>
|
||||
</slot>
|
||||
</template>
|
||||
</div>
|
||||
<div class="col-md-12" slot="edit">
|
||||
<template class="pvs bpv">
|
||||
<slot>
|
||||
<label class="w-px-130 bg-lighter pe-2 col-form-label text-sm-end">단속원</label>
|
||||
<input type="text" id="teamer1--${pageName}" name="teamer1"
|
||||
data-map="TEAMER_1" class="form-control" />
|
||||
<input type="text" id="teamer2--${pageName}" name="teamer2"
|
||||
data-map="TEAMER_2" class="form-control" />
|
||||
<input type="text" id="teamer3--${pageName}" name="teamer3"
|
||||
data-map="TEAMER_3" class="form-control" />
|
||||
<input type="text" id="teamer4--${pageName}" name="teamer4"
|
||||
data-map="TEAMER_4" class="form-control" />
|
||||
</slot>
|
||||
</template>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<label for="doWarning--${pageName}">
|
||||
<input type="checkbox" id="doWarning--${pageName}" name="doWarning"
|
||||
class="form-check-input" />
|
||||
계고처리
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mt-4 justify-content-end mb-3">
|
||||
<div class="col-md-6">
|
||||
<div class="row justify-content-end">
|
||||
<div class="col-sm-3">
|
||||
<button type="button" id="btnInst--${pageName}" class="btn btn-primary">등록</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</form>
|
||||
</div>
|
||||
<div class="card w-px-400 min-w-px-400">
|
||||
<form id="frmFile--${pageName}" method="post" enctype="multipart/form-data">
|
||||
<input type="file" id="newFileList--${pageName}" name="newFileList"
|
||||
multiple accept="image/*" hidden />
|
||||
</form>
|
||||
|
||||
<form id="frmUploadSet--${pageName}" method="post" enctype="multipart/form-data">
|
||||
<input type="file" id="inputUploadSet--${pageName}" name="inputUploadSet"
|
||||
multiple accept="image/*" hidden />
|
||||
</form>
|
||||
<div class="col-md-12">
|
||||
<button type="button" id="btnAddFile--${pageName}" class="btn btn-primary">이미지 추가</button>
|
||||
<button type="button" id="btnOpenVideoCapture--${pageName}" class="btn btn-primary">동영상 캡쳐</button>
|
||||
<button type="button" id="btnCancelAddFile--${pageName}" class="btn btn-primary">선택 사진 삭제</button>
|
||||
</div>
|
||||
<div id="display--${pageName}" class="oy-scroll h-px-600 border-default">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<script>
|
||||
/**************************************************************************
|
||||
* Global Variable
|
||||
**************************************************************************/
|
||||
|
||||
pageObject["${pageName}"] = {};
|
||||
|
||||
$(document).ready(function(){
|
||||
|
||||
var $P = pageObject["${pageName}"];
|
||||
|
||||
$P.captureFileArr = [];
|
||||
$P.localUploadArr = [];
|
||||
|
||||
/**************************************************************************
|
||||
* DatasetControl, Dataset, FormFields
|
||||
**************************************************************************/
|
||||
$P.formFields = new FimsFormFields("#frmEdit--${pageName}");
|
||||
|
||||
$P.uploadSet = uploadSupport("#inputUploadSet--${pageName}");
|
||||
|
||||
$P.crdnControl = new DatasetControl({
|
||||
dataGetter : obj => obj["List"], appendData : true,
|
||||
keymapper : info => info ? info.CRDN_ID : "",
|
||||
urls : {
|
||||
create : wctx.url("/${taskSeCd}/crdn/crdn05/030/create.do")
|
||||
},
|
||||
formats: {
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
/**************************************************************************
|
||||
* Dataset.on
|
||||
**************************************************************************/
|
||||
$P.uploadSet.onDatasetChange = () => {
|
||||
var files = $P.uploadSet.getDataset();
|
||||
files.forEach(item => $P.localUploadArr.push(item));
|
||||
|
||||
$P.fnDisplay();
|
||||
};
|
||||
$P.uploadSet.onRemove = () => { };
|
||||
|
||||
/**************************************************************************
|
||||
* pageObject.function
|
||||
**************************************************************************/
|
||||
$P.fnMakeImgForNewFile = (fileArr) => {
|
||||
var tagsText = "";
|
||||
|
||||
for(var index = 0; index < fileArr.length; index++){
|
||||
var item = fileArr[index];
|
||||
|
||||
tagsText += "<label class='mx-2'>";
|
||||
tagsText += "<input type='checkbox' name='newPhoto' class='form-check-input' value='"+item.id +"' ";
|
||||
tagsText += " />";
|
||||
tagsText += "<img src='"+ item.url +"' width='200' height='200' />";
|
||||
tagsText += "</label>";
|
||||
|
||||
if(index % 2 == 1){
|
||||
tagsText += "<br />";
|
||||
}
|
||||
}
|
||||
|
||||
return tagsText;
|
||||
}
|
||||
|
||||
$P.fnDisplay = () => {
|
||||
var displayArea = document.querySelector("#display--${pageName}");
|
||||
|
||||
var concatArr = $P.localUploadArr.concat($P.captureFileArr);
|
||||
var tagsText = $P.fnMakeImgForNewFile(concatArr);
|
||||
displayArea.innerHTML = tagsText;
|
||||
};
|
||||
|
||||
$P.fnSave = async() => {
|
||||
|
||||
if(!customValidate($("#frmEdit--${pageName} input"))) return;
|
||||
|
||||
if($("#doWarning--${pageName}").is(":checked")){
|
||||
|
||||
var rtpyrNm = document.getElementById("rtpyrNm--${pageName}");
|
||||
if(rtpyrNm.value == ""){
|
||||
dialog.alert({
|
||||
content:"계고 처리를 하기 위해선 소유주정보가 입력되어야 합니다.",
|
||||
init : function(){
|
||||
setDialogZindex();
|
||||
focusClose();
|
||||
},
|
||||
onClose:function(){rtpyrNm.focus();}
|
||||
});
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if(await confirm2("현재 단속 정보를 저장하시겠습니까?")){
|
||||
var info = $P.formFields.get();
|
||||
|
||||
if (!info) {
|
||||
return;
|
||||
}
|
||||
|
||||
var formData = new FormData(document.getElementById("frmFile--${pageName}"));
|
||||
for(var key in info) {
|
||||
var value = info[key];
|
||||
formData.append(key,value);
|
||||
}
|
||||
|
||||
formData.delete("newFileList");
|
||||
|
||||
if($P.localUploadArr.length > 0){
|
||||
$P.localUploadArr.forEach(item => formData.append("newFileList",item));
|
||||
}
|
||||
|
||||
if($P.captureFileArr.length > 0){
|
||||
$P.captureFileArr.forEach(item => formData.append("newFileList",item));
|
||||
}
|
||||
|
||||
ajax.post({
|
||||
url : $P.crdnControl.urls.create,
|
||||
data : formData, contentType : false, processData : false,
|
||||
success : (resp) => {
|
||||
$P.saveCallback(resp);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
$P.saveCallback = (resp) => {
|
||||
if (resp.saved) {
|
||||
dialog.alert({
|
||||
content : "저장됐습니다.",
|
||||
init : function(){
|
||||
setDialogZindex();
|
||||
focusClose();
|
||||
}
|
||||
});
|
||||
dialog.close("manualDialog");
|
||||
}
|
||||
}
|
||||
|
||||
$P.videoCallback = (snapshots) => {
|
||||
snapshots.forEach(function(canvas, index, array){
|
||||
canvas.toBlob(function(blob){
|
||||
var identify = new Date().getTime()+ "-" + index;
|
||||
var file = new File([blob], "capture-"+identify+".png", {type: "image/png"});
|
||||
file.id = "file-" + identify;
|
||||
file.url = (window.URL || window.webkitURL).createObjectURL(file);
|
||||
$P.captureFileArr.push(file);
|
||||
if(index === array.length - 1){
|
||||
$P.fnDisplay();
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 초기화(업무별 입력항목)
|
||||
**************************************************************************/
|
||||
var clsForTask = $("#taskSeCd--${pageName}").val().toLowerCase();
|
||||
//업무별 입력 항목
|
||||
renderForTask('frmEdit--${pageName}', clsForTask);
|
||||
|
||||
/**************************************************************************
|
||||
* element.on
|
||||
**************************************************************************/
|
||||
|
||||
$("#btnInst--${pageName}").on('click', () => $P.fnSave());
|
||||
|
||||
$("#btnAddFile--${pageName}").on('click', () => { $("#inputUploadSet--${pageName}").trigger("click"); });
|
||||
|
||||
$("#btnOpenVideoCapture--${pageName}").on('click', () => {
|
||||
var popupWidth = 1800;
|
||||
var popupHeight = 950;
|
||||
var popupX = (window.screen.width / 2) - (popupWidth / 2);
|
||||
var popupY= (window.screen.height / 2) - (popupHeight / 2);
|
||||
|
||||
var popup = window.open(wctx.url("/sprt/sprt03/010/main.do?openerPageName=${pageName}")
|
||||
,"newVideoCapture"
|
||||
,"width="+popupWidth+", height="+popupHeight+", left="+popupX+", top="+popupY
|
||||
);
|
||||
|
||||
popup.onload = () => {
|
||||
popup.addEventListener('beforeunload', function() {
|
||||
$.unblockUI();
|
||||
});
|
||||
};
|
||||
});
|
||||
|
||||
$("#btnCancelAddFile--${pageName}").on('click', () => {
|
||||
var checked = $("#display--${pageName}").find("[name='newPhoto']:checked");
|
||||
if(checked.length < 1){
|
||||
alert("선택된 사진이 없습니다.");
|
||||
return;
|
||||
}
|
||||
|
||||
var checkedArr = [];
|
||||
for(var i=0; i < checked.length; i++){
|
||||
checkedArr.push(checked[i].value);
|
||||
}
|
||||
|
||||
$P.captureFileArr = $P.captureFileArr.filter(item => checkedArr.indexOf(item.id) == -1);
|
||||
$P.localUploadArr = $P.localUploadArr.filter(item => checkedArr.indexOf(item.id) == -1);
|
||||
|
||||
$P.fnDisplay();
|
||||
});
|
||||
|
||||
$("#vhrno--${pageName}").onEnterPress(function(){
|
||||
|
||||
var alertDialogId = "alertDialog";
|
||||
var crdnYmd = $("#crdnYmd--${pageName}").val().replaceAll("-", "");
|
||||
var vhrnoEl = event.target;
|
||||
var vhrno = vhrnoEl.value;
|
||||
if(crdnYmd == ""){
|
||||
dialog.alert({
|
||||
content : "단속일자를 입력하세요.",
|
||||
init : function(){
|
||||
setDialogZindex();
|
||||
focusClose();
|
||||
},
|
||||
onClose : function(){ $("#crdnYmd--${pageName}").focus(); }
|
||||
});
|
||||
|
||||
return;
|
||||
}
|
||||
if(vhrno == ""){
|
||||
dialog.alert({
|
||||
content:"차량번호를 입력하세요.",
|
||||
init : function(){
|
||||
setDialogZindex();
|
||||
focusClose();
|
||||
},
|
||||
onClose:function(){ $(vhrnoEl).focus(); }
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
json.post({
|
||||
url: wctx.url("/payer/vehicle.do"),
|
||||
data: {
|
||||
sggCd : $("#sggCd--${pageName}").val(),
|
||||
vhrno : vhrno,
|
||||
levy_stdde : crdnYmd
|
||||
},
|
||||
success : (resp) => {
|
||||
if(!resp.found){
|
||||
dialog.alert({
|
||||
content : "차량정보가 없습니다.",
|
||||
init : function(){
|
||||
setDialogZindex();
|
||||
focusClose();
|
||||
}
|
||||
});
|
||||
$("#rtpyrId--${pageName}").val("");
|
||||
$("#addrSn--${pageName}").val("");
|
||||
$("#rtpyrNm--${pageName}").val("");
|
||||
$("#rtpyrSeCd--${pageName}").val("");
|
||||
$("#rtpyrNo--${pageName}").val("");
|
||||
$("#vin--${pageName}").val("");
|
||||
$("#vhclNm--${pageName}").val("");
|
||||
$("#vhclColr--${pageName}").val("");
|
||||
$("#useFuelCd--${pageName}").val("");
|
||||
$("#ffnlgCarmdlCd--${pageName}").val("");
|
||||
$("#zip--${pageName}").val("");
|
||||
$("#addr--${pageName}").val("");
|
||||
$("#dtlAddr--${pageName}").val("");
|
||||
return;
|
||||
}
|
||||
|
||||
$("#rtpyrId--${pageName}").val(resp.rtpyrId);
|
||||
$("#addrSn--${pageName}").val(resp.addrSn);
|
||||
|
||||
var vehicle = resp.vehicle;
|
||||
|
||||
$("#rtpyrNm--${pageName}").val(vehicle.mber_nm);
|
||||
|
||||
var pyrSeCd = "";
|
||||
switch(vehicle.mber_se_code){
|
||||
case "11" : pyrSeCd = "01"; break;
|
||||
case "12" : pyrSeCd = "02"; break;
|
||||
case "13" : pyrSeCd = "03"; break;
|
||||
case "14" : pyrSeCd = "04"; break;
|
||||
case "15" : pyrSeCd = "05"; break;
|
||||
}
|
||||
$("#rtpyrSeCd--${pageName}").val(pyrSeCd);
|
||||
|
||||
$("#rtpyrNo--${pageName}").val(vehicle.mber_se_no);
|
||||
|
||||
$("#vin--${pageName}").val(vehicle.vin);
|
||||
$("#vhclNm--${pageName}").val(vehicle.cnm);
|
||||
$("#vhclColr--${pageName}").val(vehicle.color_nm);
|
||||
$("#useFuelCd--${pageName}").val(vehicle.use_fuel_code);
|
||||
|
||||
if(vehicle.vhcty_asort_code == "1"){ //승용
|
||||
$("#ffnlgCarmdlCd--${pageName}").val("11");
|
||||
} else if(vehicle.vhcty_asort_code == "2"){ //승합
|
||||
$("#ffnlgCarmdlCd--${pageName}").val("12");
|
||||
} else if(vehicle.vhcty_asort_code == "3"){ //화물
|
||||
if(vehicle.mxmm_ldg <= 4000){
|
||||
$("#ffnlgCarmdlCd--${pageName}").val("13");
|
||||
} else {
|
||||
$("#ffnlgCarmdlCd--${pageName}").val("14");
|
||||
}
|
||||
} else if(vehicle.vhcty_asort_code == "4"){ //특수
|
||||
$("#ffnlgCarmdlCd--${pageName}").val("15");
|
||||
} else {
|
||||
$("#ffnlgCarmdlCd--${pageName}").val("");
|
||||
}
|
||||
|
||||
$("#zip--${pageName}").val(vehicle.zip_code); //우편번호
|
||||
$("#addr--${pageName}").val(vehicle.road_nm_adres); //주소
|
||||
$("#dtlAddr--${pageName}").val(vehicle.use_strnghld_adres_nm); //상세주소
|
||||
}
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
$("#teamId--${pageName}").on("change",function(){
|
||||
$("#teamer1--${pageName}").val("");
|
||||
$("#teamer2--${pageName}").val("");
|
||||
$("#teamer3--${pageName}").val("");
|
||||
$("#teamer4--${pageName}").val("");
|
||||
|
||||
if(this.value != ""){
|
||||
ajax.get({
|
||||
url: wctx.url("/${taskSeCd}/crdn/crdn07/010/info.do"),
|
||||
data: { "teamId" : this.value},
|
||||
success : (resp) => {
|
||||
if(resp.teamInfo != null){
|
||||
var teamInfo = resp.teamInfo;
|
||||
$("#teamer1--${pageName}").val(teamInfo.TEAMER_1);
|
||||
$("#teamer2--${pageName}").val(teamInfo.TEAMER_2);
|
||||
$("#teamer3--${pageName}").val(teamInfo.TEAMER_3);
|
||||
$("#teamer4--${pageName}").val(teamInfo.TEAMER_4);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
/**************************************************************************
|
||||
* 초기화
|
||||
**************************************************************************/
|
||||
initDatepicker("frmEdit--${pageName}"); //달력 초기화
|
||||
|
||||
$("#frmEdit--${pageName}").find(".form-date").each(function(){
|
||||
$(this).on("input",function(){
|
||||
var 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);
|
||||
}
|
||||
|
||||
});
|
||||
});
|
||||
$("#frmEdit--${pageName}").find(".form-time").each(function(){
|
||||
$(this).on("input",function(){
|
||||
var value = this.value.replaceAll(":","");
|
||||
|
||||
if(value.length > 5){
|
||||
this.value = value.substring(0,2)+":"+value.substring(2,4)+":"+value.substring(4);
|
||||
} else if(value.length > 3){
|
||||
this.value = value.substring(0,2)+":"+value.substring(2);
|
||||
}
|
||||
|
||||
});
|
||||
});
|
||||
|
||||
//보안모드
|
||||
fn_securityModeToggle($("#securityMode--top").is(":checked"));
|
||||
|
||||
$P.crdnControl.dataset.append({});
|
||||
|
||||
});
|
||||
</script>
|
||||
@ -1,623 +0,0 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
<c:set var="pageKorName" scope="request">단속 자료 조회</c:set>
|
||||
<div class="content-wrapper">
|
||||
<div class="container-xxl flex-grow-1 px-0">
|
||||
<div class="card wrapper-list">
|
||||
|
||||
<div class="container-page-btn">
|
||||
<button type="button" id="btnReset--${pageName}" class="btn btn-outline-dark w-px-120" title="초기화">
|
||||
초기화
|
||||
</button>
|
||||
<span class="container-window-btn-right">
|
||||
<button type="button" id="btnSearch--${pageName}" class="btn btn-search w-px-120" title="검색">
|
||||
검색
|
||||
</button>
|
||||
<button type="button" id="btnExcel--${pageName}" class="btn btn-excel w-px-120" title="엑셀 저장">
|
||||
엑셀
|
||||
</button>
|
||||
<button type="button" id="btnExcelForApproval--${pageName}" class="btn btn-excel w-px-120" title="엑셀 저장">
|
||||
엑셀(사진 포함)
|
||||
</button>
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<form id="frmSearch--${pageName}" name="frmSearch">
|
||||
<div class="container-search">
|
||||
<div class="row g-1">
|
||||
<div class="col-12">
|
||||
<span class="form-label fw-bold form-search-title w-px-120 text-end">업무구분</span>
|
||||
<span class="form-search-linebox">
|
||||
<c:forEach items="${TaskListForSgg}" var="item">
|
||||
<label>
|
||||
<input name="taskSeCd" type="radio" value="${item.code}"
|
||||
class="form-check-input" alt="업무구분"
|
||||
onchange="pageObject['${pageName}'].fnResetAndChangeBiz(this.value);">
|
||||
${item.value}
|
||||
</label>
|
||||
</c:forEach>
|
||||
</span>
|
||||
</div>
|
||||
<div class="col-6">
|
||||
<label class="form-label fw-bold form-search-title w-px-120 text-end" for="schCrdnYmdFrom--${pageName}">단속일자</label>
|
||||
<span class="form-search-linebox">
|
||||
<input type="text" id="schCrdnYmdFrom--${pageName}" name="schCrdnYmdFrom"
|
||||
class="form-control form-date"
|
||||
data-fmt-type="day" title="시작 날짜 선택" />
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
~
|
||||
<input type="text" id="schCrdnYmdTo--${pageName}" name="schCrdnYmdTo"
|
||||
class="form-control form-date"
|
||||
data-fmt-type="day" title="종료 날짜 선택">
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
</span>
|
||||
</div>
|
||||
<div class="col-6">
|
||||
<label class="form-label fw-bold form-search-title w-px-120 text-end" for="crdnInptSeCd--${pageName}">자료출처</label>
|
||||
<select id="crdnInptSeCd--${pageName}" name="crdnInptSeCd" class="form-select">
|
||||
<option value="">전체</option>
|
||||
<c:forEach items="${FIM003List}" var="item">
|
||||
<option value="${item.code}">${item.value}</option>
|
||||
</c:forEach>
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-6">
|
||||
<label class="form-label fw-bold form-search-title w-px-120 text-end" for="vhrno--${pageName}">차량번호</label>
|
||||
<input type="text" id="vhrno--${pageName}" name="vhrno" class="form-control" />
|
||||
</div>
|
||||
<div class="col-6">
|
||||
<input type="hidden" id="by--${pageName}" name="by" />
|
||||
<input type="text" class="form-control fw-bold w-px-120 text-end" id="byOutput--${pageName}" value="동적 검색" readonly />
|
||||
<input type="hidden" id="mainOption--${pageName}" name="mainOption" />
|
||||
<input type="hidden" id="subOption--${pageName}" name="subOption" />
|
||||
<input type="text" class="form-control w-px-400" id="term--${pageName}" name="term" autocomplete="off" />
|
||||
<!-- 상세 검색조건 버튼 -->
|
||||
<span class="flr">
|
||||
<button type="button" class="btn btn-open-detail" data-bs-toggle="collapse" data-bs-target="#searchDetail--${pageName}">
|
||||
<i class="bx bx-chevron-down"></i>
|
||||
상세검색
|
||||
</button>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="searchDetail--${pageName}" class="container-search container-search-detail collapse">
|
||||
<div class="row">
|
||||
<div slot="search" class="col-6 if-empty-col0">
|
||||
<template class="pvs dpv eca">
|
||||
<slot>
|
||||
<span class="form-label fw-bold form-search-title w-px-120 text-end">견인여부</span>
|
||||
<label class="form-label">
|
||||
<input type="radio" name="towngYn" value="" class="form-check-input" checked />전체
|
||||
</label>
|
||||
<label class="form-label">
|
||||
<input type="radio" name="towngYn" value="Y" class="form-check-input" />예
|
||||
</label>
|
||||
<label class="form-label">
|
||||
<input type="radio" name="towngYn" value="N" class="form-check-input" />아니오
|
||||
</label>
|
||||
</slot>
|
||||
</template>
|
||||
</div>
|
||||
<div class="col-6">
|
||||
<label class="form-label fw-bold form-search-title w-px-120 text-end" for="crdnSttsCd--${pageName}">자료상태</label>
|
||||
<select id="crdnSttsCd--${pageName}" name="crdnSttsCd" class="form-select">
|
||||
<option value="">전체</option>
|
||||
<c:forEach items="${FIM010List}" var="item">
|
||||
<option value="${item.code}">${item.value}</option>
|
||||
</c:forEach>
|
||||
</select>
|
||||
</div>
|
||||
<div slot="search" id="searchForNxrp--${pageName}" class="col-6 if-empty-col0">
|
||||
<template class="pvs bpv">
|
||||
<slot>
|
||||
<label class="form-label fw-bold form-search-title w-px-120 text-end"
|
||||
for="nxrpSendStts--${pageName}">세외수입 전송 상태</label>
|
||||
<select id="nxrpSendStts--${pageName}" name="nxrpSendStts" class="form-select">
|
||||
<option value="">전체</option>
|
||||
<option value="01">전송가능</option>
|
||||
<option value="02">전송완료</option>
|
||||
<option value="03">전송불가(사진없음)</option>
|
||||
</select>
|
||||
</slot>
|
||||
</template>
|
||||
</div>
|
||||
<div class="col-12"></div>
|
||||
<!-- 등록일자, 수정일자 -->
|
||||
<div class="col-6">
|
||||
<select class="form-select w-px-120 text-center" id="schRegDateOpt--${pageName}" name="schRegDateOpt">
|
||||
<option value="regDt">등록일자</option>
|
||||
<option value="mdfcnDt">수정일자</option>
|
||||
</select>
|
||||
<span class="form-search-linebox">
|
||||
<input type="text" class="form-control form-date" id="schRegDateFrom--${pageName}" name="schRegDateFrom"
|
||||
data-fmt-type="day" title="시작 날짜 선택" />
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
~
|
||||
<input type="text" class="form-control form-date" id="schRegDateTo--${pageName}" name="schRegDateTo"
|
||||
data-fmt-type="day" title="종료 날짜 선택">
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
</span>
|
||||
</div>
|
||||
<!-- 등록자명, 수정자명 -->
|
||||
<div class="col-6">
|
||||
<select class="form-select w-px-120 text-center" id="schRgtrOpt--${pageName}" name="schRgtrOpt">
|
||||
<option value="rgtr">등록자</option>
|
||||
<option value="mdfr">수정자</option>
|
||||
</select>
|
||||
<input type="hidden" id="schRgtrCd--${pageName}" name="schRgtrCd" />
|
||||
<input type="text" class="form-control w-px-160" id="schRgtrNm--${pageName}" name="schRgtrNm" />
|
||||
<button type="button" class="btn btn-sm btn-outline-dark" id="btnFindUser--${pageName}" title="사용자 검색">검색</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<div>
|
||||
<div id="gridbuttonArea--${pageName}" class="container-page-btn">
|
||||
<div class="d-flex flex-row justify-content-between">
|
||||
<span id="crdnPaging--${pageName}PagingInfo" class="dataTables_info" role="status" aria-live="polite"></span>
|
||||
<ul id="crdnPaging--${pageName}" class="pagination pagination-primary">
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<span class="container-window-btn-right">
|
||||
<span slot="button">
|
||||
<template class="pvs bpv">
|
||||
<slot>
|
||||
<button type="button" class="btn btn-primary w-px-120"
|
||||
id="btnSendCrdn--${pageName}" title="세외수입 전송">
|
||||
☑ 세외수입 전송
|
||||
</button>
|
||||
</slot>
|
||||
</template>
|
||||
</span>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card-datatable text-nowrap">
|
||||
<div id="DataTables_Table_0_wrapper--${pageName}" class="dataTables_wrapper dt-bootstrap5 no-footer">
|
||||
<div id="table-responsive--${pageName}" class="table-responsive ox-scroll oy-scroll h-px-500">
|
||||
<table id="DataTables_Table_0--${pageName}"
|
||||
class="table-layout-fixed datatables-ajax table table-bordered dataTable no-footer">
|
||||
<thead class="sticky-thead">
|
||||
<tr id="crdnThead--${pageName}"
|
||||
data-by="by--${pageName}" data-by-output="byOutput--${pageName}"
|
||||
data-main-option="mainOption--${pageName}" data-sub-option="subOption--${pageName}">
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="crdnTbody--${pageName}">
|
||||
</tbody>
|
||||
|
||||
<template id="crdnCols--${pageName}">
|
||||
<th style="width: 80px;" class="cmn">No.</th>
|
||||
<th class="cmn" style="width: 56px;">
|
||||
<input type="checkbox" class="form-check-input" id="gridAllCheckbox--${pageName}"
|
||||
onchange="pageObject['${pageName}'].checkCrdnList(this, this.checked);" />
|
||||
</th>
|
||||
<th onclick="searchFromGridTitle('CRDN_INPT_SE_CD',this.innerText,'codeValue','FIM003');"
|
||||
style="width: 160px;" class="pvs bpv dpv eca">자료출처</th>
|
||||
<th onclick="searchFromGridTitle('VHRNO',this.innerText,'match','part');"
|
||||
style="width: 160px;" class="cmn">차량번호</th>
|
||||
<th onclick="searchFromGridTitle('CRDN_YMD','위반일자','ymd','');"
|
||||
style="width: 180px;" class="cmn">위반일시</th>
|
||||
<th onclick="searchFromGridTitle('CRDN_PLC',this.innerText,'match','part');"
|
||||
style="width: 250px;" class="cmn">단속장소</th>
|
||||
<th onclick="searchFromGridTitle('ATCH_FILE_CNT',this.innerText,'match','perfect');"
|
||||
style="width: 100px;" class="cmn">사진건수</th>
|
||||
<th onclick="searchFromGridTitle('CRDN_SN',this.innerText,'match','perfect');"
|
||||
style="width: 120px;" class="pvs dpv eca">스티커번호</th>
|
||||
<th onclick="searchFromGridTitle('PRK_PSBLTY_RSLT_CD',this.innerText,'codeValue','FIM034');"
|
||||
style="width: 140px;" class="dpv">장애차량확인</th>
|
||||
<th onclick="searchFromGridTitle('CRDN_STTS_CD',this.innerText,'codeValue','FIM010');"
|
||||
style="width: 140px;" class="cmn">처리상태</th>
|
||||
<th onclick="searchFromGridTitle('LEVY_EXCL_RSN_CD',this.innerText,'codeValue','FIM022');"
|
||||
style="width: 250px;" class="cmn">제외사유</th>
|
||||
<th onclick="searchFromGridTitle('LEVY_EXCL_YMD',this.innerText,'ymd','');"
|
||||
style="width: 140px;" class="cmn">제외처리일자</th>
|
||||
<th onclick="searchFromGridTitle('LEVY_EXCL_ETC_CN',this.innerText,'match','part');"
|
||||
style="width: 250px;" class="cmn">제외내역</th>
|
||||
<th class="cmn dummy-th"></th>
|
||||
</template>
|
||||
<template id="crdnRow--${pageName}">
|
||||
<tr data-key="{CRDN_ID}">
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-end cmn">{ROW_NUM}</td>
|
||||
<td class="cmn text-center">
|
||||
<input type="checkbox" class="form-check-input" name="gridCheckbox" value="{CRDN_ID}"
|
||||
onchange="pageObject['${pageName}'].checkCrdnList(this, this.checked);">
|
||||
</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-center cmn">{CRDN_INPT_SE_CD}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-center cmn">{VHRNO}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-center cmn">{CRDN_YMD_TM}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-start cmn">{CRDN_PLC}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-center cmn">{ATCH_FILE_CNT}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-start pvs dpv eca">{CRDN_SN}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-center dpv">{PRK_PSBLTY_RSLT_CD}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-center cmn">{CRDN_STTS_CD}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-center cmn">{LEVY_EXCL_RSN_CD}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-center cmn">{LEVY_EXCL_YMD}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-start cmn">{LEVY_EXCL_ETC_CN}</td>
|
||||
<td class="dummy-td cmn"></td>
|
||||
</tr>
|
||||
</template>
|
||||
<template id="crdnNotFound--${pageName}">
|
||||
<tr class="dpv">
|
||||
<td valign="top" colspan="14" class="dataTables_empty text-center">
|
||||
단속 정보를 찾지 못했습니다.
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="eca">
|
||||
<td valign="top" colspan="13" class="dataTables_empty text-center">
|
||||
단속 정보를 찾지 못했습니다.
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="pvs">
|
||||
<td valign="top" colspan="13" class="dataTables_empty text-center">
|
||||
단속 정보를 찾지 못했습니다.
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="bpv">
|
||||
<td valign="top" colspan="12" class="dataTables_empty text-center">
|
||||
단속 정보를 찾지 못했습니다.
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="pes">
|
||||
<td valign="top" colspan="12" class="dataTables_empty text-center">
|
||||
단속 정보를 찾지 못했습니다.
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="dvs">
|
||||
<td valign="top" colspan="12" class="dataTables_empty text-center">
|
||||
단속 정보를 찾지 못했습니다.
|
||||
</td>
|
||||
</tr>
|
||||
</template>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content-backdrop fade"></div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
|
||||
/**************************************************************************
|
||||
* Global Variable
|
||||
**************************************************************************/
|
||||
var FIM002 = new CommonCodes(${FIM002});
|
||||
var FIM003 = new CommonCodes(${FIM003});
|
||||
var FIM010 = new CommonCodes(${FIM010});
|
||||
var FIM022 = new CommonCodes(${FIM022});
|
||||
var FIM026 = new CommonCodes(${FIM026});
|
||||
var FIM034 = new CommonCodes(${FIM034});
|
||||
pageObject["${pageName}"] = {};
|
||||
|
||||
|
||||
$(document).ready(function(){
|
||||
|
||||
var $P = pageObject["${pageName}"];
|
||||
|
||||
/**************************************************************************
|
||||
* DatasetControl
|
||||
**************************************************************************/
|
||||
$P.crdnControl = new DatasetControl({
|
||||
dataGetter : obj => obj["List"], appendData:true,
|
||||
keymapper : info => info ? info.CRDN_ID : "",
|
||||
urls : {
|
||||
load : "",
|
||||
getInfo : ""
|
||||
},
|
||||
formats: {
|
||||
CRDN_INPT_SE_CD: FIM003,
|
||||
CRDN_YMD_TM : datetimeFormat,
|
||||
REG_DT : datetimeFormat,
|
||||
MDFCN_DT : datetimeFormat,
|
||||
CVLCPT_PRCS_PRNMNT_DT : dateFormat,
|
||||
CVLCPT_RCPT_YMD : dateFormat,
|
||||
|
||||
RCVMT_AMT : numberFormat,
|
||||
|
||||
CRDN_SE_CD: FIM002,
|
||||
CRDN_STTS_CD : FIM010,
|
||||
CRDN_REG_SE_CD: FIM026,
|
||||
LEVY_EXCL_YMD : dateFormat,
|
||||
LEVY_EXCL_RSN_CD : FIM022,
|
||||
PRK_PSBLTY_RSLT_CD : FIM034
|
||||
}
|
||||
});
|
||||
$P.crdnControl.defaultFetchSize = FETCH_XS;
|
||||
$P.crdnControl.query = { pageNum : 1, fetchSize : $P.crdnControl.defaultFetchSize };
|
||||
$P.crdnControl.beforeCurrent = null;
|
||||
|
||||
/**************************************************************************
|
||||
* Dataset.on
|
||||
**************************************************************************/
|
||||
$P.crdnControl.dataset.onDatasetChange = (obj, option) => {
|
||||
var t = $P.getGridTemplate();
|
||||
var trs = Apply.fromDataset.getTbody($P.crdnControl.dataset, t.found, t.notFound, t.replacer);
|
||||
$P.renderCrdnList(obj["Total"], $P.crdnControl.dataset.length, trs, option);
|
||||
|
||||
Apply.fromDataset.paging($P.crdnControl.dataset, obj, "crdnPaging--${pageName}");
|
||||
};
|
||||
|
||||
$P.crdnControl.dataset.onCurrentChange = (dataItem) => {
|
||||
Apply.fromDataset.currentRow($P.crdnControl.dataset, dataItem, $("#crdnTbody--${pageName}")[0]);
|
||||
}
|
||||
|
||||
$P.crdnControl.dataset.onSelectionChange = (selectedArr) => {
|
||||
Apply.fromDataset.gridCheckbox($P.crdnControl.dataset, document.getElementById("crdnTbody--${pageName}"), 1, selectedArr);
|
||||
Apply.fromDataset.gridButton($P.crdnControl.dataset, $("#btnSendCrdn--${pageName}")[0], selectedArr);
|
||||
};
|
||||
|
||||
/**************************************************************************
|
||||
* pageObject.function
|
||||
**************************************************************************/
|
||||
$P.fnReset = () => {
|
||||
var searchForm = $("#frmSearch--${pageName}");
|
||||
searchForm.find("input[type='radio']").not("[name='taskSeCd']").prop("checked", false);
|
||||
searchForm.find("input[type='checkbox']").prop("checked", false);
|
||||
searchForm.find("input[type='text']").val("");
|
||||
searchForm.find("input[type='hidden']").val("");
|
||||
searchForm.find("select").each(function(){ $(this).find("option:eq(0)").prop("selected", true); });
|
||||
|
||||
$("#byOutput--${pageName}").val("동적 검색");
|
||||
$("#schRgtrNm--${pageName}").prop("readonly", true); // 사용자 이름
|
||||
$('#schCrdnYmdFrom--${pageName}').datepicker('setDate', DateUtil.getDateDay(-365).date);
|
||||
$('#schCrdnYmdTo--${pageName}').datepicker('setDate', TODAY());
|
||||
$P.crdnControl.dataset.setData([]);
|
||||
}
|
||||
|
||||
$P.fnResetAndChangeBiz = (taskSeCd) => {
|
||||
$P.fnReset();
|
||||
$P.crdnControl.urls.load = wctx.url("/"+taskSeCd+"/crdn/crdn06/010/list.do");
|
||||
$P.crdnControl.urls.getInfo = wctx.url("/sprt/sprt02/010/main.do");
|
||||
|
||||
var clsForTask = taskSeCd.toLowerCase();
|
||||
|
||||
//업무별 조회조건
|
||||
renderForTask("frmSearch--${pageName}", clsForTask);
|
||||
//업무별 버튼
|
||||
renderForTask("gridbuttonArea--${pageName}", clsForTask);
|
||||
//버튼 이벤트 재매핑
|
||||
$("#btnSendCrdn--${pageName}").off("click");
|
||||
$("#btnSendCrdn--${pageName}").on("click", () => $P.fnSendCrdn());
|
||||
|
||||
//업무별 그리드
|
||||
var colsContent = document.getElementById("crdnCols--${pageName}").content;
|
||||
var cols = $(colsContent).find("."+clsForTask+",.cmn");
|
||||
var colsStr = "";
|
||||
cols.each(function(){
|
||||
colsStr += this.outerHTML;
|
||||
});
|
||||
$("#table-responsive--${pageName}")[0].changeColumn(colsStr);
|
||||
|
||||
if(SYS_LINK_INFO = null || SYS_LINK_INFO.NXRP_LINK_YN != 'Y'){
|
||||
$("#btnSendCrdn--${pageName}").attr("hidden","hidden");
|
||||
$("#searchForNxrp--${pageName}").attr("hidden","hidden");
|
||||
} else {
|
||||
$("#btnSendCrdn--${pageName}").prop("disabled", true);
|
||||
}
|
||||
}
|
||||
|
||||
$P.getParams = () => {
|
||||
var formFields = new FimsFormFields("#frmSearch--${pageName}");
|
||||
var data = formFields.get();
|
||||
data.fetchSize = $P.crdnControl.defaultFetchSize;
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
$P.searchCrdnList = () => {
|
||||
$P.crdnControl.query = $P.getParams();
|
||||
$P.crdnControl.load(1);
|
||||
}
|
||||
|
||||
$P.scrollCrdnList = () => {
|
||||
$P.crdnControl.load($P.crdnControl.query.pageNum + 1);
|
||||
}
|
||||
|
||||
$P.refreshCrdnList = () => {
|
||||
$P.crdnControl.reload({all : true});
|
||||
}
|
||||
|
||||
$P.fnExcelDown = (forApproval) => {
|
||||
if($P.crdnControl.dataset.empty){
|
||||
alert("조회된 자료가 없습니다.");
|
||||
return;
|
||||
}
|
||||
|
||||
var cellDefs = getCellDefs($("#crdnThead--${pageName} th").not(".dummy-th").not(":eq(0)").not(":eq(0)"),
|
||||
$($("#crdnRow--${pageName}")[0].content).find("td").not(".dummy-td").not(":eq(0)").not(":eq(0)"));
|
||||
$P.crdnControl.query.cellDefs = cellDefs;
|
||||
|
||||
if(forApproval){
|
||||
$P.crdnControl.query.includePhoto = "Y";
|
||||
} else {
|
||||
$P.crdnControl.query.includePhoto = "N";
|
||||
}
|
||||
|
||||
$P.crdnControl.download();
|
||||
|
||||
$P.crdnControl.query.includePhoto = null;
|
||||
};
|
||||
|
||||
$P.checkCrdnList = (element, bool) => {
|
||||
GRID.checkbox.sync(element, bool);
|
||||
|
||||
var atLeastOne = GRID.checkbox.countChecked(element) > 0;
|
||||
$("#btnSendCrdn--${pageName}").prop("disabled", !atLeastOne);
|
||||
|
||||
Apply.toDataset.selection($P.crdnControl.dataset, element, bool);
|
||||
}
|
||||
|
||||
$P.getGridTemplate = () => {
|
||||
var clsForTask = $("#frmSearch--${pageName} [name='taskSeCd']:checked").val().toLowerCase();
|
||||
var notFound = [document.getElementById("crdnNotFound--${pageName}").content.querySelector("."+clsForTask+",.cmn").outerHTML];
|
||||
var foundContent = document.getElementById("crdnRow--${pageName}").content;
|
||||
var foundTr = $(foundContent).find("tr")[0].cloneNode(false);
|
||||
var foundTds = $(foundContent).find("."+clsForTask+",.cmn");
|
||||
foundTds.each(function(){
|
||||
foundTr.appendChild(this.cloneNode(true));
|
||||
});
|
||||
var found = foundTr.outerHTML;
|
||||
|
||||
var replacer = (str, dataItem) => str
|
||||
.replace(/{onclick}/gi, "pageObject['${pageName}'].clickCrdnList('" + dataItem.getValue("CRDN_ID") + "');")
|
||||
.replace(/{ondblclick}/gi, "pageObject['${pageName}'].dblclickCrdnList('" + dataItem.getValue("CRDN_ID") + "');");
|
||||
|
||||
return {
|
||||
found : found,
|
||||
notFound : notFound,
|
||||
replacer : replacer
|
||||
};
|
||||
}
|
||||
|
||||
$P.renderCrdnList = (total, listLength, trs, option) => {
|
||||
|
||||
let noMore = (listLength >= total);
|
||||
var initScroll = ($P.crdnControl.query.pageNum < 2);
|
||||
if(option != null && option.reloaded){
|
||||
initScroll = false;
|
||||
}
|
||||
|
||||
$("#table-responsive--${pageName}")[0].changeContent(trs, initScroll, noMore);
|
||||
|
||||
fn_securityModeToggle($("#securityMode--top").is(":checked")); //보안모드
|
||||
|
||||
}
|
||||
|
||||
$P.clickCrdnList = (dataKey) => {
|
||||
if(dataKey == ""){
|
||||
return;
|
||||
}
|
||||
|
||||
$("#crdnTbody--${pageName}").setCurrentRow(dataKey);
|
||||
Apply.toDataset.current($P.crdnControl.dataset, dataKey);
|
||||
}
|
||||
|
||||
$P.dblclickCrdnList = (dataKey) => {
|
||||
var params = {
|
||||
callControlName : "pageObject['${pageName}'].crdnControl",
|
||||
crdnId : dataKey
|
||||
};
|
||||
|
||||
ajax.get({
|
||||
url : $P.crdnControl.urls.getInfo,
|
||||
data : params,
|
||||
success : (resp) => {
|
||||
|
||||
dialog.open({
|
||||
id : "totalInfoMainDialog",
|
||||
title : "개별총정보", size : "xxl", content : resp,
|
||||
init : () => {}
|
||||
});
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
$P.fnSendCrdn = () => {
|
||||
var datas = $P.crdnControl.dataset.getDataset("selected");
|
||||
var taskSeCd = datas[0].TASK_SE_CD;
|
||||
|
||||
var keys = $P.crdnControl.dataset.getKeys("selected");
|
||||
var url = "";
|
||||
if(taskSeCd == "PVS"){
|
||||
url = "/"+taskSeCd+"/nxrp/nxrp01/010/createIndivB01.do";
|
||||
} else if(taskSeCd == "BPV"){
|
||||
url = "/"+taskSeCd+"/nxrp/nxrp01/010/createIndivC01.do";
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
|
||||
ajax.post({
|
||||
url : wctx.url(url),
|
||||
data : { "crdnIds" : keys.join(",") },
|
||||
success : (resp) => {
|
||||
if(resp.saved){
|
||||
dialog.alert({
|
||||
content : "처리되었습니다.",
|
||||
init : function() {
|
||||
setDialogZindex();
|
||||
focusClose();
|
||||
},
|
||||
onClose : function(){
|
||||
$P.refreshCrdnList();
|
||||
}
|
||||
});
|
||||
} else {
|
||||
alert(resp.rtnMsg);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// 사용자검색 callback
|
||||
$P.callbackFindUser = (userId, userNm) => {
|
||||
$("#schRgtrCd--${pageName}").val(userId); // 사용자 ID
|
||||
$("#schRgtrNm--${pageName}").val(userNm); // 사용자 명
|
||||
}
|
||||
|
||||
// 사용자검색 버튼 클릭 이벤트
|
||||
$P.fnGetFindUser = () => {
|
||||
let params = {
|
||||
openerPageName: "${pageName}"
|
||||
, callbackFuncName: "pageObject['${pageName}']['callbackFindUser']"
|
||||
}
|
||||
|
||||
ajax.get({
|
||||
url: wctx.url("/user/user02/010/main.do") + "?openerPageName=${pageName}"
|
||||
, data: params || {}
|
||||
, success: resp => {
|
||||
dialog.open({
|
||||
id: "userDialog--${pageName}"
|
||||
, title: "사용자 검색"
|
||||
, content: resp
|
||||
, size: "lg"
|
||||
, init: () => { setDialogZindex(); }
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* element.on
|
||||
**************************************************************************/
|
||||
$('#btnReset--${pageName}').on('click', () => $P.fnReset());
|
||||
$('#btnSearch--${pageName}').on('click', () => $P.searchCrdnList());
|
||||
// 동적검색에서 엔터(Enter) 키를 누르면 검색한다.
|
||||
$("#term--${pageName}").onEnterPress($P.searchCrdnList);
|
||||
$('#btnExcel--${pageName}').on('click', () => $P.fnExcelDown(false));
|
||||
$('#btnExcelForApproval--${pageName}').on('click', () => $P.fnExcelDown(true));
|
||||
$("#btnFindUser--${pageName}").on("click", () => $P.fnGetFindUser()); // 사용자 검색
|
||||
fnMakeResizableTable($("#table-responsive--${pageName}")[0]);
|
||||
fnMakeScrollableTable($("#table-responsive--${pageName}")[0], $P.scrollCrdnList);
|
||||
|
||||
/**************************************************************************
|
||||
* 초기화
|
||||
**************************************************************************/
|
||||
initDatepicker("frmSearch--${pageName}"); //달력 초기화
|
||||
initDetailSearchButton("frmSearch--${pageName}");
|
||||
|
||||
var defaultBizValue = $("#layout-navbar input[name='taskSeCd']:checked").val();
|
||||
if("${taskSeCd}" == ""){
|
||||
$("#frmSearch--${pageName} input[name='taskSeCd'][value='" + defaultBizValue + "']").prop("checked",true);
|
||||
$P.fnResetAndChangeBiz(defaultBizValue);
|
||||
} else {
|
||||
$("#frmSearch--${pageName} input[name='taskSeCd'][value='" + "${taskSeCd}" + "']").prop("checked",true);
|
||||
$P.fnResetAndChangeBiz("${taskSeCd}");
|
||||
}
|
||||
|
||||
fn_securityModeToggle($("#securityMode--top").is(":checked")); //보안모드
|
||||
|
||||
$("#frmSearch--${pageName} input[name='taskSeCd']").each(function(i) {
|
||||
$(this).prop("disabled", "true");
|
||||
});
|
||||
});
|
||||
|
||||
</script>
|
||||
@ -1,486 +0,0 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
|
||||
<c:set var="prefixName" scope="request">단속 자료 수정</c:set>
|
||||
|
||||
<!-- inner page html -->
|
||||
<div class="content-pop">
|
||||
<!-- Content -->
|
||||
<div class="container-xxl flex-grow-1 px-0">
|
||||
|
||||
<!-- Page Body -->
|
||||
<div class="card">
|
||||
<!-- 입력 영역 -->
|
||||
<form id="frmEdit--${pageName}" name="frmEdit">
|
||||
<!-- hidden -->
|
||||
<input type="hidden" id="sggCd--${pageName}" name="sggCd" data-map="SGG_CD" />
|
||||
<input type="hidden" id="taskSeCd--${pageName}" name="taskSeCd" data-map="TASK_SE_CD" />
|
||||
<input type="hidden" id="crdnId--${pageName}" name="crdnId" data-map="CRDN_ID" />
|
||||
|
||||
<div class="row g-1">
|
||||
<!-- 단속 일자 -->
|
||||
<div class="col-md-6">
|
||||
<label for="crdnYmd--${pageName}"
|
||||
class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end required">단속일자</label>
|
||||
<input type="text" id="crdnYmd--${pageName}" name="crdnYmd"
|
||||
class="form-control form-date" data-map="CRDN_YMD"
|
||||
data-fmt-type="day" maxlength="10" required />
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
</div>
|
||||
<!-- 단속 시간 -->
|
||||
<div class="col-md-6">
|
||||
<label for="crdnTm--${pageName}"
|
||||
class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end required">단속시간</label>
|
||||
<input type="text" id="crdnTm--${pageName}" name="crdnTm"
|
||||
class="form-control form-time" data-map="CRDN_TM"
|
||||
data-fmt-type="time" maxlength="8" required placeholder="시:분:초" />
|
||||
</div>
|
||||
<!-- 차량번호 -->
|
||||
<div class="col-md-6">
|
||||
<label for="vhrno--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">차량번호</label>
|
||||
<input type="text" id="vhrno--${pageName}" name="vhrno" class="form-control w-30" data-map="VHRNO" />
|
||||
<button type="button" id="btnVehicle--${pageName}" class="btn btn-sm btn-outline-dark" title="차량 검색">조회</button>
|
||||
</div>
|
||||
<!-- 위반 내용 -->
|
||||
<div class="col-md-6">
|
||||
<label for="vltnCd--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">위반내용</label>
|
||||
<select class="form-select w-px-200" id="vltnCd--${pageName}" name="vltnCd" data-map="VLTN_CD">
|
||||
<c:forEach items="${VLTNList}" var="item">
|
||||
<option value="${item.code}">${item.value}</option>
|
||||
</c:forEach>
|
||||
</select>
|
||||
</div>
|
||||
<!-- 법정동 -->
|
||||
<div class="col-md-6 select2-primary">
|
||||
<label for="crdnStdgNm--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">법정동</label>
|
||||
<input type="text" id="crdnStdgNm--${pageName}" name="crdnStdgNm"
|
||||
class="form-control w-40" data-map="CRDN_STDG_NM" list="stdgNmList--${pageName}" />
|
||||
<datalist id="stdgNmList--${pageName}">
|
||||
<c:forEach items="${stdgNmList}" var="item">
|
||||
<option value="${item}"></option>
|
||||
</c:forEach>
|
||||
</datalist>
|
||||
</div>
|
||||
<!-- 도로명 -->
|
||||
<div class="col-md-6 select2-primary">
|
||||
<label for="crdnRoadNm--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">도로명</label>
|
||||
<input type="text" id="crdnRoadNm--${pageName}" name="crdnRoadNm"
|
||||
class="form-control w-40" data-map="CRDN_ROAD_NM" />
|
||||
</div>
|
||||
<!-- 단속 장소 -->
|
||||
<div class="col-md-12">
|
||||
<label for="crdnPlc--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">단속장소</label>
|
||||
<input type="text" id="crdnPlc--${pageName}" name="crdnPlc"
|
||||
class="form-control w-80" data-map="CRDN_PLC" data-maxlengthb="200" />
|
||||
</div>
|
||||
<!-- 상세 단속 장소 -->
|
||||
<div class="col-md-12" slot="edit">
|
||||
<template class="bpv">
|
||||
<slot>
|
||||
<label for="dtlCrdnPlc--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">상세단속장소</label>
|
||||
<input type="text" id="dtlCrdnPlc--${pageName}" name="dtlCrdnPlc"
|
||||
class="form-control w-80" data-map="DTL_CRDN_PLC" data-maxlenghb="200" />
|
||||
</slot>
|
||||
</template>
|
||||
</div>
|
||||
<div class="col-md-6" slot="edit">
|
||||
<template class="pvs">
|
||||
<slot>
|
||||
<label for="crdnSpareaCd--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">특별구역</label>
|
||||
<select id="crdnSpareaCd--${pageName}" name="crdnSpareaCd"
|
||||
class="form-select" data-map="CRDN_SPAREA_CD">
|
||||
<c:forEach items="${FIM007List}" var="item">
|
||||
<option value="${item.code}">${item.value}</option>
|
||||
</c:forEach>
|
||||
</select>
|
||||
</slot>
|
||||
</template>
|
||||
</div>
|
||||
<div class="col-md-6" slot="edit">
|
||||
<template class="pvs">
|
||||
<slot>
|
||||
<label for="ovtmYn--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">2시간초과</label>
|
||||
<select class="form-select" id="ovtmYn--${pageName}" name="ovtmYn" data-map="OVTM_YN" required>
|
||||
<c:forEach items="${CMN006List}" var="item">
|
||||
<option value="${item.code}">${item.value}</option>
|
||||
</c:forEach>
|
||||
</select>
|
||||
</slot>
|
||||
</template>
|
||||
</div>
|
||||
<!-- 기타 내용 -->
|
||||
<div class="col-md-12">
|
||||
<label for="etcCn--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">특기사항</label>
|
||||
<input type="text" id="etcCn--${pageName}" name="etcCn"
|
||||
class="form-control w-80" data-map="ETC_CN" data-maxlengthb="1000" />
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<label for="vin--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">차대번호</label>
|
||||
<input type="text" id="vin--${pageName}" name="vin"
|
||||
class="form-control" data-map="VIN" readonly placeholder="입력항목이 아닙니다." />
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<label for="vhclNm--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">차량명칭</label>
|
||||
<input type="text" id="vhclNm--${pageName}" name="vhclNm"
|
||||
class="form-control" data-map="VHCL_NM" readonly placeholder="입력항목이 아닙니다." />
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<label for="vhclColr--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">차량색상</label>
|
||||
<input type="text" id="vhclColr--${pageName}" name="vhclColr"
|
||||
class="form-control" data-map="VHCL_COLR" readonly placeholder="입력항목이 아닙니다." />
|
||||
</div>
|
||||
<div class="col-md-12" slot="edit">
|
||||
<template class="pvs bpv">
|
||||
<slot>
|
||||
<label for="ffnlgCarmdlCd--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">차종</label>
|
||||
<select id="ffnlgCarmdlCd--${pageName}" name="ffnlgCarmdlCd" class="form-select" data-map="FFNLG_CARMDL_CD">
|
||||
<option value=""></option>
|
||||
<c:forEach items="${FIM009List}" var="item">
|
||||
<option value="${item.code}">${item.value}</option>
|
||||
</c:forEach>
|
||||
</select>
|
||||
</slot>
|
||||
</template>
|
||||
</div>
|
||||
<div class="col-md-12" slot="edit">
|
||||
<template class="eca">
|
||||
<slot>
|
||||
<label for="useFuelCd--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">연료구분</label>
|
||||
<select id="useFuelCd--${pageName}" class="form-select" name="useFuelCd" data-map="USE_FUEL_CD" disabled>
|
||||
<option value=""></option>
|
||||
<c:forEach items="${LVS005List}" var="item">
|
||||
<option value="${item.code}">${item.value}</option>
|
||||
</c:forEach>
|
||||
</select>
|
||||
</slot>
|
||||
</template>
|
||||
</div>
|
||||
<div class="col-md-6" slot="edit">
|
||||
<template class="dpv eca pvs">
|
||||
<slot>
|
||||
<label for="towngYn--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">견인지시</label>
|
||||
<select id="towngYn--${pageName}" name="towngYn" class="form-select w-px-120" data-map="TOWNG_YN">
|
||||
<c:forEach items="${FIM053List}" var="item">
|
||||
<option value="${item.code}">${item.value}</option>
|
||||
</c:forEach>
|
||||
</select>
|
||||
</slot>
|
||||
</template>
|
||||
</div>
|
||||
<div class="col-md-6" slot="edit">
|
||||
<template class="dpv eca pvs">
|
||||
<slot>
|
||||
<label for="crdnSn--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">단속일련번호</label>
|
||||
<input type="text" id="crdnSn--${pageName}" name="crdnSn"
|
||||
class="form-control" data-map="CRDN_SN" maxlength="20" data-maxlengthb="20" />
|
||||
</slot>
|
||||
</template>
|
||||
</div>
|
||||
<div class="col-md-6" slot="edit">
|
||||
<template class="dpv">
|
||||
<slot>
|
||||
<label for="prkPsbltyRsltCd--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">장애차량확인</label>
|
||||
<select id="prkPsbltyRsltCd--${pageName}" name="prkPsbltyRsltCd" class="form-select w-px-120" data-map="PRK_PSBLTY_RSLT_CD">
|
||||
<c:forEach items="${FIM034List}" var="item">
|
||||
<c:if test="${item.code == '0' or item.code == '1'}">
|
||||
<option value="${item.code}">${item.value}</option>
|
||||
</c:if>
|
||||
</c:forEach>
|
||||
</select>
|
||||
</slot>
|
||||
</template>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<!-- 입력 영역 -->
|
||||
|
||||
<!-- 업무 버튼 및 건수 표시 -->
|
||||
<div>
|
||||
<span class="container-page-btn">
|
||||
<!-- 업무 버튼 -->
|
||||
<span class="container-window-btn-right">
|
||||
<button type="button" id="btnSave--${pageName}" class="btn btn-primary w-px-80" title="저장">
|
||||
저장
|
||||
</button>
|
||||
</span>
|
||||
</span>
|
||||
</div> <!-- 업무 버튼 및 건수 표시 -->
|
||||
</div> <!-- <div class="card"> -->
|
||||
<!-- Page Body -->
|
||||
|
||||
</div> <!-- <div class="container flex-grow-1 px-0"> -->
|
||||
<!-- Content -->
|
||||
</div>
|
||||
<!-- / inner page html <div class="content-pop"> -->
|
||||
|
||||
<script>
|
||||
/**************************************************************************
|
||||
* Global Variable
|
||||
**************************************************************************/
|
||||
pageObject["${pageName}"] = {};
|
||||
|
||||
/**************************************************************************
|
||||
* script 진입
|
||||
**************************************************************************/
|
||||
$(document).ready(function() {
|
||||
// pageObject
|
||||
let $P = pageObject["${pageName}"];
|
||||
|
||||
// infoDialog 호출 용도(view 조회(편집불가), create 등록, update 수정)
|
||||
$P.callPurpose = "${callPurpose}";
|
||||
// FormFields
|
||||
$P.formFields = new FimsFormFields("#frmEdit--${pageName}");
|
||||
|
||||
/**************************************************************************
|
||||
* DatasetControl
|
||||
**************************************************************************/
|
||||
$P.control = new DatasetControl({
|
||||
prefix: "crdn"
|
||||
, prefixName: "단속"
|
||||
, keymapper: info => info ? info.CRDN_ID : ""
|
||||
, dataGetter: obj => obj.crdnInfo
|
||||
});
|
||||
|
||||
/**************************************************************************
|
||||
* DatasetControl 이벤트
|
||||
**************************************************************************/
|
||||
$P.control.onCurrentChange = (item) => {
|
||||
if (!item) return;
|
||||
|
||||
// 1. 업무별 입력 항목
|
||||
$P.fnRenderTask(item.data.TASK_SE_CD);
|
||||
|
||||
// 2. Dataset 셋팅
|
||||
$P.formFields.set($P.control, item);
|
||||
|
||||
// 3. 업무구분에 따른 URL 변경
|
||||
$P.fnSetURL(item.data.TASK_SE_CD);
|
||||
}
|
||||
|
||||
// 저장 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
|
||||
, init: function() {
|
||||
setDialogZindex();
|
||||
focusClose();
|
||||
}
|
||||
});
|
||||
|
||||
if (resp.saved) {
|
||||
dialog.close($P.control.prefix + "Dialog--${openerPageName}");
|
||||
}
|
||||
}
|
||||
|
||||
// 저장
|
||||
$P.control.save = (info) => {
|
||||
if (!info) return;
|
||||
|
||||
ajax.post({
|
||||
url: $P.control.urls.update
|
||||
, data: info || {}
|
||||
, success: resp => $P.control.onSave(resp)
|
||||
});
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 사용자 함수(function)
|
||||
**************************************************************************/
|
||||
// 업무별 입력 항목
|
||||
$P.fnRenderTask = (taskSeCd) => {
|
||||
if (taskSeCd == undefined || taskSeCd == null || taskSeCd == "") {
|
||||
taskSeCd = $("#taskSeCd--${pageName}").val();
|
||||
}
|
||||
|
||||
renderForTask("frmEdit--${pageName}", taskSeCd.toLowerCase());
|
||||
}
|
||||
|
||||
// 업무구분에 따른 URL 설정
|
||||
$P.fnSetURL = (taskSeCd) => {
|
||||
$P.control.urls.update = wctx.url("/" + taskSeCd + "${infoPrefixUrl}" + "/020/update.do"); // 수정
|
||||
}
|
||||
|
||||
// 차적 조회
|
||||
$P.fnGetVehicle = (params) => {
|
||||
if (!params) return;
|
||||
|
||||
json.post({
|
||||
url: wctx.url("/payer/vehicle.do")
|
||||
, data: params || {}
|
||||
, success: resp => {
|
||||
// 항목 초기화
|
||||
$("#vin--${pageName}").val("");
|
||||
$("#vhclNm--${pageName}").val("");
|
||||
$("#vhclColr--${pageName}").val("");
|
||||
$("#useFuelCd--${pageName}").val("");
|
||||
$("#ffnlgCarmdlCd--${pageName}").val("");
|
||||
|
||||
if (!resp.found) {
|
||||
dialog.alert({
|
||||
content: "차량 정보가 없습니다.",
|
||||
init: function() {
|
||||
setDialogZindex();
|
||||
focusClose();
|
||||
}
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
let vehicle = resp.vehicle;
|
||||
|
||||
// 단속(TB_CRDN) - 공통 항목
|
||||
$("#vin--${pageName}").val(vehicle.vin); // 차대번호
|
||||
$("#vhclNm--${pageName}").val(vehicle.cnm); // 차량명
|
||||
$("#vhclColr--${pageName}").val(vehicle.color_nm); // 차량색상
|
||||
|
||||
// 단속 부가 정보(TB_CRDN_ADI) - 사용 연료 코드
|
||||
$("#useFuelCd--${pageName}").val(vehicle.use_fuel_code);
|
||||
|
||||
// 단속 부가 정보(TB_CRDN_ADI) - 과태료 차종 코드
|
||||
if (vehicle.vhcty_asort_code == "1") { // 승용
|
||||
$("#ffnlgCarmdlCd--${pageName}").val("11");
|
||||
} else if (vehicle.vhcty_asort_code == "2") { // 승합
|
||||
$("#ffnlgCarmdlCd--${pageName}").val("12");
|
||||
} else if (vehicle.vhcty_asort_code == "3") { // 화물
|
||||
if(vehicle.mxmm_ldg <= 4000){
|
||||
$("#ffnlgCarmdlCd--${pageName}").val("13");
|
||||
} else {
|
||||
$("#ffnlgCarmdlCd--${pageName}").val("14");
|
||||
}
|
||||
} else if (vehicle.vhcty_asort_code == "4") { // 특수
|
||||
$("#ffnlgCarmdlCd--${pageName}").val("15");
|
||||
} else {
|
||||
$("#ffnlgCarmdlCd--${pageName}").val("");
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// 차적 조회
|
||||
$P.fnVehicle = (title) => {
|
||||
let crdnYmd = $("#crdnYmd--${pageName}").val().replaceAll("-", "");
|
||||
let vhrno = $("#vhrno--${pageName}").val();
|
||||
|
||||
// 단속일자
|
||||
if (crdnYmd == "") {
|
||||
dialog.alert({
|
||||
content: "단속일자를 입력하세요.",
|
||||
init: function() {
|
||||
setDialogZindex();
|
||||
focusClose();
|
||||
},
|
||||
onClose : function() { $("#crdnYmd--${pageName}").focus(); }
|
||||
});
|
||||
return;
|
||||
}
|
||||
// 차량번호
|
||||
if (vhrno == "") {
|
||||
dialog.alert({
|
||||
content: "차량번호를 입력하세요.",
|
||||
init: function() {
|
||||
setDialogZindex();
|
||||
focusClose();
|
||||
},
|
||||
onClose : function() { $("#vhrno--${pageName}").focus(); }
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
let params = {
|
||||
inqire_se_code : "3"
|
||||
, sggCd: $("#sggCd--${pageName}").val()
|
||||
, levy_stdde: crdnYmd
|
||||
, vhrno: vhrno
|
||||
}
|
||||
|
||||
$P.fnGetVehicle(params);
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 버튼 clickEvent
|
||||
**************************************************************************/
|
||||
// 저장
|
||||
$P.fnSave = () => {
|
||||
// validate 확인
|
||||
if (!customValidate($("#frmEdit--${pageName}").find("input, select, textarea"))) return;
|
||||
|
||||
// 단속 ID
|
||||
let crdnId = $P.control.dataset.getValue("CRDN_ID");
|
||||
// 단속 ID 가 없다면.. return
|
||||
if (typeof crdnId == "undefined" || crdnId == null || crdnId == "") return;
|
||||
|
||||
dialog.alert({
|
||||
content: "현재 " + $P.control.prefixName + " 정보를 저장하시겠습니까?"
|
||||
, init: function() {
|
||||
setDialogZindex();
|
||||
focusOK();
|
||||
}, 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);
|
||||
}
|
||||
});
|
||||
});
|
||||
$("#frmEdit--${pageName}").find(".form-time").each(function() {
|
||||
$(this).on("input",function() {
|
||||
let value = this.value.replaceAll(":", "");
|
||||
|
||||
if (value.length > 5) {
|
||||
this.value = value.substring(0,2) + ":" + value.substring(2,4) + ":" + value.substring(4);
|
||||
} else if (value.length > 3) {
|
||||
this.value = value.substring(0,2) + ":" + value.substring(2);
|
||||
}
|
||||
|
||||
});
|
||||
});
|
||||
|
||||
// 차량번호 엔터 이벤트
|
||||
$("#vhrno--${pageName}").onEnterPress(function() {
|
||||
$P.fnVehicle("차적 조회");
|
||||
});
|
||||
|
||||
// 버튼 이벤트
|
||||
$("#btnVehicle--${pageName}").on("click", () => $P.fnVehicle()); // 차량번호 조회
|
||||
$("#btnSave--${pageName}").on("click", () => $P.fnSave()); // 저장
|
||||
}
|
||||
|
||||
// 초기 화면 설정
|
||||
$P.initForm = () => {
|
||||
// 달력 초기화
|
||||
initDatepicker("frmEdit--${pageName}");
|
||||
$("#crdnYmd--${pageName}").datepicker("setDate", TODAY());
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 최초 실행 함수
|
||||
**************************************************************************/
|
||||
// 1. 이벤트 설정
|
||||
$P.setEvent();
|
||||
|
||||
// 2. 초기 화면 설정
|
||||
$P.initForm();
|
||||
|
||||
// 3. Dataset 설정
|
||||
$P.control.setData([${crdnInfo}]);
|
||||
});
|
||||
|
||||
</script>
|
||||
@ -1,182 +0,0 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
|
||||
<c:set var="prefixName" scope="request">단속 상태 정보</c:set>
|
||||
|
||||
<!-- inner page html -->
|
||||
<div class="content-pop">
|
||||
<!-- Content -->
|
||||
<div class="container-xxl flex-grow-1 px-0">
|
||||
|
||||
<!-- Page Body -->
|
||||
<div class="card">
|
||||
<!-- 입력 영역 -->
|
||||
<form id="frmEdit--${pageName}" name="frmEdit">
|
||||
<!-- hidden -->
|
||||
<input type="hidden" id="sggCd--${pageName}" name="sggCd" data-map="SGG_CD" />
|
||||
<input type="hidden" id="taskSeCd--${pageName}" name="taskSeCd" data-map="TASK_SE_CD" />
|
||||
<input type="hidden" id="crdnId--${pageName}" name="crdnId" data-map="CRDN_ID" />
|
||||
|
||||
<div class="row g-1">
|
||||
<!-- 단속 처리 상태 코드 -->
|
||||
<div class="col-md-12">
|
||||
<label for="crdnSttsCd--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end required">처리상태</label>
|
||||
<select id="crdnSttsCd--${pageName}" name="crdnSttsCd" class="form-select" data-map="CRDN_STTS_CD" required>
|
||||
<option value="">선택하세요</option>
|
||||
<c:forEach items="${FIM010List}" var="item">
|
||||
<option value="${item.code}">${item.value}</option>
|
||||
</c:forEach>
|
||||
</select>
|
||||
</div>
|
||||
<!-- 기타 내용 --> <!-- DB에 등록할 때 문구가 추가로 붙기 때문에 data-maxlengthb="940" 으로 지정 -->
|
||||
<div class="col-md-12">
|
||||
<label for="etcCn--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">기타내용</label>
|
||||
<input type="text" class="form-control w-85" id="etcCn--${pageName}" name="etcCn" data-maxlengthb="940" />
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<!-- 입력 영역 -->
|
||||
|
||||
<!-- 업무 버튼 및 건수 표시 -->
|
||||
<div>
|
||||
<span class="container-page-btn">
|
||||
<!-- 업무 버튼 -->
|
||||
<span class="container-window-btn-right">
|
||||
<button type="button" id="btnSave--${pageName}" class="btn btn-primary w-px-80" title="저장">
|
||||
저장
|
||||
</button>
|
||||
</span>
|
||||
</span>
|
||||
</div> <!-- 업무 버튼 및 건수 표시 -->
|
||||
</div> <!-- <div class="card"> -->
|
||||
<!-- Page Body -->
|
||||
|
||||
</div> <!-- <div class="container flex-grow-1 px-0"> -->
|
||||
<!-- Content -->
|
||||
</div>
|
||||
<!-- / inner page html <div class="content-pop"> -->
|
||||
|
||||
<script>
|
||||
/**************************************************************************
|
||||
* Global Variable
|
||||
**************************************************************************/
|
||||
pageObject["${pageName}"] = {};
|
||||
|
||||
/**************************************************************************
|
||||
* script 진입
|
||||
**************************************************************************/
|
||||
$(document).ready(function() {
|
||||
// pageObject
|
||||
let $P = pageObject["${pageName}"];
|
||||
|
||||
// infoDialog 호출 용도(view 조회(편집불가), create 등록, update 수정)
|
||||
$P.callPurpose = "${callPurpose}";
|
||||
// FormFields
|
||||
$P.formFields = new FimsFormFields("#frmEdit--${pageName}");
|
||||
|
||||
/**************************************************************************
|
||||
* DatasetControl
|
||||
**************************************************************************/
|
||||
$P.control = new DatasetControl({
|
||||
prefix: "crdnSttsCd"
|
||||
, prefixName: "단속처리상태"
|
||||
, keymapper: info => info ? info.CRDN_ID : ""
|
||||
, dataGetter: obj => obj.${infoPrefix}Info
|
||||
});
|
||||
|
||||
/**************************************************************************
|
||||
* DatasetControl 이벤트
|
||||
**************************************************************************/
|
||||
// 현재 선택 자료 변경 이벤트
|
||||
$P.control.onCurrentChange = (item) => {
|
||||
if (!item) return;
|
||||
|
||||
// Dataset 셋팅
|
||||
$P.formFields.set($P.control, item);
|
||||
|
||||
// 업무구분에 따른 URL 변경
|
||||
$P.fnSetURL(item.data.TASK_SE_CD);
|
||||
}
|
||||
|
||||
// 저장 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
|
||||
, init: function() {
|
||||
setDialogZindex();
|
||||
focusClose();
|
||||
}
|
||||
});
|
||||
|
||||
if (resp.saved) {
|
||||
dialog.close($P.control.prefix + "Dialog--${openerPageName}");
|
||||
}
|
||||
}
|
||||
|
||||
// 저장
|
||||
$P.control.save = (info) => {
|
||||
if (!info) return;
|
||||
|
||||
ajax.post({
|
||||
url: $P.control.urls.update
|
||||
, data: info || {}
|
||||
, success: resp => $P.control.onSave(resp)
|
||||
});
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 사용자 함수(function)
|
||||
**************************************************************************/
|
||||
// 업무구분에 따른 URL 설정
|
||||
$P.fnSetURL = (taskSeCd) => {
|
||||
$P.control.urls.update = wctx.url("/" + taskSeCd + "${infoPrefixUrl}" + "/030/update.do"); // 수정
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 버튼 clickEvent
|
||||
**************************************************************************/
|
||||
// 저장 버튼 클릭 이벤트
|
||||
$P.fnSave = (title) => {
|
||||
// validate 확인
|
||||
if (!customValidate($("#frmEdit--${pageName}").find("input, select, textarea"))) return;
|
||||
|
||||
dialog.alert({
|
||||
content: "현재 " + $P.control.prefixName + " 정보를 저장하시겠습니까?"
|
||||
, init: function() { focusOK(); }
|
||||
, onOK: () => {
|
||||
$P.control.save($P.formFields.get()); // formFields
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 초기 셋팅
|
||||
**************************************************************************/
|
||||
// 이벤트 설정
|
||||
$P.setEvent = () => {
|
||||
// 버튼 이벤트
|
||||
$("#btnSave--${pageName}").on("click", () => $P.fnSave()); // 저장
|
||||
}
|
||||
|
||||
// 초기 화면 설정
|
||||
$P.initForm = () => {
|
||||
//
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 최초 실행 함수
|
||||
**************************************************************************/
|
||||
// 1. 이벤트 설정
|
||||
$P.setEvent();
|
||||
|
||||
// 2. 초기 화면 설정
|
||||
$P.initForm();
|
||||
|
||||
// 3. Dataset 설정
|
||||
$P.control.setData([${crdnSttsCdInfo}]);
|
||||
});
|
||||
|
||||
</script>
|
||||
@ -1,511 +0,0 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
<c:set var="pageKorName" scope="request">단속팀 관리</c:set>
|
||||
<div class="content-wrapper">
|
||||
<div class="container-xxl flex-grow-1 px-0">
|
||||
<div class="card wrapper-list">
|
||||
|
||||
<!-- 조회조건 -->
|
||||
<div class="container-page-btn">
|
||||
<button type="button" id="btnReset--${pageName}" class="btn btn-outline-dark w-px-120" title="초기화">
|
||||
초기화
|
||||
</button>
|
||||
<span class="container-window-btn-right">
|
||||
<button type="button" id="btnSearch--${pageName}" class="btn btn-search w-px-120" title="검색">
|
||||
검색
|
||||
</button>
|
||||
</span>
|
||||
</div>
|
||||
<form id="frmSearch--${pageName}" name="frmSearch">
|
||||
<div class="container-search">
|
||||
<div class="row g-1">
|
||||
<div class="col-6">
|
||||
<span class="form-label fw-bold form-search-title w-px-120 text-end">업무구분</span>
|
||||
<span class="form-search-linebox">
|
||||
<c:forEach items="${FIM054List}" var="item">
|
||||
<c:if test="${item.code == 'PVS' or item.code == 'BPV'}">
|
||||
<label>
|
||||
<input name="taskSeCd" type="radio" value="${item.code}"
|
||||
class="form-check-input" alt="업무구분"
|
||||
onchange="pageObject['${pageName}'].fnResetAndChangeBiz(this.value);">
|
||||
${item.value}
|
||||
</label>
|
||||
</c:if>
|
||||
</c:forEach>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<!-- 리스트 -->
|
||||
<div>
|
||||
<span class="container-page-btn">
|
||||
<div class="d-flex flex-row justify-content-between">
|
||||
<span id="useTeamPaging--${pageName}PagingInfo" class="dataTables_info"
|
||||
role="status" aria-live="polite"></span>
|
||||
<ul id="useTeamPaging--${pageName}" class="pagination pagination-primary">
|
||||
</ul>
|
||||
</div>
|
||||
</span>
|
||||
</div>
|
||||
<div class="card-datatable text-nowrap">
|
||||
<div class="dataTables_wrapper dt-bootstrap5 no-footer">
|
||||
<div id="table-responsive_0--${pageName}" class="table-responsive ox-scroll oy-scroll h-px-300">
|
||||
<table id="DataTables_Table_0--${pageName}"
|
||||
class="table-layout-fixed datatables-ajax table table-bordered dataTable no-footer">
|
||||
<thead class="sticky-thead">
|
||||
<tr id="useTeamTheadTr--${pageName}">
|
||||
<th style="width: 160px;">단속조</th>
|
||||
<th style="width: 160px;">단속구분</th>
|
||||
<th style="width: 160px;">단속원1</th>
|
||||
<th style="width: 160px;">단속원2</th>
|
||||
<th style="width: 160px;">단속원3</th>
|
||||
<th style="width: 160px;">단속원4</th>
|
||||
<th style="width: 400px;">특이사항</th>
|
||||
<th style="width: 180px;">등록일시</th>
|
||||
<th class="dummy-th"></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="useTeamTbody--${pageName}"></tbody>
|
||||
<template id="useTeamRow--${pageName}">
|
||||
<tr data-key="{TEAM_ID}">
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-start">{TEAM_NM}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-start">{CRDN_SE_CD}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-start">{TEAMER_1}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-start">{TEAMER_2}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-start">{TEAMER_3}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-start">{TEAMER_4}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-start">{ETC_CN}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-center">{REG_DT}</td>
|
||||
<td class="dummy-td"></td>
|
||||
</tr>
|
||||
</template>
|
||||
<template id="useTeamNotFound--${pageName}">
|
||||
<tr>
|
||||
<td valign="top" colspan="9" class="dataTables_empty text-center">
|
||||
단속팀 정보를 찾지 못했습니다.
|
||||
</td>
|
||||
</tr>
|
||||
</template>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 입력, 수정 -->
|
||||
<div class="card">
|
||||
<form id="frmEdit--${pageName}">
|
||||
|
||||
<div class="row g-1">
|
||||
<div class="col-md-3">
|
||||
<label for="teamNm--${pageName}"
|
||||
class="w-px-130 bg-lighter pe-2 col-form-label text-sm-end required">
|
||||
단속조명
|
||||
</label>
|
||||
<input type="text" id="teamNm--${pageName}" name="teamNm" class="form-control"
|
||||
data-maxlengthb="20" required />
|
||||
</div>
|
||||
<div class="col-md-9">
|
||||
<label for="teamNm--${pageName}" class="w-px-130 bg-lighter pe-2 col-form-label text-sm-end">
|
||||
단속구분
|
||||
</label>
|
||||
<select id="crdnSeCd--${pageName}" name="crdnSeCd" class="form-select">
|
||||
<option value=""></option>
|
||||
<c:forEach items="${FIM002List}" var="item">
|
||||
<option value="${item.code}">${item.value}</option>
|
||||
</c:forEach>
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-md-3">
|
||||
<label for="teamer1--${pageName}" class="w-px-130 bg-lighter pe-2 col-form-label text-sm-end">
|
||||
단속원1
|
||||
</label>
|
||||
<input type="text" id="teamer1--${pageName}" name="teamer1" class="form-control"
|
||||
data-maxlengthb="20" />
|
||||
</div>
|
||||
<div class="col-md-3">
|
||||
<label for="teamer2--${pageName}" class="w-px-130 bg-lighter pe-2 col-form-label text-sm-end">
|
||||
단속원2
|
||||
</label>
|
||||
<input type="text" id="teamer2--${pageName}" name="teamer2" class="form-control"
|
||||
data-maxlengthb="20" />
|
||||
</div>
|
||||
<div class="col-md-3">
|
||||
<label for="teamer3--${pageName}" class="w-px-130 bg-lighter pe-2 col-form-label text-sm-end">
|
||||
단속원3
|
||||
</label>
|
||||
<input type="text" id="teamer3--${pageName}" name="teamer3" class="form-control"
|
||||
data-maxlengthb="20" />
|
||||
</div>
|
||||
<div class="col-md-3">
|
||||
<label for="teamer4--${pageName}" class="w-px-130 bg-lighter pe-2 col-form-label text-sm-end">
|
||||
단속원4
|
||||
</label>
|
||||
<input type="text" id="teamer4--${pageName}" name="teamer4" class="form-control"
|
||||
data-maxlengthb="20" />
|
||||
</div>
|
||||
<div class="col-md-12">
|
||||
<label for="etcCn--${pageName}" class="w-px-130 bg-lighter pe-2 col-form-label text-sm-end">
|
||||
특이사항
|
||||
</label>
|
||||
<input type="text" id="etcCn--${pageName}" name="etcCn"
|
||||
class="form-control w-px-700" data-maxlengthb="1000" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mt-4 justify-content-end mb-3">
|
||||
<div class="col-md-6">
|
||||
<div class="row justify-content-end">
|
||||
<div class="col-sm-3">
|
||||
<button type="button" id="btnSave--${pageName}" class="btn btn-primary">저장</button>
|
||||
<button type="button" id="btnRemove--${pageName}" class="btn btn-primary">삭제</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<!-- 비사용 리스트 -->
|
||||
<div class="container-search">
|
||||
<div class="row g-1">
|
||||
<div class="col-6">
|
||||
<label for="deletedTeamNm--${pageName}" class="form-label fw-bold form-search-title">
|
||||
선택된 단속조
|
||||
</label>
|
||||
<span class="form-search-linebox">
|
||||
<input type="text" id="deletedTeamNm--${pageName}" name="deletedTeamNm"
|
||||
class="form-control" />
|
||||
<button type="button" id="btnShowDeleted--${pageName}" class="btn btn-search">
|
||||
비사용 단속조 조회
|
||||
</button>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-datatable text-nowrap">
|
||||
<div class="dataTables_wrapper dt-bootstrap5 no-footer">
|
||||
<div id="table-responsive_1--${pageName}" class="table-responsive ox-scroll oy-scroll h-px-300">
|
||||
<table id="DataTables_Table_1--${pageName}"
|
||||
class="table-layout-fixed datatables-ajax table table-bordered dataTable no-footer">
|
||||
<thead class="sticky-thead">
|
||||
<tr id="delTeamTheadTr--${pageName}">
|
||||
<th style="width: 200px;">단속조</th>
|
||||
<th style="width: 200px;">단속구분</th>
|
||||
<th style="width: 200px;">단속원1</th>
|
||||
<th style="width: 200px;">단속원2</th>
|
||||
<th style="width: 200px;">단속원3</th>
|
||||
<th style="width: 200px;">단속원4</th>
|
||||
<th style="width: 200px;">특이사항</th>
|
||||
<th style="width: 200px;">등록일</th>
|
||||
<th style="width: 200px;">해체일</th>
|
||||
<th class="dummy-th"></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="delTeamTbody--${pageName}"></tbody>
|
||||
<template id="delTeamRow--${pageName}">
|
||||
<tr data-key="{TEAM_ID}">
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-start">{TEAM_NM}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-start">{CRDN_SE_CD}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-start">{TEAMER_1}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-start">{TEAMER_2}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-start">{TEAMER_3}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-start">{TEAMER_4}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-start">{ETC_CN}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-center">{REG_DT}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-center">{MDFCN_DT}</td>
|
||||
<td class="dummy-td"></td>
|
||||
</tr>
|
||||
</template>
|
||||
<template id="delTeamNotFound--${pageName}">
|
||||
<tr>
|
||||
<td valign="top" colspan="10" class="dataTables_empty text-center">
|
||||
조회된 정보가 없습니다.
|
||||
</td>
|
||||
</tr>
|
||||
</template>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="content-backdrop fade"></div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
/**************************************************************************
|
||||
* Global Variable
|
||||
**************************************************************************/
|
||||
|
||||
pageObject["${pageName}"] = {};
|
||||
var FIM071 = new CommonCodes(${FIM071});
|
||||
var FIM002 = new CommonCodes(${FIM002});
|
||||
|
||||
$(document).ready(function(){
|
||||
|
||||
var $P = pageObject["${pageName}"];
|
||||
|
||||
/**************************************************************************
|
||||
* DatasetControl
|
||||
**************************************************************************/
|
||||
$P.useTeamControl = new DatasetControl({
|
||||
dataGetter : obj => obj["List"], appendData:false,
|
||||
keymapper : info => info ? info.TEAM_ID : "",
|
||||
urls : {
|
||||
load : "",
|
||||
remove : "",
|
||||
save : ""
|
||||
},
|
||||
formats: {
|
||||
OGDP_SE_CD : FIM071,
|
||||
CRDN_SE_CD : FIM002,
|
||||
REG_DT : datetimeFormat,
|
||||
MDFCN_DT : datetimeFormat,
|
||||
DEL_DT : datetimeFormat
|
||||
}
|
||||
});
|
||||
|
||||
$P.delTeamControl = new DatasetControl({
|
||||
dataGetter : obj => obj["List"], appendData: false,
|
||||
keymapper : info => info ? info.TEAM_ID : "",
|
||||
urls : { },
|
||||
formats: {
|
||||
OGDP_SE_CD : FIM071,
|
||||
CRDN_SE_CD : FIM002,
|
||||
REG_DT : datetimeFormat,
|
||||
MDFCN_DT : datetimeFormat,
|
||||
DEL_DT : datetimeFormat
|
||||
}
|
||||
});
|
||||
|
||||
/**************************************************************************
|
||||
* Dataset.on
|
||||
**************************************************************************/
|
||||
$P.useTeamControl.dataset.onDatasetChange = (obj, option) => {
|
||||
|
||||
var t = $P.getGridTemplate("useTeam");
|
||||
var trs = Apply.fromDataset.getTbody($P.useTeamControl.dataset, t.found, t.notFound, t.replacer);
|
||||
$P.renderUseTeamList(obj["Total"], $P.useTeamControl.dataset.length, trs);
|
||||
|
||||
Apply.fromDataset.paging($P.useTeamControl.dataset, obj, "useTeamPaging--${pageName}");
|
||||
};
|
||||
|
||||
$P.delTeamControl.dataset.onDatasetChange = (obj, option) => {
|
||||
|
||||
var t = $P.getGridTemplate("delTeam");
|
||||
var trs = Apply.fromDataset.getTbody($P.delTeamControl.dataset, t.found, t.notFound, t.replacer);
|
||||
$P.renderDelTeamList(obj["Total"], $P.delTeamControl.dataset.length, trs);
|
||||
|
||||
};
|
||||
|
||||
$P.useTeamControl.dataset.onCurrentChange = (dataItem) => {
|
||||
if(!dataItem){
|
||||
$("#teamNm--${pageName}").val("");
|
||||
$("#crdnSeCd--${pageName}").val("");
|
||||
$("#teamer1--${pageName}").val("");
|
||||
$("#teamer2--${pageName}").val("");
|
||||
$("#teamer3--${pageName}").val("");
|
||||
$("#teamer4--${pageName}").val("");
|
||||
$("#etcCn--${pageName}").val("");
|
||||
return;
|
||||
}
|
||||
|
||||
Apply.fromDataset.currentRow($P.useTeamControl.dataset, dataItem, $("#useTeamTbody--${pageName}")[0]);
|
||||
|
||||
$("#teamNm--${pageName}").val(dataItem.data.TEAM_NM);
|
||||
$("#crdnSeCd--${pageName}").val(dataItem.data.CRDN_SE_CD);
|
||||
$("#teamer1--${pageName}").val(dataItem.data.TEAMER_1);
|
||||
$("#teamer2--${pageName}").val(dataItem.data.TEAMER_2);
|
||||
$("#teamer3--${pageName}").val(dataItem.data.TEAMER_3);
|
||||
$("#teamer4--${pageName}").val(dataItem.data.TEAMER_4);
|
||||
$("#etcCn--${pageName}").val(dataItem.data.ETC_CN);
|
||||
|
||||
$("#deletedTeamNm--${pageName}").val(dataItem.data.TEAM_NM);
|
||||
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* pageObject.function
|
||||
**************************************************************************/
|
||||
|
||||
$P.fnReset = () => {
|
||||
var searchForm = $("#frmSearch--${pageName}");
|
||||
searchForm.find("input[type='text']").val("");
|
||||
searchForm.find("input[type='hidden']").val("");
|
||||
|
||||
$P.useTeamControl.dataset.setData([]);
|
||||
|
||||
var editForm = $("#frmEdit--${pageName}");
|
||||
editForm.find("input[type='text']").val("");
|
||||
editForm.find("input[type='hidden']").val("");
|
||||
|
||||
$P.delTeamControl.dataset.setData([]);
|
||||
}
|
||||
|
||||
$P.fnResetAndChangeBiz = (taskSeCd) => {
|
||||
$P.fnReset();
|
||||
|
||||
$P.useTeamControl.urls.load = wctx.url("/"+taskSeCd+"/crdn/crdn07/010/list.do");
|
||||
$P.useTeamControl.urls.remove = wctx.url("/"+taskSeCd+"/crdn/crdn07/010/remove.do");
|
||||
$P.useTeamControl.urls.save = wctx.url("/"+taskSeCd+"/crdn/crdn07/010/save.do");
|
||||
}
|
||||
|
||||
$P.getParams = () => {
|
||||
var formFields = new FimsFormFields("#frmSearch--${pageName}");
|
||||
var data = formFields.get();
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
|
||||
$P.searchUseTeamList = () => {
|
||||
$P.useTeamControl.query = $P.getParams();
|
||||
$P.useTeamControl.load(1);
|
||||
}
|
||||
|
||||
$P.refreshUseTeamList = () => {
|
||||
if($P.useTeamControl.query.pageNum == null){
|
||||
$P.useTeamControl.query.pageNum = 1;
|
||||
}
|
||||
|
||||
$P.useTeamControl.load(1);
|
||||
}
|
||||
|
||||
$P.getGridTemplate = (gridType) => {
|
||||
var found;
|
||||
var notFound;
|
||||
var replacer;
|
||||
|
||||
if(gridType == "useTeam"){
|
||||
notFound = [document.getElementById("useTeamNotFound--${pageName}").innerHTML];
|
||||
found = document.getElementById("useTeamRow--${pageName}").innerHTML;
|
||||
replacer = (str, dataItem) => str
|
||||
.replace(/{onclick}/gi, "pageObject['${pageName}'].clickUseTeamList('" + dataItem.getValue("TEAM_ID") + "');")
|
||||
.replace(/{ondblclick}/gi, "");
|
||||
} else {
|
||||
notFound = [document.getElementById("delTeamNotFound--${pageName}").innerHTML];
|
||||
found = document.getElementById("delTeamRow--${pageName}").innerHTML;
|
||||
replacer = (str, dataItem) => str
|
||||
.replace(/{onclick}/gi, "")
|
||||
.replace(/{ondblclick}/gi, "");
|
||||
}
|
||||
|
||||
return {
|
||||
found : found,
|
||||
notFound : notFound,
|
||||
replacer : replacer
|
||||
};
|
||||
}
|
||||
|
||||
$P.renderUseTeamList = (total, listLength, trs) => {
|
||||
$("#useTeamTbody--${pageName}").html(trs);
|
||||
}
|
||||
|
||||
$P.renderDelTeamList = (total, listLength, trs) => {
|
||||
$("#delTeamTbody--${pageName}").html(trs);
|
||||
}
|
||||
|
||||
$P.clickUseTeamList = (dataKey) => {
|
||||
$P.useTeamControl.dataset.setCurrent(dataKey);
|
||||
}
|
||||
|
||||
$P.fnSave = () => {
|
||||
var formFields = new FimsFormFields("#frmEdit--${pageName}");
|
||||
var data = formFields.get();
|
||||
|
||||
data.taskSeCd = $("#frmSearch--${pageName} input[name='taskSeCd']:checked").val();
|
||||
|
||||
ajax.get({
|
||||
url : $P.useTeamControl.urls.save,
|
||||
data : data,
|
||||
success : (resp) => {
|
||||
if(resp.saved){
|
||||
$P.refreshUseTeamList();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
$P.fnRemove = () => {
|
||||
var dataKey = $P.useTeamControl.dataset.getCurrent()["TEAM_ID"];
|
||||
ajax.get({
|
||||
url : $P.useTeamControl.urls.remove,
|
||||
data : {
|
||||
"teamId" : dataKey
|
||||
},
|
||||
success : (resp) => {
|
||||
if(resp.saved){
|
||||
$P.refreshUseTeamList();
|
||||
}
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
$P.fnShowDeleted = () => {
|
||||
|
||||
var teamNm = $("#deletedTeamNm--${pageName}").val();
|
||||
|
||||
var taskSeCd = $("#frmSearch--${pageName} input[name='taskSeCd']:checked").val();
|
||||
|
||||
ajax.get({
|
||||
url : wctx.url("/" + taskSeCd + "/crdn/crdn07/010/removedTeamList.do"),
|
||||
data: {
|
||||
"teamNm" : teamNm,
|
||||
"taskSeCd" : taskSeCd
|
||||
},
|
||||
success:(resp) => {
|
||||
|
||||
$P.delTeamControl.dataset.setData(resp);
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**************************************************************************
|
||||
* element.on
|
||||
**************************************************************************/
|
||||
$('#btnReset--${pageName}').on('click', () => $P.fnReset());
|
||||
$("#btnSearch--${pageName}").on("click", () => $P.searchUseTeamList());
|
||||
|
||||
$("#btnSave--${pageName}").on('click', () => { $P.fnSave(); });
|
||||
$("#btnRemove--${pageName}").on('click', () => { $P.fnRemove(); });
|
||||
$("#btnShowDeleted--${pageName}").on('click', () => { $P.fnShowDeleted(); });
|
||||
|
||||
fnMakeResizableTable($("#table-responsive_0--${pageName}")[0]);
|
||||
fnMakeResizableTable($("#table-responsive_1--${pageName}")[0]);
|
||||
|
||||
/**************************************************************************
|
||||
* 초기화
|
||||
**************************************************************************/
|
||||
var defaultBizValue = $("#layout-navbar input[name='taskSeCd']:checked").val();
|
||||
if(defaultBizValue == "PVS" || defaultBizValue == "BPV"){
|
||||
$("#frmSearch--${pageName} input[name='taskSeCd'][value='" + defaultBizValue + "']").prop("checked",true);
|
||||
} else {
|
||||
var taskForUser = MY_INFO.info.taskForUser;
|
||||
var hasPVS = taskForUser.indexOf("PVS") != -1;
|
||||
var hasBPV = taskForUser.indexOf("BPV") != -1;
|
||||
if(hasPVS && !hasBPV){
|
||||
$("#frmSearch--${pageName} input[name='taskSeCd'][value='PVS']").prop("checked",true);
|
||||
} else if(!hasPVS && hasBPV){
|
||||
$("#frmSearch--${pageName} input[name='taskSeCd'][value='BPV']").prop("checked",true);
|
||||
} else {
|
||||
$("#frmSearch--${pageName} input[name='taskSeCd']").eq(0).prop("checked",true);
|
||||
}
|
||||
}
|
||||
|
||||
$P.fnResetAndChangeBiz(defaultBizValue);
|
||||
|
||||
$("#frmSearch--${pageName} input[name='taskSeCd']").each(function(i) {
|
||||
$(this).prop("disabled", "true");
|
||||
});
|
||||
});
|
||||
|
||||
</script>
|
||||
@ -1,447 +0,0 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
<c:set var="pageKorName" scope="request">면제차량 관리</c:set>
|
||||
<div class="content-wrapper">
|
||||
<div class="container-xxl flex-grow-1 px-0">
|
||||
<div class="card wrapper-list">
|
||||
<div class="container-page-btn">
|
||||
<button type="button" id="btnReset--${pageName}" class="btn btn-outline-dark w-px-120" title="초기화">
|
||||
초기화
|
||||
</button>
|
||||
<span class="container-window-btn-right">
|
||||
<button type="button" id="btnSearch--${pageName}" class="btn btn-search w-px-120" title="검색">
|
||||
검색
|
||||
</button>
|
||||
<button type="button" id="btnExcel--${pageName}" class="btn btn-excel w-px-120" title="엑셀 저장">
|
||||
엑셀
|
||||
</button>
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<form id="frmSearch--${pageName}" name="frmSearch">
|
||||
<div class="container-search">
|
||||
<div class="row g-1">
|
||||
<div class="col-6">
|
||||
<label class="form-label fw-bold form-search-title w-px-120 text-end" for="vhrno--${pageName}">
|
||||
차량번호
|
||||
</label>
|
||||
<input type="text" id="vhrno--${pageName}" name="vhrno" class="form-control" />
|
||||
</div>
|
||||
<div class="col-6">
|
||||
<label class="form-label fw-bold form-search-title w-px-120 text-end" for="delYn--${pageName}">
|
||||
삭제여부
|
||||
</label>
|
||||
<select id="delYn--${pageName}" name="denYn" class="form-select">
|
||||
<option value="">전체</option>
|
||||
<option value="N">사용</option>
|
||||
<option value="Y">삭제</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<div>
|
||||
<span class="container-page-btn">
|
||||
<div class="d-flex flex-row justify-content-between">
|
||||
<span id="exmptnVhclPaging--${pageName}PagingInfo" class="dataTables_info"
|
||||
role="status" aria-live="polite"></span>
|
||||
<ul id="exmptnVhclPaging--${pageName}" class="pagination pagination-primary">
|
||||
</ul>
|
||||
</div>
|
||||
<span class="container-window-btn-right">
|
||||
<button type="button" id="btnCreate--${pageName}"
|
||||
class="btn btn-primary" title="면제차량 등록">면제차량 등록</button>
|
||||
<button type="button" id="btnOpenDelRsn--${pageName}"
|
||||
class="btn btn-primary" title="면제차량 삭제">면제차량 삭제</button>
|
||||
<button type="button" id="btnHistory--${pageName}"
|
||||
class="btn btn-primary" title="면제차량 수정이력">면제차량 수정이력</button>
|
||||
</span>
|
||||
</span>
|
||||
</div>
|
||||
<div class="card-datatable text-nowrap">
|
||||
<div id="DataTables_Table_0_wrapper--${pageName}" class="dataTables_wrapper dt-bootstrap5 no-footer">
|
||||
<div id="table-responsive--${pageName}" class="table-responsive ox-scroll oy-scroll h-px-600">
|
||||
<table id="DataTables_Table_0--${pageName}"
|
||||
class="table-layout-fixed datatables-ajax table table-bordered dataTable no-footer">
|
||||
<thead class="sticky-thead">
|
||||
<tr id="exmptnVhclTheadTr--${pageName}">
|
||||
<th style="width: 80px;">No.</th>
|
||||
<th style="width: 200px;">차량번호</th>
|
||||
<th style="width: 200px;">사유</th>
|
||||
<th style="width: 200px;">공문번호</th>
|
||||
<th style="width: 200px;">소유주명</th>
|
||||
<th style="width: 200px;">면제시작일</th>
|
||||
<th style="width: 200px;">면제종료일</th>
|
||||
<th style="width: 200px;">입력자</th>
|
||||
<th style="width: 200px;">입력일시</th>
|
||||
<th style="width: 200px;">수정자</th>
|
||||
<th style="width: 200px;">수정일시</th>
|
||||
<th style="width: 200px;">삭제자</th>
|
||||
<th style="width: 200px;">삭제사유</th>
|
||||
<th style="width: 200px;">삭제일시</th>
|
||||
<th class="dummy-th"></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="exmptnVhclTbody--${pageName}"></tbody>
|
||||
<template id="exmptnVhclRow--${pageName}">
|
||||
<tr data-key="{EXMPTN_VHCL_ID}">
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-end">{ROW_NUM}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-center">{VHRNO}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-start">{EXMPTN_RSN}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-start">{DOC_NO}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-start">{OWNR_NM}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-center">{EXMPTN_BGNG_YMD}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-center">{EXMPTN_END_YMD}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-start">{RGTR_NM}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-center">{REG_DT}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-start">{MDFR_NM}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-center">{MDFCN_DT}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-start">{DLTR_NM}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-start">{DEL_RSN}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-center">{DEL_DT}</td>
|
||||
<td class="dummy-td"></td>
|
||||
</tr>
|
||||
</template>
|
||||
<template id="exmptnVhclNotFound--${pageName}">
|
||||
<tr>
|
||||
<td valign="top" colspan="15" class="dataTables_empty text-center">
|
||||
면제차량 정보를 찾지 못했습니다.
|
||||
</td>
|
||||
</tr>
|
||||
</template>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content-backdrop fade"></div>
|
||||
</div>
|
||||
|
||||
<template id="delRsnDialogTemplate--${pageName}">
|
||||
<form id="frmEdit--${pageName}">
|
||||
<div class="card">
|
||||
<div class="row g-1">
|
||||
<div class="col-md-12">
|
||||
<label for="delRsn--${pageName}"
|
||||
class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">삭제사유</label>
|
||||
<input type="text" id="delRsn--${pageName}" name="delRsn"
|
||||
class="form-control w-80" type="text" maxlength="1000" data-maxlengthb="1000" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<span class="container-page-btn">
|
||||
<span class="container-window-btn-right">
|
||||
<button type="button" id="btnRemove--${pageName}" class="btn btn-primary" title="확인">확인</button>
|
||||
</span>
|
||||
</span>
|
||||
</div>
|
||||
</form>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
/**************************************************************************
|
||||
* Global Variable
|
||||
**************************************************************************/
|
||||
|
||||
pageObject["${pageName}"] = {};
|
||||
|
||||
$(document).ready(function(){
|
||||
|
||||
var $P = pageObject["${pageName}"];
|
||||
|
||||
/**************************************************************************
|
||||
* DatasetControl
|
||||
**************************************************************************/
|
||||
$P.exmptnVhclControl = new DatasetControl({
|
||||
dataGetter : obj => obj["List"], appendData:true,
|
||||
keymapper : info => info ? info.EXMPTN_VHCL_ID : "",
|
||||
urls : {
|
||||
load : wctx.url("/BPV/crdn/crdn08/010/list.do"),
|
||||
remove : wctx.url("/BPV/crdn/crdn08/010/remove.do"),
|
||||
newInfo : wctx.url("/BPV/crdn/crdn08/020/info.do"),
|
||||
getInfo : wctx.url("/BPV/crdn/crdn08/020/info.do")
|
||||
},
|
||||
formats: {
|
||||
EXMPTN_BGNG_YMD : dateFormat,
|
||||
EXMPTN_END_YMD : dateFormat,
|
||||
REG_DT : datetimeFormat,
|
||||
MDFCN_DT : datetimeFormat,
|
||||
DEL_DT : datetimeFormat
|
||||
}
|
||||
});
|
||||
$P.exmptnVhclControl.defaultFetchSize = FETCH_XS;
|
||||
$P.exmptnVhclControl.query = { pageNum : 1, fetchSize : $P.exmptnVhclControl.defaultFetchSize };
|
||||
$P.exmptnVhclControl.beforeCurrent = null;
|
||||
|
||||
/**************************************************************************
|
||||
* Dataset.on
|
||||
**************************************************************************/
|
||||
$P.exmptnVhclControl.dataset.onDatasetChange = (obj, option) => {
|
||||
var t = $P.getGridTemplate();
|
||||
var trs = Apply.fromDataset.getTbody($P.exmptnVhclControl.dataset, t.found, t.notFound, t.replacer);
|
||||
$P.renderExmptnVhclList(obj["Total"], $P.exmptnVhclControl.dataset.length, trs, option);
|
||||
|
||||
Apply.fromDataset.paging($P.exmptnVhclControl.dataset, obj, "exmptnVhclPaging--${pageName}");
|
||||
};
|
||||
|
||||
$P.exmptnVhclControl.dataset.onCurrentChange = (dataItem) => {
|
||||
Apply.fromDataset.currentRow($P.exmptnVhclControl.dataset, dataItem, $("#exmptnVhclTbody--${pageName}")[0]);
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* pageObject.function
|
||||
**************************************************************************/
|
||||
$P.fnReset = () => {
|
||||
var searchForm = $("#frmSearch--${pageName}");
|
||||
searchForm.find("input[type='text']").val("");
|
||||
searchForm.find("input[type='hidden']").val("");
|
||||
|
||||
$P.exmptnVhclControl.dataset.setData([]);
|
||||
}
|
||||
|
||||
$P.getParams = () => {
|
||||
var formFields = new FimsFormFields("#frmSearch--${pageName}");
|
||||
var data = formFields.get();
|
||||
data.taskSeCd = "BPV";
|
||||
data.fetchSize = $P.exmptnVhclControl.defaultFetchSize;
|
||||
return data;
|
||||
}
|
||||
|
||||
$P.searchExmptnVhclList = () => {
|
||||
$P.exmptnVhclControl.query = $P.getParams();
|
||||
$P.exmptnVhclControl.load(1);
|
||||
}
|
||||
|
||||
$P.scrollExmptnVhclList = () => {
|
||||
$P.exmptnVhclControl.load($P.exmptnVhclControl.query.pageNum + 1);
|
||||
}
|
||||
|
||||
$P.refreshExmptnVhclList = () => {
|
||||
if($P.exmptnVhclControl.query.pageNum == null){
|
||||
$P.exmptnVhclControl.query.pageNum = 1;
|
||||
}
|
||||
$P.exmptnVhclControl.reload({all : true});
|
||||
}
|
||||
|
||||
$P.fnExcelDown = () => {
|
||||
if($P.exmptnVhclControl.dataset.empty){
|
||||
alert("조회된 자료가 없습니다.");
|
||||
return;
|
||||
}
|
||||
|
||||
var cellDefs = getCellDefs($("#exmptnVhclTheadTr--${pageName} th").not(".dummy-th").not(":eq(0)"),
|
||||
$($("#exmptnVhclRow--${pageName}")[0].content).find("td").not(".dummy-td").not(":eq(0)"));
|
||||
$P.exmptnVhclControl.query.cellDefs = cellDefs;
|
||||
|
||||
$P.exmptnVhclControl.download();
|
||||
}
|
||||
|
||||
$P.getGridTemplate = () => {
|
||||
var notFound = [document.getElementById("exmptnVhclNotFound--${pageName}").innerHTML];
|
||||
var found = document.getElementById("exmptnVhclRow--${pageName}").innerHTML;
|
||||
var replacer = (str, dataItem) => str
|
||||
.replace(/{onclick}/gi, "pageObject['${pageName}'].clickExmptnVhclList('" + dataItem.getValue("EXMPTN_VHCL_ID") + "');")
|
||||
.replace(/{ondblclick}/gi, "pageObject['${pageName}'].dblclickExmptnVhclList('" + dataItem.getValue("EXMPTN_VHCL_ID") + "');");
|
||||
|
||||
return {
|
||||
found : found,
|
||||
notFound : notFound,
|
||||
replacer : replacer
|
||||
};
|
||||
}
|
||||
|
||||
$P.renderExmptnVhclList = (total, listLength, trs, option) => {
|
||||
|
||||
let noMore = (listLength >= total);
|
||||
var initScroll = ($P.exmptnVhclControl.query.pageNum < 2);
|
||||
if(option != null && option.reloaded){
|
||||
initScroll = false;
|
||||
}
|
||||
|
||||
$("#table-responsive--${pageName}")[0].changeContent(trs, initScroll, noMore);
|
||||
|
||||
//보안모드
|
||||
fn_securityModeToggle($("#securityMode--top").is(":checked"));
|
||||
}
|
||||
|
||||
$P.clickExmptnVhclList = (dataKey) => {
|
||||
if(dataKey == ""){
|
||||
$("#btnOpenDelRsn--${pageName}").prop("disabled", true);
|
||||
$("#btnHistory--${pageName}").prop("disabled", true);
|
||||
return;
|
||||
}
|
||||
|
||||
if($P.exmptnVhclControl.dataset.getData(dataKey)["DEL_YN"] == "N"){
|
||||
$("#btnOpenDelRsn--${pageName}").prop("disabled", false);
|
||||
} else {
|
||||
$("#btnOpenDelRsn--${pageName}").prop("disabled", true);
|
||||
}
|
||||
$("#btnHistory--${pageName}").prop("disabled", false);
|
||||
|
||||
$("#exmptnVhclTbody--${pageName}").setCurrentRow(dataKey);
|
||||
|
||||
Apply.toDataset.current($P.exmptnVhclControl.dataset, dataKey);
|
||||
}
|
||||
|
||||
$P.dblclickExmptnVhclList = (dataKey) => {
|
||||
if(dataKey == ""){
|
||||
return;
|
||||
}
|
||||
var data = $P.exmptnVhclControl.dataset.getData(dataKey);
|
||||
if(data.DEL_YN == "Y"){
|
||||
dialog.alert({
|
||||
content : "삭제된 자료입니다.",
|
||||
init : function() {
|
||||
focusClose();
|
||||
}
|
||||
});
|
||||
return;
|
||||
}
|
||||
$P.getInfo({"exmptnVhclId" : dataKey});
|
||||
}
|
||||
|
||||
$P.getInfo = (param) => {
|
||||
ajax.get({
|
||||
url : $P.exmptnVhclControl.urls.getInfo,
|
||||
data: param,
|
||||
success:(resp) => {
|
||||
dialog.open({
|
||||
id: "exmptnvhclDialog",
|
||||
title: "면제차량 수정",
|
||||
content:resp,
|
||||
size: "lg",
|
||||
init:() => {
|
||||
var parentRes = new Object();
|
||||
var childReq = pageObject.childReq.pop();
|
||||
|
||||
for(var reqKey in childReq) {
|
||||
if($P.provide[reqKey]){
|
||||
parentRes[reqKey] = $P.provide[reqKey];
|
||||
} else {
|
||||
parentRes[reqKey] = function(){};
|
||||
}
|
||||
}
|
||||
|
||||
pageObject.parentRes.push(parentRes);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
$P.newInfo = () => {
|
||||
ajax.get({
|
||||
url : $P.exmptnVhclControl.urls.newInfo,
|
||||
data: {},
|
||||
success:(resp) => {
|
||||
dialog.open({
|
||||
id: "exmptnvhclDialog",
|
||||
title: "면제차량 등록",
|
||||
content:resp,
|
||||
size: "lg",
|
||||
init:() => {
|
||||
var parentRes = new Object();
|
||||
var childReq = pageObject.childReq.pop();
|
||||
|
||||
for(var reqKey in childReq) {
|
||||
if($P.provide[reqKey]){
|
||||
parentRes[reqKey] = $P.provide[reqKey];
|
||||
} else {
|
||||
parentRes[reqKey] = function(){};
|
||||
}
|
||||
}
|
||||
|
||||
pageObject.parentRes.push(parentRes);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
$P.fnOpenDelRsnDialog = () => {
|
||||
dialog.open({
|
||||
id : "delRsnDialog--${pageName}",
|
||||
title : "삭제사유입력다이얼로그",
|
||||
content : document.getElementById("delRsnDialogTemplate--${pageName}").innerHTML,
|
||||
size : "xl",
|
||||
init : () => {
|
||||
$("#delRsnDialog--${pageName} .modal-content").addClass("min-w-px-700");
|
||||
$('#btnRemove--${pageName}').on("click", () => $P.fnRemove());
|
||||
},
|
||||
onClose : () => {}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
$P.fnRemove = () => {
|
||||
var dataKey = $P.exmptnVhclControl.dataset.getCurrent()["EXMPTN_VHCL_ID"];
|
||||
ajax.get({
|
||||
url : $P.exmptnVhclControl.urls.remove,
|
||||
data : {
|
||||
"exmptnVhclId" : dataKey,
|
||||
"delRsn" : $("#delRsn--${pageName}").val()
|
||||
},
|
||||
success : (resp) => {
|
||||
if(resp.saved){
|
||||
dialog.close("delRsnDialog--${pageName}");
|
||||
$P.refreshExmptnVhclList();
|
||||
}
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
$P.fnOpenHistory = () => {
|
||||
var dataKey = $P.exmptnVhclControl.dataset.getCurrent()["EXMPTN_VHCL_ID"];
|
||||
|
||||
ajax.get({
|
||||
url : wctx.url("/BPV/crdn/crdn08/030/list.do"),
|
||||
data: { "exmptnVhclId" : dataKey },
|
||||
success:(resp) => {
|
||||
dialog.open({
|
||||
id: "exmptnvhclHistoryDialog",
|
||||
title: "면제차량 이력",
|
||||
content : resp,
|
||||
size: "xxl",
|
||||
init:() => {
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
$P.provide = {
|
||||
"refreshList" : function(){
|
||||
$P.refreshExmptnVhclList();
|
||||
}
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* element.on
|
||||
**************************************************************************/
|
||||
$('#btnReset--${pageName}').on('click', () => $P.fnReset());
|
||||
$("#btnSearch--${pageName}").on("click", () => $P.searchExmptnVhclList());
|
||||
$('#btnExcel--${pageName}').on('click', () => $P.fnExcelDown());
|
||||
|
||||
$("#btnCreate--${pageName}").on('click', () => { $P.newInfo(); });
|
||||
$("#btnOpenDelRsn--${pageName}").on('click', () => { $P.fnOpenDelRsnDialog(); });
|
||||
$("#btnHistory--${pageName}").on('click', () => { $P.fnOpenHistory(); });
|
||||
|
||||
fnMakeScrollableTable($("#table-responsive--${pageName}")[0], $P.scrollExmptnVhclList);
|
||||
fnMakeResizableTable($("#table-responsive--${pageName}")[0]);
|
||||
|
||||
/**************************************************************************
|
||||
* 초기화
|
||||
**************************************************************************/
|
||||
initDatepicker("frmSearch--${pageName}"); //달력 초기화
|
||||
|
||||
$P.fnReset();
|
||||
//보안모드
|
||||
fn_securityModeToggle($("#securityMode--top").is(":checked"));
|
||||
});
|
||||
|
||||
</script>
|
||||
@ -1,187 +0,0 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
<c:set var="pageKorName" scope="request">면제차량 상세 조회</c:set>
|
||||
|
||||
<div class="card">
|
||||
<form id="frmEdit--${pageName}">
|
||||
<input type="hidden" id="exmptnVhclId--${pageName}" name="exmptnVhclId" data-map="EXMPTN_VHCL_ID" />
|
||||
<input type="hidden" id="sggCd--${pageName}" name="sggCd" data-map="SGG_CD" />
|
||||
|
||||
<div class="row g-1">
|
||||
|
||||
<div class="col-md-12">
|
||||
<label for="vhrno--${pageName}" class="w-px-130 bg-lighter pe-2 col-form-label text-sm-end required">
|
||||
차량번호
|
||||
</label>
|
||||
<input type="text" id="vhrno--${pageName}" name="vhrno" data-map="VHRNO" class="form-control"
|
||||
data-maxlengthb="30" required />
|
||||
</div>
|
||||
<div class="col-md-12">
|
||||
<label class="w-px-130 bg-lighter pe-2 col-form-label text-sm-end">
|
||||
면제기간
|
||||
</label>
|
||||
<input type="text" id="exmptnBgngYmd--${pageName}" name="exmptnBgngYmd" data-map="EXMPTN_BGNG_YMD"
|
||||
class="form-control form-date" data-fmt-type="day" title="시작 날짜 선택" />
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
~
|
||||
<input type="text" id="exmptnEndYmd--${pageName}" name="exmptnEndYmd" data-map="EXMPTN_END_YMD"
|
||||
class="form-control form-date" data-fmt-type="day" title="종료 날짜 선택">
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
</div>
|
||||
<div class="col-md-12">
|
||||
<label for="exmptnRsn--${pageName}" class="w-px-130 bg-lighter pe-2 col-form-label text-sm-end">
|
||||
면제 사유
|
||||
</label>
|
||||
<input type="text" id="exmptnRsn--${pageName}" name="exmptnRsn" data-map="EXMPTN_RSN"
|
||||
class="form-control w-px-300" data-maxlengthb="1000" />
|
||||
</div>
|
||||
<div class="col-md-12">
|
||||
<label for="docNo--${pageName}" class="w-px-130 bg-lighter pe-2 col-form-label text-sm-end">
|
||||
공문번호
|
||||
</label>
|
||||
<input type="text" id="docNo--${pageName}" name="docNo" data-map="DOC_NO"
|
||||
class="form-control w-px-300" data-maxlengthb="100" />
|
||||
</div>
|
||||
<div class="col-md-12">
|
||||
<label for="ownrNm--${pageName}" class="w-px-130 bg-lighter pe-2 col-form-label text-sm-end">
|
||||
소유주명
|
||||
</label>
|
||||
<input type="text" id="ownrNm--${pageName}" name="ownrNm" data-map="OWNR_NM"
|
||||
class="form-control w-px-300" data-maxlengthb="200" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mt-4 justify-content-end mb-3">
|
||||
<div class="col-md-6">
|
||||
<div class="row justify-content-end">
|
||||
<div class="col-sm-3">
|
||||
<button type="button" id="btnSave--${pageName}" class="btn btn-primary">저장</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</form>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
<script>
|
||||
/**************************************************************************
|
||||
* Global Variable
|
||||
**************************************************************************/
|
||||
|
||||
pageObject["${pageName}"] = {};
|
||||
pageObject["${pageName}"].provided = {};
|
||||
|
||||
pageObject.childReq = [];
|
||||
pageObject.childReq.push({
|
||||
refreshList : function(){}
|
||||
});
|
||||
|
||||
$(document).ready(function(){
|
||||
|
||||
var $P = pageObject["${pageName}"];
|
||||
|
||||
if(pageObject.parentRes.length > 0){
|
||||
$P.provided = pageObject.parentRes.pop();
|
||||
} else {
|
||||
$P.provided = pageObject.childReq.pop();
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* DatasetControl, Dataset, FormFields
|
||||
**************************************************************************/
|
||||
$P.formFields = new FimsFormFields("#frmEdit--${pageName}");
|
||||
|
||||
$P.exmptnVhclControl = new DatasetControl({
|
||||
dataGetter : obj => obj.exmptnVhclInfo,
|
||||
keymapper : info => info ? info.EXMPTN_VHCL_ID : "",
|
||||
urls : {
|
||||
create : wctx.url("/BPV/crdn/crdn08/020/create.do"),
|
||||
update : wctx.url("/BPV/crdn/crdn08/020/update.do")
|
||||
},
|
||||
formats : {
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
/**************************************************************************
|
||||
* pageObject.function
|
||||
**************************************************************************/
|
||||
$P.setInfo = (item) => {
|
||||
$P.formFields.set($P.exmptnVhclControl, item);
|
||||
|
||||
var create = isEmpty(item.EXMPTN_VHCL_ID);
|
||||
$("#vhrno--${pageName}").prop("readonly", !create);
|
||||
}
|
||||
|
||||
$P.fnSave = async() => {
|
||||
|
||||
if(!customValidate($("#frmEdit--${pageName} input"))) return;
|
||||
|
||||
if(await confirm2("면제 차량 정보를 저장하시겠습니까?")){
|
||||
var info = $P.formFields.get();
|
||||
|
||||
if (!info) {
|
||||
return;
|
||||
}
|
||||
|
||||
var create = isEmpty(info.exmptnVhclId);
|
||||
|
||||
ajax.post({
|
||||
url : !create ? $P.exmptnVhclControl.urls.update : $P.exmptnVhclControl.urls.create,
|
||||
data : info,
|
||||
success : (resp) => {
|
||||
$P.saveCallback(resp);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
$P.saveCallback = (resp) => {
|
||||
if (resp.saved) {
|
||||
dialog.alert({
|
||||
content : "저장됐습니다.",
|
||||
init : function() {
|
||||
setDialogZindex();
|
||||
focusClose();
|
||||
}
|
||||
});
|
||||
dialog.close("exmptnvhclDialog");
|
||||
$P.provided.refreshList();
|
||||
}
|
||||
};
|
||||
|
||||
/**************************************************************************
|
||||
* element.on
|
||||
**************************************************************************/
|
||||
$("#btnSave--${pageName}").on('click', () => $P.fnSave());
|
||||
|
||||
/**************************************************************************
|
||||
* 초기화
|
||||
**************************************************************************/
|
||||
initDatepicker("frmEdit--${pageName}"); //달력 초기화
|
||||
|
||||
$("#frmEdit--${pageName}").find(".form-date").each(function(){
|
||||
$(this).on("input",function(){
|
||||
var 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);
|
||||
}
|
||||
|
||||
});
|
||||
});
|
||||
|
||||
//보안모드
|
||||
fn_securityModeToggle($("#securityMode--top").is(":checked"));
|
||||
|
||||
var exmptnVhclInfo = ${exmptnVhclInfo};
|
||||
$P.setInfo(exmptnVhclInfo);
|
||||
|
||||
});
|
||||
</script>
|
||||
@ -1,129 +0,0 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
<c:set var="pageKorName" scope="request">면제차량 이력</c:set>
|
||||
|
||||
<div class="card">
|
||||
<div class="card-datatable text-nowrap">
|
||||
<div id="DataTables_Table_0_wrapper--${pageName}" class="dataTables_wrapper dt-bootstrap5 no-footer">
|
||||
<div id="table-responsive--${pageName}" class="table-responsive ox-scroll oy-scroll h-px-550">
|
||||
<table id="DataTables_Table_0--${pageName}"
|
||||
class="table-layout-fixed datatables-ajax table table-bordered dataTable no-footer">
|
||||
<thead class="sticky-thead">
|
||||
<tr id="exmptnVhclTheadTr--${pageName}">
|
||||
<th style="width: 80px;">No.</th>
|
||||
<th style="width: 140px;">차량번호</th>
|
||||
<th style="width: 300px;">면제사유</th>
|
||||
<th style="width: 200px;">공문번호</th>
|
||||
<th style="width: 160px;">소유주명</th>
|
||||
<th style="width: 160px;">면제시작일</th>
|
||||
<th style="width: 160px;">면제종료일</th>
|
||||
<th style="width: 100px;">삭제 여부</th>
|
||||
<th style="width: 200px;">삭제사유</th>
|
||||
<th style="width: 160px;">입력자</th>
|
||||
<th style="width: 200px;">입력일시</th>
|
||||
<th style="width: 160px;">수정자</th>
|
||||
<th style="width: 200px;">수정일시</th>
|
||||
<th style="width: 160px;">삭제자</th>
|
||||
<th style="width: 200px;">삭제일시</th>
|
||||
<th class="dummy-th"></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="exmptnVhclTbody--${pageName}"></tbody>
|
||||
<template id="exmptnVhclRow--${pageName}">
|
||||
<tr data-key="{HSTRY_SN}">
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-end">{HSTRY_SN}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-center">{VHRNO}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-start">{EXMPTN_RSN}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-start">{DOC_NO}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-start">{OWNR_NM}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-center">{EXMPTN_BGNG_YMD}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-center">{EXMPTN_END_YMD}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-center">{DEL_YN}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-start">{DEL_RSN}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-start">{RGTR_NM}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-center">{REG_DT}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-start">{MDFR_NM}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-center">{MDFCN_DT}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-start">{DLTR_NM}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-center">{DEL_DT}</td>
|
||||
<td class="dummy-td"></td>
|
||||
</tr>
|
||||
</template>
|
||||
<template id="exmptnVhclNotFound--${pageName}">
|
||||
<tr>
|
||||
<td valign="top" colspan="15" class="dataTables_empty text-center">
|
||||
면제차량 이력 정보를 찾지 못했습니다.
|
||||
</td>
|
||||
</tr>
|
||||
</template>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
pageObject["${pageName}"] = {};
|
||||
|
||||
var NTR034 = new CommonCodes(${NTR034});
|
||||
|
||||
$(document).ready(function(){
|
||||
|
||||
var list = ${list};
|
||||
|
||||
var $P = pageObject["${pageName}"];
|
||||
|
||||
/**************************************************************************
|
||||
* DatasetControl
|
||||
**************************************************************************/
|
||||
$P.exmptnVhclControl = new DatasetControl({
|
||||
dataGetter : obj => obj, appendData:false,
|
||||
keymapper : info => info ? info.HSTRY_SN : "",
|
||||
urls : { },
|
||||
formats: {
|
||||
EXMPTN_BGNG_YMD : dateFormat,
|
||||
EXMPTN_END_YMD : dateFormat,
|
||||
REG_DT : datetimeFormat,
|
||||
MDFCN_DT : datetimeFormat,
|
||||
DEL_DT : datetimeFormat,
|
||||
DEL_YN : NTR034
|
||||
}
|
||||
});
|
||||
|
||||
/**************************************************************************
|
||||
* Dataset.on
|
||||
**************************************************************************/
|
||||
|
||||
$P.exmptnVhclControl.dataset.onDatasetChange = (obj, option) => {
|
||||
var t = $P.getGridTemplate();
|
||||
var trs = Apply.fromDataset.getTbody($P.exmptnVhclControl.dataset, t.found, t.notFound, t.replacer);
|
||||
$P.renderExmptnVhclList(obj["Total"], $P.exmptnVhclControl.dataset.length, trs);
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* pageObject.function
|
||||
**************************************************************************/
|
||||
|
||||
$P.getGridTemplate = () => {
|
||||
var notFound = [document.getElementById("exmptnVhclNotFound--${pageName}").innerHTML];
|
||||
var found = document.getElementById("exmptnVhclRow--${pageName}").innerHTML;
|
||||
var replacer = (str, dataItem) => str
|
||||
.replace(/{onclick}/gi, "")
|
||||
.replace(/{ondblclick}/gi, "");
|
||||
|
||||
return {
|
||||
found : found,
|
||||
notFound : notFound,
|
||||
replacer : replacer
|
||||
};
|
||||
}
|
||||
|
||||
$P.renderExmptnVhclList = (total, listLength, trs) => {
|
||||
$("#exmptnVhclTbody--${pageName}").html(trs);
|
||||
|
||||
//보안모드
|
||||
fn_securityModeToggle($("#securityMode--top").is(":checked"));
|
||||
}
|
||||
|
||||
$P.exmptnVhclControl.dataset.setData(list);
|
||||
});
|
||||
</script>
|
||||
@ -1,713 +0,0 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
<c:set var="pageKorName" scope="request">민원접수자료</c:set>
|
||||
<div class="content-wrapper">
|
||||
<div class="container-xxl flex-grow-1 px-0">
|
||||
<div class="card wrapper-list">
|
||||
|
||||
<div class="container-page-btn">
|
||||
<button type="button" id="btnReset--${pageName}" class="btn btn-outline-dark w-px-120" title="초기화">
|
||||
초기화
|
||||
</button>
|
||||
<span class="container-window-btn-right">
|
||||
<button type="button" id="btnSearch--${pageName}" class="btn btn-search w-px-120" title="검색">
|
||||
검색
|
||||
</button>
|
||||
<button type="button" id="btnExcel--${pageName}" class="btn btn-excel w-px-120" title="엑셀 저장">
|
||||
엑셀
|
||||
</button>
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<form id="frmSearch--${pageName}" name="frmSearch">
|
||||
<div class="container-search">
|
||||
<div class="row g-1">
|
||||
<div class="col-12">
|
||||
<span class="form-label fw-bold form-search-title w-px-120 text-end">업무구분</span>
|
||||
<span class="form-search-linebox">
|
||||
<c:forEach items="${TaskListForSgg}" var="item">
|
||||
<label>
|
||||
<input name="taskSeCd" type="radio" value="${item.code}"
|
||||
class="form-check-input" alt="업무구분"
|
||||
onchange="pageObject['${pageName}'].fnResetAndChangeBiz(this.value);">
|
||||
${item.value}
|
||||
</label>
|
||||
</c:forEach>
|
||||
</span>
|
||||
</div>
|
||||
<div class="col-6">
|
||||
<label class="form-label fw-bold form-search-title w-px-120 text-end" for="schCvlcptRcptYmdFrom--${pageName}">접수일자</label>
|
||||
<span class="form-search-linebox">
|
||||
<input type="text" id="schCvlcptRcptYmdFrom--${pageName}" name="schCvlcptRcptYmdFrom"
|
||||
class="form-control form-date"
|
||||
data-fmt-type="day" title="시작 날짜 선택" />
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
~
|
||||
<input type="text" id="schCvlcptRcptYmdTo--${pageName}" name="schCvlcptRcptYmdTo"
|
||||
class="form-control form-date"
|
||||
data-fmt-type="day" title="종료 날짜 선택">
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
</span>
|
||||
</div>
|
||||
<div class="col-6">
|
||||
<button type="button" class="w-px-120" onclick="$('#cvlcptPrcsPicNm--${pageName}').val('${currentUserName}');">
|
||||
담당자명 지정
|
||||
</button>
|
||||
<input type="text" id="cvlcptPrcsPicNm--${pageName}" name="cvlcptPrcsPicNm"
|
||||
class="form-control" />
|
||||
</div>
|
||||
<div class="col-6">
|
||||
<label class="form-label fw-bold form-search-title w-px-120 text-end" for="schCvlcptPrcsPrnmntDtFrom--${pageName}">처리기한</label>
|
||||
<span class="form-search-linebox">
|
||||
<input type="text" id="schCvlcptPrcsPrnmntDtFrom--${pageName}" name="schCvlcptPrcsPrnmntDtFrom"
|
||||
class="form-control form-date"
|
||||
data-fmt-type="day" title="시작 날짜 선택" />
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
~
|
||||
<input type="text" id="schCvlcptPrcsPrnmntDtTo--${pageName}" name="schCvlcptPrcsPrnmntDtTo"
|
||||
class="form-control form-date"
|
||||
data-fmt-type="day" title="종료 날짜 선택">
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
</span>
|
||||
</div>
|
||||
<div class="col-6">
|
||||
<input type="hidden" id="by--${pageName}" name="by" />
|
||||
<input type="text" class="form-control fw-bold w-px-120 text-end" id="byOutput--${pageName}" value="동적 검색" readonly />
|
||||
<input type="hidden" id="mainOption--${pageName}" name="mainOption" />
|
||||
<input type="hidden" id="subOption--${pageName}" name="subOption" />
|
||||
<input type="text" class="form-control w-px-400" id="term--${pageName}" name="term" autocomplete="off" />
|
||||
<!-- 상세 검색조건 버튼 -->
|
||||
<span class="flr">
|
||||
<button type="button" class="btn btn-open-detail" data-bs-toggle="collapse" data-bs-target="#searchDetail--${pageName}">
|
||||
<i class="bx bx-chevron-down"></i>
|
||||
상세검색
|
||||
</button>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="searchDetail--${pageName}" class="container-search container-search-detail collapse">
|
||||
<div class="row">
|
||||
<div class="col-6">
|
||||
<select class="form-select w-px-120 text-center" id="schRegDateOpt--${pageName}" name="schRegDateOpt">
|
||||
<option value="regDt">등록일자</option>
|
||||
<option value="mdfcnDt">수정일자</option>
|
||||
</select>
|
||||
<span class="form-search-linebox">
|
||||
<input type="text" class="form-control form-date" id="schRegDateFrom--${pageName}" name="schRegDateFrom"
|
||||
data-fmt-type="day" title="시작 날짜 선택" />
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
~
|
||||
<input type="text" class="form-control form-date" id="schRegDateTo--${pageName}" name="schRegDateTo"
|
||||
data-fmt-type="day" title="종료 날짜 선택">
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<div>
|
||||
<span class="container-page-btn">
|
||||
<div class="d-flex flex-row justify-content-between">
|
||||
<span id="crdnPaging--${pageName}PagingInfo" class="dataTables_info"
|
||||
role="status" aria-live="polite"></span>
|
||||
<ul id="crdnPaging--${pageName}" class="pagination pagination-primary">
|
||||
</ul>
|
||||
</div>
|
||||
<span class="container-window-btn-right">
|
||||
<button type="button" id="btnOpenCvlcptOrgnl--${pageName}" class="btn btn-primary"
|
||||
title="민원원본보기">
|
||||
민원원본보기
|
||||
</button>
|
||||
<button type="button" id="btnHold--${pageName}" class="btn btn-primary" title="처리 잠시 보류">
|
||||
처리 잠시 보류
|
||||
</button>
|
||||
</span>
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<div class="card-datatable text-nowrap">
|
||||
<div id="DataTables_Table_0_wrapper--${pageName}" class="dataTables_wrapper dt-bootstrap5 no-footer">
|
||||
<div id="table-responsive--${pageName}" class="table-responsive ox-scroll oy-scroll h-px-500">
|
||||
<table id="DataTables_Table_0--${pageName}"
|
||||
class="table-layout-fixed datatables-ajax table table-bordered dataTable no-footer">
|
||||
<thead id="crdnThead--${pageName}" class="sticky-thead">
|
||||
<tr data-by="by--${pageName}" data-by-output="byOutput--${pageName}"
|
||||
data-main-option="mainOption--${pageName}" data-sub-option="subOption--${pageName}">
|
||||
<th style="width: 80px;">No.</th>
|
||||
<th onclick="searchFromGridTitle('CVLCPT_RCPT_NO',this.innerText,'match','part');"
|
||||
style="width: 180px;">접수번호</th>
|
||||
<th onclick="searchFromGridTitle('CVLCPT_LIST_NO',this.innerText,'match','part');"
|
||||
style="width: 100px;">목록번호</th>
|
||||
<th onclick="searchFromGridTitle('CRDN_REG_SE_CD',this.innerText,'codeValue','FIM026');"
|
||||
style="width: 100px;">등록구분</th>
|
||||
<th onclick="searchFromGridTitle('CVLCPT_APLCNT_NM',this.innerText,'match','part');"
|
||||
style="width: 140px;">신고자</th>
|
||||
<th onclick="searchFromGridTitle('CVLCPT_PRCS_PIC_NM',this.innerText,'match','part');"
|
||||
style="width: 140px;">담당자</th>
|
||||
<th onclick="searchFromGridTitle('CVLCPT_PRCS_PIC_TELNO',this.innerText,'match','part');"
|
||||
style="width: 160px;">담당자전화번호</th>
|
||||
<th onclick="searchFromGridTitle('CVLCPT_RCPT_YMD',this.innerText,'ymd');"
|
||||
style="width: 120px;">접수일자</th>
|
||||
<th onclick="searchFromGridTitle('CVLCPT_PRCS_PRNMNT_DT',this.innerText,'ymd');"
|
||||
style="width: 180px;">처리기한</th>
|
||||
<th onclick="searchFromGridTitle('CRDN_YMD','위반일자','ymd');"
|
||||
style="width: 180px;">위반일시</th>
|
||||
<th onclick="searchFromGridTitle('VLTN_ARTCL',this.innerText);"
|
||||
style="width: 100px;">위반내용</th>
|
||||
<th onclick="searchFromGridTitle('VHRNO',this.innerText,'match','part');"
|
||||
style="width: 140px;">차량번호</th>
|
||||
<th onclick="searchFromGridTitle('ATCH_FILE_CNT',this.innerText,'match','perfect');"
|
||||
style="width: 100px;">사진건수</th>
|
||||
<th class="dummy-th"></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="crdnTbody--${pageName}"></tbody>
|
||||
<template id="crdnRow--${pageName}">
|
||||
<tr data-key="{CRDN_ID}">
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-end">{ROW_NUM}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-center">{CVLCPT_RCPT_NO}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-center">{CVLCPT_LIST_NO}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-center">{CRDN_REG_SE_CD}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-center">{CVLCPT_APLCNT_NM}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-center">{CVLCPT_PRCS_PIC_NM}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-center">{CVLCPT_PRCS_PIC_TELNO}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-center">{CVLCPT_RCPT_YMD}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-center">{CVLCPT_PRCS_PRNMNT_DT}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-center">{CRDN_YMD_TM}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-center">{VLTN_ARTCL}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-center">{VHRNO}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-center">{ATCH_FILE_CNT}</td>
|
||||
<td class="dummy-td"></td>
|
||||
</tr>
|
||||
</template>
|
||||
<template id="crdnNotFound--${pageName}">
|
||||
<tr>
|
||||
<td valign="top" colspan="14" class="dataTables_empty text-center">
|
||||
민원 정보를 찾지 못했습니다.
|
||||
</td>
|
||||
</tr>
|
||||
</template>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="mt-2">
|
||||
단속장소 <input id="bottomCrdnPlc--${pageName}" type="text" class="form-control" size="100" readonly />
|
||||
<button type="button" id="btnDelete--${pageName}" class="btn btn-primary" title="선택자료 삭제">
|
||||
선택자료 삭제
|
||||
</button>
|
||||
<button type="button" id="btnDeleteSameRcptYmd--${pageName}" class="btn btn-primary" title="접수일 전체 삭제">
|
||||
접수일 전체 삭제
|
||||
</button>
|
||||
</div>
|
||||
<div class="toast-container position-fixed bottom-0 end-0 p-3">
|
||||
<div id="divToast--${pageName}" class="toast" role="alert" aria-live="assertive" aria-atomic="true">
|
||||
<div class="toast-body bg-black text-white">
|
||||
삭제 되었습니다.
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="content-backdrop fade"></div>
|
||||
</div>
|
||||
|
||||
|
||||
<script>
|
||||
|
||||
/**************************************************************************
|
||||
* Global Variable
|
||||
**************************************************************************/
|
||||
var FIM026 = new CommonCodes(${FIM026});
|
||||
pageObject["${pageName}"] = {};
|
||||
|
||||
$(document).ready(function(){
|
||||
|
||||
var $P = pageObject["${pageName}"];
|
||||
|
||||
$P.holdList = [];
|
||||
|
||||
$P.toast = new bootstrap.Toast(document.getElementById('divToast--${pageName}'), {
|
||||
animation: true,
|
||||
autohide: true,
|
||||
delay: 2000
|
||||
});
|
||||
|
||||
/**************************************************************************
|
||||
* DatasetControl
|
||||
**************************************************************************/
|
||||
$P.crdnControl = new DatasetControl({
|
||||
dataGetter : obj => obj["List"], appendData:true,
|
||||
keymapper : info => info ? info.CRDN_ID : "",
|
||||
urls : {
|
||||
load : "",
|
||||
getInfo : "",
|
||||
remove : ""
|
||||
},
|
||||
formats : {
|
||||
CRDN_REG_SE_CD : FIM026,
|
||||
CVLCPT_RCPT_YMD : dateFormat,
|
||||
CVLCPT_PRCS_PRNMNT_DT : datetimeFormat,
|
||||
CRDN_YMD_TM : datetimeFormat
|
||||
}
|
||||
});
|
||||
$P.crdnControl.defaultFetchSize = FETCH_XS;
|
||||
$P.crdnControl.query = { pageNum : 1, fetchSize : $P.crdnControl.defaultFetchSize };
|
||||
$P.crdnControl.beforeCurrent = null;
|
||||
|
||||
/**************************************************************************
|
||||
* Dataset.on
|
||||
**************************************************************************/
|
||||
$P.crdnControl.dataset.onDatasetChange = (obj, option) => {
|
||||
|
||||
var t = $P.getGridTemplate();
|
||||
var trs = Apply.fromDataset.getTbody($P.crdnControl.dataset, t.found, t.notFound, t.replacer);
|
||||
$P.renderCrdnList(obj["Total"], $P.crdnControl.dataset.length, trs, option);
|
||||
|
||||
Apply.fromDataset.paging($P.crdnControl.dataset, obj, "crdnPaging--${pageName}");
|
||||
};
|
||||
|
||||
$P.crdnControl.dataset.onCurrentChange = (dataItem) => {
|
||||
Apply.fromDataset.currentRow($P.crdnControl.dataset, dataItem, $("#crdnTbody--${pageName}")[0]);
|
||||
if(!dataItem){
|
||||
$("#bottomCrdnPlc--${pageName}").val("");
|
||||
|
||||
$("#btnOpenCvlcptOrgnl--${pageName}").hide();
|
||||
$("#btnDelete--${pageName}").hide();
|
||||
$("#btnDeleteSameRcptYmd--${pageName}").hide();
|
||||
} else {
|
||||
|
||||
$("#bottomCrdnPlc--${pageName}").val(dataItem.data["CRDN_PLC"]);
|
||||
|
||||
if($P.holdList.includes(dataItem.data["CRDN_ID"])){
|
||||
$("#btnOpenCvlcptOrgnl--${pageName}").hide();
|
||||
$("#btnDelete--${pageName}").hide();
|
||||
$("#btnDeleteSameRcptYmd--${pageName}").hide();
|
||||
} else {
|
||||
$("#btnOpenCvlcptOrgnl--${pageName}").show();
|
||||
$("#btnDelete--${pageName}").show();
|
||||
$("#btnDeleteSameRcptYmd--${pageName}").show();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* pageObject.function
|
||||
**************************************************************************/
|
||||
$P.fnReset = () => {
|
||||
$P.holdList = [];
|
||||
$("#btnOpenCvlcptOrgnl--${pageName}").show();
|
||||
$("#btnDelete--${pageName}").show();
|
||||
$("#btnDeleteSameRcptYmd--${pageName}").show();
|
||||
|
||||
var searchForm = $("#frmSearch--${pageName}");
|
||||
searchForm.find("input[type='radio']").not("[name='taskSeCd']").prop("checked", false);
|
||||
searchForm.find("input[type='checkbox']").prop("checked", false);
|
||||
searchForm.find("input[type='text']").val("");
|
||||
searchForm.find("input[type='hidden']").val("");
|
||||
searchForm.find("select").each(function(){ $(this).find("option:eq(0)").prop("selected", true); });
|
||||
|
||||
$("#byOutput--${pageName}").val("동적 검색");
|
||||
$("#schRgtrNm--${pageName}").prop("readonly", true); // 사용자 이름
|
||||
$('#schCvlcptRcptYmdFrom--${pageName}').datepicker('setDate', DateUtil.getDateDay(-5475).date);
|
||||
$('#schCvlcptRcptYmdTo--${pageName}').datepicker('setDate', TODAY());
|
||||
|
||||
$P.crdnControl.dataset.setData([]);
|
||||
}
|
||||
|
||||
$P.fnResetAndChangeBiz = (taskSeCd) => {
|
||||
$P.fnReset();
|
||||
$P.crdnControl.urls.load = wctx.url("/"+taskSeCd+"/cvlc/cvlc01/010/list.do");
|
||||
$P.crdnControl.urls.getInfo = wctx.url("/"+taskSeCd+"/cvlc/cvlc01/020/info.do");
|
||||
$P.crdnControl.urls.remove = wctx.url("/"+taskSeCd+"/cvlc/cvlc01/010/remove.do");
|
||||
}
|
||||
|
||||
$P.getParams = () => {
|
||||
var formFields = new FimsFormFields("#frmSearch--${pageName}");
|
||||
var data = formFields.get();
|
||||
data.fetchSize = $P.crdnControl.defaultFetchSize;
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
$P.searchCrdnList = () => {
|
||||
$P.holdList = [];
|
||||
|
||||
$("#btnDelete--${pageName}").show();
|
||||
$("#btnDeleteSameRcptYmd--${pageName}").show();
|
||||
|
||||
$P.crdnControl.query = $P.getParams();
|
||||
$P.crdnControl.load(1);
|
||||
}
|
||||
|
||||
$P.scrollCrdnList = () => {
|
||||
$P.crdnControl.load($P.crdnControl.query.pageNum + 1);
|
||||
}
|
||||
|
||||
$P.refreshCrdnList = () => {
|
||||
|
||||
$P.crdnControl.beforeCurrent = {
|
||||
key : $P.crdnControl.dataset.getCurrent()["CRDN_ID"],
|
||||
index : $P.crdnControl.dataset.getCurrent()["ROW_NUM"] - 1
|
||||
};
|
||||
|
||||
Apply.fromDatasetControl.reload($P.crdnControl).then((resp)=>{
|
||||
Apply.toDataset.set($P.crdnControl.dataset, resp);
|
||||
$P.crdnControl.dataset.onDatasetChange(resp, {reloaded : true});
|
||||
|
||||
if($P.crdnControl.beforeCurrent != null){
|
||||
var beforeCurrentKey = $P.crdnControl.beforeCurrent.key;
|
||||
var beforeCurrentIndex = $P.crdnControl.beforeCurrent.index;
|
||||
$P.crdnControl.beforeCurrent = null;
|
||||
|
||||
if(!$P.crdnControl.dataset.empty){
|
||||
var info = $P.crdnControl.dataset.getData(beforeCurrentKey);
|
||||
|
||||
if(info != null){
|
||||
$P.crdnControl.dataset.setCurrent(beforeCurrentKey,true);
|
||||
} else {
|
||||
|
||||
if(beforeCurrentIndex > ($P.crdnControl.dataset.length - 1)){
|
||||
info = $P.crdnControl.dataset.getDataset()[$P.crdnControl.dataset.length - 1];
|
||||
} else {
|
||||
info = $P.crdnControl.dataset.getDataset()[beforeCurrentIndex];
|
||||
}
|
||||
|
||||
$P.crdnControl.dataset.setCurrent(info["CRDN_ID"],true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$("label[for='table-responsive--${pageName}']").trigger("refreshEnd");
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
$P.fnExcelDown = () => {
|
||||
if($P.crdnControl.dataset.empty){
|
||||
alert("조회된 자료가 없습니다.");
|
||||
return;
|
||||
}
|
||||
|
||||
var cellDefs = getCellDefs($("#crdnThead--${pageName} th").not(".dummy-th").not(":eq(0)"),
|
||||
$($("#crdnRow--${pageName}")[0].content).find("td").not(".dummy-td").not(":eq(0)"));
|
||||
$P.crdnControl.query.cellDefs = cellDefs;
|
||||
|
||||
$P.crdnControl.download();
|
||||
}
|
||||
|
||||
$P.getGridTemplate = () => {
|
||||
var notFound = [document.getElementById("crdnNotFound--${pageName}").innerHTML];
|
||||
var found = document.getElementById("crdnRow--${pageName}").innerHTML;
|
||||
var replacer = (str, dataItem) => str
|
||||
.replace(/{onclick}/gi, "pageObject['${pageName}'].clickCrdnList('" + dataItem.getValue("CRDN_ID") + "');")
|
||||
.replace(/{ondblclick}/gi, "pageObject['${pageName}'].dblclickCrdnList('" + dataItem.getValue("CRDN_ID") + "');");
|
||||
|
||||
return {
|
||||
found : found,
|
||||
notFound : notFound,
|
||||
replacer : replacer
|
||||
};
|
||||
}
|
||||
|
||||
$P.renderCrdnList = (total, listLength, trs, option) => {
|
||||
|
||||
let noMore = (listLength >= total);
|
||||
var initScroll = ($P.crdnControl.query.pageNum < 2);
|
||||
if(option != null && option.reloaded){
|
||||
initScroll = false;
|
||||
}
|
||||
|
||||
$("#table-responsive--${pageName}")[0].changeContent(trs, initScroll, noMore);
|
||||
|
||||
//보안모드
|
||||
fn_securityModeToggle($("#securityMode--top").is(":checked"));
|
||||
|
||||
$P.holdList.forEach(function(item){
|
||||
$("#crdnTbody--${pageName}").find("tr[data-key='"+item+"']").addClass("bg-dark");
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
$P.clickCrdnList = (dataKey) => {
|
||||
if(dataKey == ""){
|
||||
$("#bottomCrdnPlc--${pageName}").val("");
|
||||
return;
|
||||
}
|
||||
|
||||
$("#crdnTbody--${pageName}").setCurrentRow(dataKey);
|
||||
|
||||
$("#bottomCrdnPlc--${pageName}").val($P.crdnControl.dataset.getData(dataKey)["CRDN_PLC"]);
|
||||
|
||||
if($P.holdList.includes(dataKey)){
|
||||
$("#btnOpenCvlcptOrgnl--${pageName}").hide();
|
||||
$("#btnDelete--${pageName}").hide();
|
||||
$("#btnDeleteSameRcptYmd--${pageName}").hide();
|
||||
} else {
|
||||
$("#btnOpenCvlcptOrgnl--${pageName}").show();
|
||||
$("#btnDelete--${pageName}").show();
|
||||
$("#btnDeleteSameRcptYmd--${pageName}").show();
|
||||
}
|
||||
|
||||
Apply.toDataset.current($P.crdnControl.dataset, dataKey);
|
||||
}
|
||||
|
||||
$P.dblclickCrdnList = (dataKey) => {
|
||||
|
||||
if($P.holdList.includes(dataKey)){
|
||||
return;
|
||||
}
|
||||
|
||||
var dialogId = "cvlcptInitialDataEditDialog--${pageName}";
|
||||
|
||||
ajax.get({
|
||||
url : $P.crdnControl.urls.getInfo,
|
||||
data : {
|
||||
"crdnId" : dataKey,
|
||||
"openerPageName" : "${pageName}"
|
||||
},
|
||||
success : (resp) => {
|
||||
dialog.open({
|
||||
id : dialogId,
|
||||
title : "민원접수 초기자료 편집",
|
||||
content : resp,
|
||||
size : "xxl",
|
||||
init : () => {
|
||||
var parentRes = new Object();
|
||||
var childReq = pageObject.childReq.pop();
|
||||
|
||||
for(var reqKey in childReq) {
|
||||
if($P.provide[reqKey]){
|
||||
parentRes[reqKey] = $P.provide[reqKey];
|
||||
} else {
|
||||
parentRes[reqKey] = function(){};
|
||||
}
|
||||
}
|
||||
|
||||
pageObject.parentRes.push(parentRes);
|
||||
|
||||
$("#"+dialogId).find("label[class='parentGrid']").attr("for","table-responsive--${pageName}");
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
$P.fnHold = () => {
|
||||
var curKey = $P.crdnControl.dataset.getCurrent()["CRDN_ID"];
|
||||
if($P.holdList.includes(curKey)){
|
||||
return;
|
||||
}
|
||||
$P.holdList.push(curKey);
|
||||
$("#crdnTbody--${pageName}").find("tr[data-key='"+curKey+"']").addClass("bg-dark");
|
||||
|
||||
$("#btnOpenCvlcptOrgnl--${pageName}").hide();
|
||||
$("#btnDelete--${pageName}").hide();
|
||||
$("#btnDeleteSameRcptYmd--${pageName}").hide();
|
||||
}
|
||||
|
||||
$P.fnRemove = (rcptYmd) => {
|
||||
|
||||
if(rcptYmd != null){
|
||||
var ds = $P.crdnControl.dataset.getDataset();
|
||||
|
||||
var crdnIds = [];
|
||||
|
||||
var filtered = ds.filter(function(item){
|
||||
if(item['CVLCPT_RCPT_YMD'] == rcptYmd && !$P.holdList.includes(item['CRDN_ID'])){
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
});
|
||||
for(var i=0; i < filtered.length; i++){
|
||||
crdnIds.push(filtered[i].CRDN_ID);
|
||||
}
|
||||
|
||||
$P.crdnControl.dataset.select(crdnIds,true);
|
||||
} else {
|
||||
var cur = $P.crdnControl.dataset.getCurrent();
|
||||
if(cur == null){
|
||||
return;
|
||||
}
|
||||
|
||||
var curKey = cur["CRDN_ID"];
|
||||
$P.crdnControl.dataset.select(curKey,true);
|
||||
}
|
||||
|
||||
var selected = $P.crdnControl.dataset.getKeys("selected");
|
||||
if (selected.length < 1) {
|
||||
return;
|
||||
}
|
||||
|
||||
var params = {
|
||||
"crdnIds" : selected.join(",")
|
||||
};
|
||||
|
||||
ajax.post({
|
||||
url : $P.crdnControl.urls.remove,
|
||||
data : params,
|
||||
success : (resp) => {
|
||||
$P.removeCallback(resp);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
$P.removeCallback = (resp) => {
|
||||
if (resp.saved){
|
||||
$P.toast.show();
|
||||
sleep(1000).then(() => $P.refreshCrdnList());
|
||||
}
|
||||
};
|
||||
|
||||
$P.fnRemoveSameRcptYmd = () => {
|
||||
var cur = $P.crdnControl.dataset.getCurrent();
|
||||
if(cur == null){
|
||||
return;
|
||||
}
|
||||
|
||||
var curRcptYmd = cur["CVLCPT_RCPT_YMD"];
|
||||
dialog.alert({
|
||||
content : "접수일 : "+dateFormat.format(curRcptYmd)+"<br/>모든 자료를 제거하시겠습니까?",
|
||||
init : function() {
|
||||
focusOK();
|
||||
},
|
||||
onOK : () => {
|
||||
$P.fnRemove(curRcptYmd);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
$P.fnOpenCvlcptOrgnl = () => {
|
||||
var cur = $P.crdnControl.dataset.getCurrent();
|
||||
if(cur == null){
|
||||
return;
|
||||
}
|
||||
|
||||
var taskSeCd = $("#frmSearch--${pageName} input[name='taskSeCd']:checked").val();
|
||||
|
||||
var dialogId = "cvlcptOrgnlDialog--${pageName}";
|
||||
ajax.get({
|
||||
url : wctx.url("/"+taskSeCd+"/cvlc/cvlc01/050/info.do"),
|
||||
data : { crdnId : cur["CRDN_ID"] },
|
||||
success : (resp) => {
|
||||
dialog.open({
|
||||
id : dialogId,
|
||||
title : "민원내역 원본",
|
||||
content : resp,
|
||||
size : "xl",
|
||||
init : () => {
|
||||
var parentRes = new Object();
|
||||
var childReq = pageObject.childReq.pop();
|
||||
|
||||
for(var reqKey in childReq) {
|
||||
if($P.provide[reqKey]){
|
||||
parentRes[reqKey] = $P.provide[reqKey];
|
||||
} else {
|
||||
parentRes[reqKey] = function(){};
|
||||
}
|
||||
}
|
||||
|
||||
pageObject.parentRes.push(parentRes);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
$P.provide = {
|
||||
"getCountStatus" : function(currentKey){
|
||||
var ds = $P.crdnControl.dataset.getDataset();
|
||||
var index = ds.findIndex(item => item.CRDN_ID == currentKey);
|
||||
return (index+1) + " of " + ds.length;
|
||||
},
|
||||
"getNextKey" : function(currentKey){
|
||||
var ds = $P.crdnControl.dataset.getDataset();
|
||||
var index = ds.findIndex(item => item.CRDN_ID == currentKey);
|
||||
if(ds.length > index+1){
|
||||
if($P.holdList.includes(ds[index+1]["CRDN_ID"])){
|
||||
return $P.provide.getNextKey(ds[index+1]["CRDN_ID"]);
|
||||
} else {
|
||||
return ds[index+1]["CRDN_ID"];
|
||||
}
|
||||
} else {
|
||||
return "";
|
||||
}
|
||||
},
|
||||
"getPrevKey" : function(currentKey){
|
||||
var ds = $P.crdnControl.dataset.getDataset();
|
||||
var index = ds.findIndex(item => item.CRDN_ID == currentKey);
|
||||
if(index != 0 && ds.length > 1){
|
||||
if($P.holdList.includes(ds[index-1]["CRDN_ID"])){
|
||||
return $P.provide.getPrevKey(ds[index-1]["CRDN_ID"]);
|
||||
} else {
|
||||
return ds[index-1]["CRDN_ID"];
|
||||
}
|
||||
} else {
|
||||
return "";
|
||||
}
|
||||
},
|
||||
"selectRow" : function(currentKey){
|
||||
$P.clickCrdnList(currentKey);
|
||||
},
|
||||
"holdRow" : function(currentKey){
|
||||
$P.fnHold(currentKey);
|
||||
},
|
||||
"refreshList" : function(){
|
||||
$P.refreshCrdnList();
|
||||
},
|
||||
"hasData" : function(key){
|
||||
if($P.crdnControl.dataset.getData(key) == null){
|
||||
return false;
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
/**************************************************************************
|
||||
* element.on
|
||||
**************************************************************************/
|
||||
$('#btnReset--${pageName}').on('click', () => $P.fnReset());
|
||||
$('#btnSearch--${pageName}').on('click', () => $P.searchCrdnList());
|
||||
// 동적검색에서 엔터(Enter) 키를 누르면 검색한다.
|
||||
$("#term--${pageName}").onEnterPress($P.searchCrdnList);
|
||||
$('#btnExcel--${pageName}').on('click', () => $P.fnExcelDown());
|
||||
|
||||
$("#btnHold--${pageName}").on("click", () => $P.fnHold());
|
||||
$("#btnDelete--${pageName}").on("click", () => $P.fnRemove());
|
||||
$("#btnDeleteSameRcptYmd--${pageName}").on("click", () => $P.fnRemoveSameRcptYmd());
|
||||
$("#btnOpenCvlcptOrgnl--${pageName}").on("click", () => $P.fnOpenCvlcptOrgnl());
|
||||
|
||||
fnMakeResizableTable($("#table-responsive--${pageName}")[0]);
|
||||
fnMakeScrollableTable($("#table-responsive--${pageName}")[0], $P.scrollCrdnList);
|
||||
|
||||
|
||||
/**************************************************************************
|
||||
* 초기화
|
||||
**************************************************************************/
|
||||
//달력 초기화
|
||||
initDatepicker("frmSearch--${pageName}");
|
||||
initDetailSearchButton("frmSearch--${pageName}");
|
||||
|
||||
var defaultBizValue = $("#layout-navbar input[name='taskSeCd']:checked").val();
|
||||
$("#frmSearch--${pageName} input[name='taskSeCd'][value='" + defaultBizValue + "']").prop("checked",true);
|
||||
$P.fnResetAndChangeBiz(defaultBizValue);
|
||||
|
||||
//보안모드
|
||||
fn_securityModeToggle($("#securityMode--top").is(":checked"));
|
||||
|
||||
$("#frmSearch--${pageName} input[name='taskSeCd']").each(function(i) {
|
||||
$(this).prop("disabled", "true");
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
</script>
|
||||
File diff suppressed because it is too large
Load Diff
@ -1,201 +0,0 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
<c:set var="pageKorName" scope="request">민원 원본 보기</c:set>
|
||||
|
||||
<div class="d-flex flex-row justify-content-evenly">
|
||||
<div class="card">
|
||||
<form id="frmEdit--${pageName}">
|
||||
<input id="crdnId--${pageName}" name="crdnId" type="hidden" data-map="CRDN_ID" />
|
||||
|
||||
<div class="row g-1">
|
||||
<div class="col-md-4">
|
||||
<label for="cvlcptListNo--${pageName}" class="w-px-150 bg-lighter pe-2 col-form-label text-sm-end">
|
||||
목록번호
|
||||
</label>
|
||||
<input type="text" id="cvlcptListNo--${pageName}" name="cvlcptListNo" data-map="CVLCPT_LIST_NO"
|
||||
class="form-control" readonly />
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
<label for="cvlcptRcptNo--${pageName}"
|
||||
class="w-px-150 bg-lighter pe-2 col-form-label text-sm-end">
|
||||
접수번호
|
||||
</label>
|
||||
<input type="text" id="cvlcptRcptNo--${pageName}" name="cvlcptRcptNo"
|
||||
data-map="CVLCPT_RCPT_NO" class="form-control" readonly />
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
<label for="cvlcptAplcntNm--${pageName}"
|
||||
class="w-px-150 bg-lighter pe-2 col-form-label text-sm-end">
|
||||
신청자
|
||||
</label>
|
||||
<input type="text" id="cvlcptAplcntNm--${pageName}" name="cvlcptAplcntNm"
|
||||
data-map="CVLCPT_APLCNT_NM" class="form-control" readonly />
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
<label for="cvlcptRcptYmd--${pageName}"
|
||||
class="w-px-150 bg-lighter pe-2 col-form-label text-sm-end">
|
||||
접수일자
|
||||
</label>
|
||||
<input type="text" id="cvlcptRcptYmd--${pageName}" name="cvlcptRcptYmd"
|
||||
data-map="CVLCPT_RCPT_YMD" class="form-control" readonly />
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
<label for="cvlcptPrcsPrnmtDt--${pageName}"
|
||||
class="w-px-150 bg-lighter pe-2 col-form-label text-sm-end">
|
||||
처리기한
|
||||
</label>
|
||||
<input type="text" id="cvlcptPrcsPrnmtDt--${pageName}" name="cvlcptPrcsPrnmtDt"
|
||||
data-map="CVLCPT_PRCS_PRNMNT_DT" class="form-control" readonly />
|
||||
</div>
|
||||
<div class="col-md-12">
|
||||
<label for="cvlcptAplyCn--${pageName}"
|
||||
class="w-px-150 bg-lighter pe-2 col-form-label text-sm-center">
|
||||
민원 내용
|
||||
</label>
|
||||
<span class="float-end pe-4">
|
||||
<button type="button" class="btn btn-blue" id="btnMakeHwp--${pageName}" title="한글파일 다운">
|
||||
한글파일 다운
|
||||
</button>
|
||||
<div id="tempArea--${pageName}"></div>
|
||||
</span>
|
||||
</div>
|
||||
<div class="col-md-12">
|
||||
<div class="px-2">
|
||||
<textarea id="cvlcptAplyCn--${pageName}" name="cvlcptAplyCn" data-map="CVLCPT_APLY_CN"
|
||||
rows="25" class="w-100" readonly
|
||||
></textarea>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<label for="cvlcptAplySeCd--${pageName}"
|
||||
class="w-px-150 bg-lighter pe-2 col-form-label text-sm-center">
|
||||
접수경로
|
||||
</label>
|
||||
<select id="cvlcptAplySeCd--${pageName}" name="cvlcptAplySeCd" class="form-select"
|
||||
data-map="CVLCPT_APLY_SE_CD"
|
||||
disabled="disabled">
|
||||
<option value=""></option>
|
||||
<c:forEach items="${FIM039List}" var="item">
|
||||
<option value="${item.code}">${item.value}</option>
|
||||
</c:forEach>
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-md-6" id="pageNavArea--${pageName}">
|
||||
<input type="text" id="countStauts--${pageName}"
|
||||
class="form-control w-px-150 text-center fw-bold" readonly />
|
||||
<button type="button" id="btnPrev--${pageName}" class="w-px-50 btn-PageUp">◀</button>
|
||||
<button type="button" id="btnNext--${pageName}" class="w-px-50 btn-PageDown">▶</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
pageObject["${pageName}"] = {};
|
||||
pageObject["${pageName}"].provided = {};
|
||||
|
||||
pageObject.childReq = [];
|
||||
pageObject.childReq.push({
|
||||
getCountStatus : function(){ return ""; },
|
||||
getNextKey : function(){ return ""; },
|
||||
getPrevKey : function(){ return ""; },
|
||||
selectRow : function(){}
|
||||
});
|
||||
|
||||
$(document).ready(function() {
|
||||
|
||||
var $P = pageObject["${pageName}"];
|
||||
$P.taskSeCd = "${taskSeCd}";
|
||||
|
||||
if(pageObject.parentRes.length > 0){
|
||||
$P.provided = pageObject.parentRes.pop();
|
||||
} else {
|
||||
$P.provided = pageObject.childReq.pop();
|
||||
$("#pageNavArea--${pageName}").hide();
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* DatasetControl, Dataset, FormFields
|
||||
**************************************************************************/
|
||||
$P.formFields = new FimsFormFields("#frmEdit--${pageName}");
|
||||
|
||||
$P.cvlcptControl = new DatasetControl({
|
||||
dataGetter:obj => obj.cvlcptInfo,
|
||||
keymapper:info => info ? info.CRDN_ID : "",
|
||||
urls : {
|
||||
getInfo : wctx.url("/"+$P.taskSeCd+"/cvlc/cvlc01/050/info.do")
|
||||
},
|
||||
formats: {
|
||||
CVLCPT_RCPT_YMD : dateFormat,
|
||||
CVLCPT_PRCS_PRNMNT_DT : dateFormat
|
||||
}
|
||||
});
|
||||
|
||||
/**************************************************************************
|
||||
* Dataset.on
|
||||
**************************************************************************/
|
||||
$P.cvlcptControl.dataset.onCurrentChange = (dataItem) => {
|
||||
$P.formFields.set($P.cvlcptControl,dataItem);
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* pageObject.function
|
||||
**************************************************************************/
|
||||
|
||||
$P.fnPrev = () => {
|
||||
var prevKey = $P.provided.getPrevKey($("#crdnId--${pageName}").val());
|
||||
if(prevKey != ""){
|
||||
$P.fnGo(prevKey);
|
||||
}
|
||||
}
|
||||
|
||||
$P.fnNext = () => {
|
||||
var nextKey = $P.provided.getNextKey($("#crdnId--${pageName}").val());
|
||||
if(nextKey != ""){
|
||||
$P.fnGo(nextKey);
|
||||
}
|
||||
}
|
||||
|
||||
$P.fnGo = (crdnId) => {
|
||||
ajax.get({
|
||||
url: $P.cvlcptControl.urls.getInfo,
|
||||
data: { "crdnId" : crdnId },
|
||||
headers: {
|
||||
Accept: "application/json; charset=utf-8"
|
||||
},
|
||||
success : (resp) => {
|
||||
var cvlcptInfo = resp.cvlcptInfo;
|
||||
cvlcptInfo.CVLCPT_APLY_CN = escapeHTMLEntity(cvlcptInfo.CVLCPT_APLY_CN);
|
||||
$P.cvlcptControl.dataset.setData([cvlcptInfo]);
|
||||
|
||||
var cs = $P.provided.getCountStatus($("#crdnId--${pageName}").val());
|
||||
$("#countStauts--${pageName}").val(cs);
|
||||
$P.provided.selectRow(crdnId);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
$P.fnMakeHwp = () => {
|
||||
var url = wctx.url("/"+$P.taskSeCd+"/cvlc/cvlc01/050/makeFileFromHwpFormat.do");
|
||||
var parameter = toQuery({ crdnId : $("#crdnId--${pageName}").val() });
|
||||
|
||||
document.location.href = url + "?" + parameter;
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* element.on
|
||||
**************************************************************************/
|
||||
$("#btnPrev--${pageName}").on("click", () => $P.fnPrev() );
|
||||
$("#btnNext--${pageName}").on("click", () => $P.fnNext() );
|
||||
$("#btnMakeHwp--${pageName}").on("click", () => $P.fnMakeHwp() );
|
||||
|
||||
/**************************************************************************
|
||||
* 초기화
|
||||
**************************************************************************/
|
||||
var cvlcptInfo = ${cvlcptInfo};
|
||||
cvlcptInfo.CVLCPT_APLY_CN = escapeHTMLEntity(cvlcptInfo.CVLCPT_APLY_CN);
|
||||
$P.cvlcptControl.dataset.setData([cvlcptInfo]);
|
||||
var cs = $P.provided.getCountStatus($("#crdnId--${pageName}").val());
|
||||
$("#countStauts--${pageName}").val(cs);
|
||||
});
|
||||
</script>
|
||||
@ -1,710 +0,0 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
<c:set var="pageKorName" scope="request">민원답변대상자료</c:set>
|
||||
<div class="content-wrapper">
|
||||
<div class="container-xxl flex-grow-1 px-0">
|
||||
<div class="card wrapper-list">
|
||||
|
||||
<div class="container-page-btn">
|
||||
<button type="button" id="btnReset--${pageName}" class="btn btn-outline-dark w-px-120" title="초기화">
|
||||
초기화
|
||||
</button>
|
||||
<span class="container-window-btn-right">
|
||||
<button type="button" id="btnSearch--${pageName}" class="btn btn-search w-px-120" title="검색">
|
||||
검색
|
||||
</button>
|
||||
<button type="button" id="btnExcel--${pageName}" class="btn btn-excel w-px-120" title="엑셀 저장">
|
||||
엑셀
|
||||
</button>
|
||||
<button type="button" id="btnExcelForApproval--${pageName}" class="btn btn-excel w-px-120" title="엑셀 저장">
|
||||
엑셀(사진 포함)
|
||||
</button>
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<form id="frmSearch--${pageName}" name="frmSearch">
|
||||
<div class="container-search">
|
||||
<div class="row g-1">
|
||||
<div class="col-12">
|
||||
<span class="form-label fw-bold form-search-title w-px-120 text-end">업무구분</span>
|
||||
<span class="form-search-linebox">
|
||||
<c:forEach items="${TaskListForSgg}" var="item">
|
||||
<label>
|
||||
<input name="taskSeCd" type="radio" value="${item.code}"
|
||||
class="form-check-input" alt="업무구분"
|
||||
onchange="pageObject['${pageName}'].fnResetAndChangeBiz(this.value);">
|
||||
${item.value}
|
||||
</label>
|
||||
</c:forEach>
|
||||
</span>
|
||||
</div>
|
||||
<div class="col-6">
|
||||
<label class="form-label fw-bold form-search-title w-px-120 text-end" for="schCvlcptRcptYmdFrom--${pageName}">접수일자</label>
|
||||
<span class="form-search-linebox">
|
||||
<input type="text" id="schCvlcptRcptYmdFrom--${pageName}" name="schCvlcptRcptYmdFrom"
|
||||
class="form-control form-date"
|
||||
data-fmt-type="day" title="시작 날짜 선택" />
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
~
|
||||
<input type="text" id="schCvlcptRcptYmdTo--${pageName}" name="schCvlcptRcptYmdTo"
|
||||
class="form-control form-date"
|
||||
data-fmt-type="day" title="종료 날짜 선택">
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
</span>
|
||||
</div>
|
||||
<div class="col-6">
|
||||
<label class="form-label fw-bold form-search-title w-px-120 text-end" for="cvlcptPrcsCd--${pageName}">처리구분</label>
|
||||
<select id="cvlcptPrcsCd--${pageName}" name="cvlcptPrcsCd" class="form-select w-px-160">
|
||||
<option value="">전체</option>
|
||||
<c:forEach items="${FIM017List}" var="item">
|
||||
<c:if test="${item.code == '02' or item.code == '03' or item.code == '04'}">
|
||||
<option value="${item.code}">${item.value}</option>
|
||||
</c:if>
|
||||
</c:forEach>
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-6">
|
||||
<label class="form-label fw-bold form-search-title w-px-120 text-end" for="schCvlcptPrcsPrnmntDtFrom--${pageName}">처리기한</label>
|
||||
<span class="form-search-linebox">
|
||||
<input type="text" id="schCvlcptPrcsPrnmntDtFrom--${pageName}" name="schCvlcptPrcsPrnmntDtFrom"
|
||||
class="form-control form-date"
|
||||
data-fmt-type="day" title="시작 날짜 선택" />
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
~
|
||||
<input type="text" id="schCvlcptPrcsPrnmntDtTo--${pageName}" name="schCvlcptPrcsPrnmntDtTo"
|
||||
class="form-control form-date"
|
||||
data-fmt-type="day" title="종료 날짜 선택">
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
</span>
|
||||
</div>
|
||||
<div class="col-6">
|
||||
<input type="hidden" id="by--${pageName}" name="by" />
|
||||
<input type="text" class="form-control fw-bold w-px-120 text-end" id="byOutput--${pageName}" value="동적 검색" readonly />
|
||||
<input type="hidden" id="mainOption--${pageName}" name="mainOption" />
|
||||
<input type="hidden" id="subOption--${pageName}" name="subOption" />
|
||||
<input type="text" class="form-control w-px-400" id="term--${pageName}" name="term" autocomplete="off" />
|
||||
<!-- 상세 검색조건 버튼 -->
|
||||
<span class="flr">
|
||||
<button type="button" class="btn btn-open-detail" data-bs-toggle="collapse" data-bs-target="#searchDetail--${pageName}">
|
||||
<i class="bx bx-chevron-down"></i>
|
||||
상세검색
|
||||
</button>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="searchDetail--${pageName}" class="container-search container-search-detail collapse">
|
||||
<div class="row">
|
||||
<div class="col-6">
|
||||
<select class="form-select w-px-120 text-center" id="schRegDateOpt--${pageName}" name="schRegDateOpt">
|
||||
<option value="regDt">등록일자</option>
|
||||
<option value="mdfcnDt">수정일자</option>
|
||||
</select>
|
||||
<span class="form-search-linebox">
|
||||
<input type="text" class="form-control form-date" id="schRegDateFrom--${pageName}" name="schRegDateFrom"
|
||||
data-fmt-type="day" title="시작 날짜 선택" />
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
~
|
||||
<input type="text" class="form-control form-date" id="schRegDateTo--${pageName}" name="schRegDateTo"
|
||||
data-fmt-type="day" title="종료 날짜 선택">
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<div class="text-red">
|
||||
빨간색 글자로 표시된 자료는 복사등록 자료가 있습니다.
|
||||
</div>
|
||||
<div>
|
||||
<span class="container-page-btn">
|
||||
<div class="d-flex flex-row justify-content-between">
|
||||
<span id="crdnPaging--${pageName}PagingInfo" class="dataTables_info"
|
||||
role="status" aria-live="polite"></span>
|
||||
<ul id="crdnPaging--${pageName}" class="pagination pagination-primary">
|
||||
</ul>
|
||||
</div>
|
||||
<span id="gridbuttonArea--${pageName}" class="container-window-btn-right">
|
||||
<button type="button" id="btnOpenCvlcptOrgnl--${pageName}"
|
||||
class="btn btn-primary" title="민원원본보기">민원원본보기</button>
|
||||
<button type="button" id="btnOpenAnswerPreview--${pageName}"
|
||||
class="btn btn-primary" title="답변미리보기">답변미리보기</button>
|
||||
<button type="button" id="btnExecuteAnswer--${pageName}"
|
||||
class="btn btn-primary" title="답변등록 실행">☑ 답변등록 실행</button>
|
||||
<button type="button" id="btnAnswerComplete--${pageName}"
|
||||
class="btn btn-primary" title="답변완료로 수정">☑ 답변완료로 수정</button>
|
||||
<span slot="button">
|
||||
<template class="dpv">
|
||||
<slot>
|
||||
<button type="button" id="btnExecuteDisabledTagInfoInquire--${pageName}"
|
||||
class="btn btn-primary" title="표지정보 조회">☑ 표지정보 조회</button>
|
||||
</slot>
|
||||
</template>
|
||||
</span>
|
||||
</span>
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<div class="card-datatable text-nowrap">
|
||||
<div id="DataTables_Table_0_wrapper--${pageName}" class="dataTables_wrapper dt-bootstrap5 no-footer">
|
||||
<div id="table-responsive--${pageName}" class="table-responsive ox-scroll oy-scroll h-px-500">
|
||||
<table id="DataTables_Table_0--${pageName}"
|
||||
class="table-layout-fixed datatables-ajax table table-bordered dataTable no-footer">
|
||||
<thead id="crdnThead--${pageName}" class="sticky-thead">
|
||||
<tr data-by="by--${pageName}" data-by-output="byOutput--${pageName}"
|
||||
data-main-option="mainOption--${pageName}" data-sub-option="subOption--${pageName}">
|
||||
<th style="width: 80px;">No.</th>
|
||||
<th style="width: 60px;">
|
||||
<input type="checkbox" id="gridAllCheckbox--${pageName}"
|
||||
onchange="pageObject['${pageName}'].checkCrdnList(this, this.checked);" />
|
||||
</th>
|
||||
<th onclick="searchFromGridTitle('CVLCPT_RCPT_NO',this.innerText,'match','part');"
|
||||
style="width: 180px;">접수번호</th>
|
||||
<th onclick="searchFromGridTitle('CVLCPT_LIST_NO',this.innerText,'match','part');"
|
||||
style="width: 160px;">목록번호</th>
|
||||
<th onclick="searchFromGridTitle('CVLCPT_APLCNT_NM',this.innerText,'match','part');"
|
||||
style="width: 160px;">신고자</th>
|
||||
<th onclick="searchFromGridTitle('CVLCPT_PRCS_PIC_NM',this.innerText,'match','part');"
|
||||
style="width: 160px;">담당자</th>
|
||||
<th onclick="searchFromGridTitle('CVLCPT_PRCS_PIC_TELNO',this.innerText,'match','part');"
|
||||
style="width: 160px;">담당자전화번호</th>
|
||||
<th onclick="searchFromGridTitle('CVLCPT_RCPT_YMD',this.innerText,'ymd','');"
|
||||
style="width: 160px;">접수일자</th>
|
||||
<th onclick="searchFromGridTitle('CVLCPT_PRCS_PRNMNT_DT',this.innerText,'ymd','');"
|
||||
style="width: 180px;">처리기한</th>
|
||||
<th onclick="searchFromGridTitle('CRDN_YMD','위반일자','ymd','');"
|
||||
style="width: 180px;">위반일시</th>
|
||||
<th onclick="searchFromGridTitle('VLTN_ARTCL',this.innerText);"
|
||||
style="width: 160px;">위반내용</th>
|
||||
<th onclick="searchFromGridTitle('VHRNO',this.innerText,'match','part');"
|
||||
style="width: 160px;">차량번호</th>
|
||||
<th onclick="searchFromGridTitle('LEVY_EXCL_RSN_CD',this.innerText,'codeValue','FIM022');"
|
||||
style="width: 160px;">서손/계고사유</th>
|
||||
<th onclick="searchFromGridTitle('ETC_CN',this.innerText,'match','part');"
|
||||
style="width: 160px;">특기사항</th>
|
||||
<th class="dummy-th"></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="crdnTbody--${pageName}"></tbody>
|
||||
<template id="crdnRow--${pageName}">
|
||||
<tr data-key="{CRDN_ID}">
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-end">{ROW_NUM}</td>
|
||||
<td class="text-center">
|
||||
<input type="checkbox" name="gridCheckbox" name="gridCheckbox" value="{CRDN_ID}"
|
||||
onchange="pageObject['${pageName}'].checkCrdnList(this, this.checked);" />
|
||||
</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-center">{CVLCPT_RCPT_NO}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-center">{CVLCPT_LIST_NO}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-center">{CVLCPT_APLCNT_NM}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-center">{CVLCPT_PRCS_PIC_NM}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-center">{CVLCPT_PRCS_PIC_TELNO}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-center">{CVLCPT_RCPT_YMD}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-center">{CVLCPT_PRCS_PRNMNT_DT}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-center">{CRDN_YMD_TM}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-center">{VLTN_ARTCL}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-center">{VHRNO}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-center">{LEVY_EXCL_RSN_NM}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-center">{ETC_CN}</td>
|
||||
<td class="dummy-td"></td>
|
||||
</tr>
|
||||
</template>
|
||||
<template id="crdnNotFound--${pageName}">
|
||||
<tr>
|
||||
<td valign="top" colspan="15" class="dataTables_empty text-center">
|
||||
민원 정보를 찾지 못했습니다.
|
||||
</td>
|
||||
</tr>
|
||||
</template>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="content-backdrop fade"></div>
|
||||
</div>
|
||||
|
||||
|
||||
<script>
|
||||
|
||||
/**************************************************************************
|
||||
* Global Variable
|
||||
**************************************************************************/
|
||||
var FIM022 = new CommonCodes(${FIM022});
|
||||
var FIM026 = new CommonCodes(${FIM026});
|
||||
pageObject["${pageName}"] = {};
|
||||
|
||||
|
||||
$(document).ready(function(){
|
||||
|
||||
var $P = pageObject["${pageName}"];
|
||||
|
||||
/**************************************************************************
|
||||
* DatasetControl
|
||||
**************************************************************************/
|
||||
$P.crdnControl = new DatasetControl({
|
||||
dataGetter : obj => obj["List"], appendData:true,
|
||||
keymapper : info => info ? info.CRDN_ID : "",
|
||||
urls : {
|
||||
load : "",
|
||||
getInfo : "",
|
||||
update : ""
|
||||
},
|
||||
formats : {
|
||||
CRDN_REG_SE_CD : FIM026,
|
||||
CVLCPT_RCPT_YMD : dateFormat,
|
||||
CVLCPT_PRCS_PRNMNT_DT : datetimeFormat,
|
||||
CRDN_YMD_TM : datetimeFormat,
|
||||
LEVY_EXCL_RSN_CD : FIM022
|
||||
}
|
||||
});
|
||||
$P.crdnControl.defaultFetchSize = FETCH_XS;
|
||||
$P.crdnControl.query = { pageNum : 1, fetchSize : $P.crdnControl.defaultFetchSize };
|
||||
$P.crdnControl.beforeCurrent = null;
|
||||
|
||||
/**************************************************************************
|
||||
* Dataset.on
|
||||
**************************************************************************/
|
||||
$P.crdnControl.dataset.onDatasetChange = (obj, option) => {
|
||||
|
||||
var t = $P.getGridTemplate();
|
||||
var trs = Apply.fromDataset.getTbody($P.crdnControl.dataset, t.found, t.notFound, t.replacer);
|
||||
$P.renderCrdnList(obj["Total"], $P.crdnControl.dataset.length, trs, option);
|
||||
|
||||
Apply.fromDataset.paging($P.crdnControl.dataset, obj, "crdnPaging--${pageName}");
|
||||
};
|
||||
|
||||
$P.crdnControl.dataset.onCurrentChange = (dataItem) => {
|
||||
Apply.fromDataset.currentRow($P.crdnControl.dataset, dataItem, $("#crdnTbody--${pageName}")[0]);
|
||||
}
|
||||
|
||||
$P.crdnControl.dataset.onSelectionChange = (selectedArr) => {
|
||||
Apply.fromDataset.gridCheckbox($P.crdnControl.dataset, document.getElementById("crdnTbody--${pageName}"), 1, selectedArr);
|
||||
Apply.fromDataset.gridButton($P.crdnControl.dataset, $("#btnExecuteAnswer--${pageName}")[0], selectedArr);
|
||||
Apply.fromDataset.gridButton($P.crdnControl.dataset, $("#btnAnswerComplete--${pageName}")[0], selectedArr);
|
||||
Apply.fromDataset.gridButton($P.crdnControl.dataset, $("#btnExecuteDisabledTagInfoInquire--${pageName}")[0], selectedArr);
|
||||
};
|
||||
|
||||
/**************************************************************************
|
||||
* pageObject.function
|
||||
**************************************************************************/
|
||||
$P.fnReset = () => {
|
||||
var searchForm = $("#frmSearch--${pageName}");
|
||||
searchForm.find("input[type='radio']").not("[name='taskSeCd']").prop("checked", false);
|
||||
searchForm.find("input[type='checkbox']").prop("checked", false);
|
||||
searchForm.find("input[type='text']").val("");
|
||||
searchForm.find("input[type='hidden']").val("");
|
||||
searchForm.find("select").each(function(){ $(this).find("option:eq(0)").prop("selected", true); });
|
||||
|
||||
$("#byOutput--${pageName}").val("동적 검색");
|
||||
$('#schCvlcptRcptYmdFrom--${pageName}').datepicker('setDate', DateUtil.getDateDay(-31).date);
|
||||
$('#schCvlcptRcptYmdTo--${pageName}').datepicker('setDate', TODAY());
|
||||
|
||||
$P.crdnControl.dataset.setData([]);
|
||||
}
|
||||
|
||||
$P.fnResetAndChangeBiz = taskSeCd => {
|
||||
var clsForTask = taskSeCd.toLowerCase();
|
||||
//업무별 버튼
|
||||
renderForTask("gridbuttonArea--${pageName}", clsForTask);
|
||||
//버튼 이벤트 재매핑
|
||||
$("#btnExecuteDisabledTagInfoInquire--${pageName}").off("click");
|
||||
$("#btnExecuteDisabledTagInfoInquire--${pageName}").on("click", () => $P.fnExecuteDisabledTagInfoInquire());
|
||||
|
||||
$P.fnReset();
|
||||
$P.crdnControl.urls.load = wctx.url("/"+taskSeCd+"/cvlc/cvlc02/030/list.do");
|
||||
$P.crdnControl.urls.update = wctx.url("/"+taskSeCd+"/cvlc/cvlc02/030/update.do");
|
||||
$P.crdnControl.urls.getInfo = wctx.url("/sprt/sprt02/010/main.do");
|
||||
}
|
||||
|
||||
$P.getParams = () => {
|
||||
var formFields = new FimsFormFields("#frmSearch--${pageName}");
|
||||
var data = formFields.get();
|
||||
data.fetchSize = $P.crdnControl.defaultFetchSize;
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
$P.searchCrdnList = () => {
|
||||
$P.crdnControl.query = $P.getParams();
|
||||
$P.crdnControl.load(1);
|
||||
}
|
||||
|
||||
$P.scrollCrdnList = () => {
|
||||
$P.crdnControl.load($P.crdnControl.query.pageNum + 1);
|
||||
}
|
||||
|
||||
$P.refreshCrdnList = () => {
|
||||
|
||||
$P.crdnControl.reload({all : true});
|
||||
}
|
||||
|
||||
$P.fnExcelDown = (forApproval) => {
|
||||
|
||||
if($P.crdnControl.dataset.empty){
|
||||
alert("조회된 자료가 없습니다.");
|
||||
return;
|
||||
}
|
||||
|
||||
var cellDefs = getCellDefs($("#crdnThead--${pageName} th").not(".dummy-th").not(":eq(0)").not(":eq(0)"),
|
||||
$($("#crdnRow--${pageName}")[0].content).find("td").not(".dummy-td").not(":eq(0)").not(":eq(0)"));
|
||||
$P.crdnControl.query.cellDefs = cellDefs;
|
||||
|
||||
if(forApproval){
|
||||
$P.crdnControl.query.includePhoto = "Y";
|
||||
} else {
|
||||
$P.crdnControl.query.includePhoto = "N";
|
||||
}
|
||||
|
||||
$P.crdnControl.download();
|
||||
|
||||
$P.crdnControl.query.includePhoto = null;
|
||||
};
|
||||
|
||||
|
||||
$P.getGridTemplate = () => {
|
||||
var notFound = [document.getElementById("crdnNotFound--${pageName}").innerHTML];
|
||||
var found = document.getElementById("crdnRow--${pageName}").innerHTML;
|
||||
var replacer = (str, dataItem) => str
|
||||
.replace(/{onclick}/gi, "pageObject['${pageName}'].clickCrdnList('" + dataItem.getValue("CRDN_ID") + "');")
|
||||
.replace(/{ondblclick}/gi, "pageObject['${pageName}'].dblclickCrdnList('" + dataItem.getValue("CRDN_ID") + "');");
|
||||
|
||||
return {
|
||||
found : found,
|
||||
notFound : notFound,
|
||||
replacer : replacer
|
||||
};
|
||||
}
|
||||
|
||||
$P.renderCrdnList = (total, listLength, trs, option) => {
|
||||
|
||||
let noMore = (listLength >= total);
|
||||
var initScroll = ($P.crdnControl.query.pageNum < 2);
|
||||
if(option != null && option.reloaded){
|
||||
initScroll = false;
|
||||
}
|
||||
|
||||
$("#table-responsive--${pageName}")[0].changeContent(trs, initScroll, noMore);
|
||||
|
||||
//보안모드
|
||||
fn_securityModeToggle($("#securityMode--top").is(":checked"));
|
||||
|
||||
|
||||
$("#crdnTbody--${pageName}").find("tr[data-key]").each(function(item){
|
||||
var crdnId = this.dataset.key;
|
||||
|
||||
var data = $P.crdnControl.dataset.getData(crdnId);
|
||||
|
||||
if(data.COPY_EXIST_YN == "Y"){
|
||||
$(this).addClass("text-red");
|
||||
} else {
|
||||
$(this).removeClass("text-red");
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
$P.checkCrdnList = (element, bool) => {
|
||||
GRID.checkbox.sync(element, bool);
|
||||
|
||||
var atLeastOne = GRID.checkbox.countChecked(element) > 0;
|
||||
$("#btnExecuteAnswer--${pageName}").prop("disabled", !atLeastOne);
|
||||
$("#btnAnswerComplete--${pageName}").prop("disabled", !atLeastOne);
|
||||
$("#btnExecuteDisabledTagInfoInquire--${pageName}").prop("disabled", !atLeastOne);
|
||||
|
||||
Apply.toDataset.selection($P.crdnControl.dataset, element, bool);
|
||||
}
|
||||
|
||||
$P.clickCrdnList = (dataKey) => {
|
||||
if(dataKey == ""){
|
||||
return;
|
||||
}
|
||||
$("#crdnTbody--${pageName}").setCurrentRow(dataKey);
|
||||
|
||||
Apply.toDataset.current($P.crdnControl.dataset, dataKey);
|
||||
}
|
||||
|
||||
$P.dblclickCrdnList = (dataKey) => {
|
||||
let params = {
|
||||
callControlName : "pageObject['${pageName}'].crdnControl"
|
||||
, crdnId : dataKey
|
||||
}
|
||||
|
||||
ajax.get({
|
||||
url : $P.crdnControl.urls.getInfo,
|
||||
data : params,
|
||||
success : (resp) => {
|
||||
|
||||
dialog.open({
|
||||
id : "totalInfoMainDialog",
|
||||
title : "개별총정보", size : "xxl", content : resp,
|
||||
init : () => {}
|
||||
});
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
$P.fnOpenCvlcptOrgnl = () => {
|
||||
var cur = $P.crdnControl.dataset.getCurrent();
|
||||
if(cur == null){
|
||||
return;
|
||||
}
|
||||
|
||||
var taskSeCd = $("#frmSearch--${pageName} input[name='taskSeCd']:checked").val();
|
||||
|
||||
var dialogId = "cvlcptOrgnlDialog--${pageName}";
|
||||
ajax.get({
|
||||
url : wctx.url("/"+taskSeCd+"/cvlc/cvlc01/050/info.do"),
|
||||
data : { crdnId : cur["CRDN_ID"] },
|
||||
success : (resp) => {
|
||||
dialog.open({
|
||||
id : dialogId,
|
||||
title : "민원내역 원본",
|
||||
content : resp,
|
||||
size : "xl",
|
||||
init : () => {
|
||||
var parentRes = new Object();
|
||||
var childReq = pageObject.childReq.pop();
|
||||
|
||||
for(var reqKey in childReq) {
|
||||
if($P.provide[reqKey]){
|
||||
parentRes[reqKey] = $P.provide[reqKey];
|
||||
} else {
|
||||
parentRes[reqKey] = function(){};
|
||||
}
|
||||
}
|
||||
|
||||
pageObject.parentRes.push(parentRes);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
$P.fnOpenAnswerPreview = () => {
|
||||
var cur = $P.crdnControl.dataset.getCurrent();
|
||||
if(cur == null){
|
||||
return;
|
||||
}
|
||||
|
||||
var taskSeCd = $("#frmSearch--${pageName} input[name='taskSeCd']:checked").val();
|
||||
|
||||
var dialogId = "answerPreviewDialog--${pageName}";
|
||||
ajax.get({
|
||||
url : wctx.url("/"+taskSeCd+"/cvlc/cvlc02/060/info.do"),
|
||||
data : { crdnId : cur["CRDN_ID"] },
|
||||
success : (resp) => {
|
||||
dialog.open({
|
||||
id : dialogId,
|
||||
title : "답변내용 미리보기",
|
||||
content : resp,
|
||||
size : "xl",
|
||||
init : () => {
|
||||
var parentRes = new Object();
|
||||
var childReq = pageObject.childReq.pop();
|
||||
|
||||
for(var reqKey in childReq) {
|
||||
if($P.provide[reqKey]){
|
||||
parentRes[reqKey] = $P.provide[reqKey];
|
||||
} else {
|
||||
parentRes[reqKey] = function(){};
|
||||
}
|
||||
}
|
||||
|
||||
pageObject.parentRes.push(parentRes);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
$P.fnExecuteAnswer = () => {
|
||||
|
||||
var count = $P.crdnControl.dataset.getKeys("selected").length;
|
||||
|
||||
dialog.alert({
|
||||
content : "선택된 "+count+"건의 자료를 답변등록을 실행하시겠습니까?",
|
||||
init : function() {
|
||||
focusOK();
|
||||
},
|
||||
onOK : () => {
|
||||
$P.save('answerExecute');
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
$P.fnAnswerComplete = () => {
|
||||
|
||||
var count = $P.crdnControl.dataset.getKeys("selected").length;
|
||||
|
||||
dialog.alert({
|
||||
content : "선택된 "+count+"건의 자료를 답변완료 상태로 변경하시겠습니까?",
|
||||
init : function() {
|
||||
focusOK();
|
||||
},
|
||||
onOK : () => {
|
||||
$P.save('answerComplete');
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
//
|
||||
$P.save = (processType) => {
|
||||
|
||||
ajax.post({
|
||||
url : $P.crdnControl.urls.update,
|
||||
data : {
|
||||
"processType" : processType,
|
||||
"crdnIds" : $P.crdnControl.dataset.getKeys("selected").join(",")
|
||||
},
|
||||
success : (resp) => {
|
||||
if(resp.saved){
|
||||
dialog.alert({
|
||||
content : "처리되었습니다.",
|
||||
init : function() {
|
||||
focusClose();
|
||||
}
|
||||
});
|
||||
$P.refreshCrdnList();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
//표지정보 조회
|
||||
$P.fnExecuteDisabledTagInfoInquire = () => {
|
||||
|
||||
var keys = [];
|
||||
|
||||
var selected = $P.crdnControl.dataset.getDataset("selected");
|
||||
|
||||
for(var i=0; i < selected.length; i++){
|
||||
if(selected[i].CVLCPT_PRCS_CD == "02"){
|
||||
keys.push(selected[i].CRDN_ID);
|
||||
}
|
||||
}
|
||||
|
||||
if(keys.length == 0){
|
||||
dialog.alert({
|
||||
content : "표지조회는 부과대상자료만 가능합니다.<br/>선택된 자료 중에 부과대상자료가 없습니다.",
|
||||
init : function() {
|
||||
focusClose();
|
||||
}
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
var message = "※표지정보 조회 후 장애인차량이 아닌 자료는 서손처리 됩니다."
|
||||
+"<br/>※현재 날짜("+TODAY()+")를 기준으로 차량번호로 조회합니다."
|
||||
+"<br/>표지조회를 실행하시겠습니까?"
|
||||
+"<br/>부과대상 자료 : "+keys.length+"건";
|
||||
|
||||
dialog.alert({
|
||||
content : message,
|
||||
init : function() {
|
||||
setDialogZindex();
|
||||
focusOK();
|
||||
},
|
||||
onOK : () => {
|
||||
ajax.get({
|
||||
url : wctx.url("/DPV/cvlc/cvlc02/040/update.do"),
|
||||
data : {
|
||||
"crdnIds" : keys.join(",")
|
||||
},
|
||||
success : (resp) => {
|
||||
dialog.alert({
|
||||
content : "표지정보조회가 실행되었습니다.",
|
||||
init : function() {
|
||||
setDialogZindex();
|
||||
focusClose();
|
||||
}
|
||||
});
|
||||
|
||||
$P.refreshCrdnList();
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
$P.provide = {
|
||||
"getCountStatus" : function(currentKey){
|
||||
var ds = $P.crdnControl.dataset.getDataset();
|
||||
var index = ds.findIndex(item => item.CRDN_ID == currentKey);
|
||||
return (index+1) + " of " + ds.length;
|
||||
},
|
||||
"getNextKey" : function(currentKey){
|
||||
var ds = $P.crdnControl.dataset.getDataset();
|
||||
var index = ds.findIndex(item => item.CRDN_ID == currentKey);
|
||||
if(ds.length > index+1){
|
||||
return ds[index+1]["CRDN_ID"];
|
||||
} else {
|
||||
return "";
|
||||
}
|
||||
},
|
||||
"getPrevKey" : function(currentKey){
|
||||
var ds = $P.crdnControl.dataset.getDataset();
|
||||
var index = ds.findIndex(item => item.CRDN_ID == currentKey);
|
||||
if(index != 0 && ds.length > 1){
|
||||
return ds[index-1]["CRDN_ID"];
|
||||
} else {
|
||||
return "";
|
||||
}
|
||||
},
|
||||
"selectRow" : function(currentKey){
|
||||
$P.clickCrdnList(currentKey);
|
||||
},
|
||||
"refreshList" : function(){
|
||||
$P.refreshCrdnList();
|
||||
}
|
||||
};
|
||||
|
||||
/**************************************************************************
|
||||
* element.on
|
||||
**************************************************************************/
|
||||
$('#btnReset--${pageName}').on('click', () => $P.fnReset());
|
||||
$('#btnSearch--${pageName}').on('click', () => $P.searchCrdnList());
|
||||
// 동적검색에서 엔터(Enter) 키를 누르면 검색한다.
|
||||
$("#term--${pageName}").onEnterPress($P.searchCrdnList);
|
||||
$('#btnExcel--${pageName}').on('click', () => $P.fnExcelDown(false));
|
||||
$('#btnExcelForApproval--${pageName}').on('click', () => $P.fnExcelDown(true));
|
||||
|
||||
$("#btnOpenCvlcptOrgnl--${pageName}").on("click", () => $P.fnOpenCvlcptOrgnl());
|
||||
$("#btnOpenAnswerPreview--${pageName}").on("click", () => $P.fnOpenAnswerPreview());
|
||||
$("#btnExecuteAnswer--${pageName}").on("click", () => $P.fnExecuteAnswer());
|
||||
$("#btnAnswerComplete--${pageName}").on("click", () => $P.fnAnswerComplete());
|
||||
|
||||
fnMakeResizableTable($("#table-responsive--${pageName}")[0]);
|
||||
fnMakeScrollableTable($("#table-responsive--${pageName}")[0], $P.scrollCrdnList);
|
||||
|
||||
/**************************************************************************
|
||||
* 초기화
|
||||
**************************************************************************/
|
||||
//달력 초기화
|
||||
initDatepicker("frmSearch--${pageName}");
|
||||
initDetailSearchButton("frmSearch--${pageName}");
|
||||
|
||||
var defaultBizValue = $("#layout-navbar input[name='taskSeCd']:checked").val();
|
||||
$("#frmSearch--${pageName} input[name='taskSeCd'][value='" + defaultBizValue + "']").prop("checked",true);
|
||||
$P.fnResetAndChangeBiz(defaultBizValue);
|
||||
|
||||
//보안모드
|
||||
fn_securityModeToggle($("#securityMode--top").is(":checked"));
|
||||
|
||||
$("#frmSearch--${pageName} input[name='taskSeCd']").each(function(i) {
|
||||
$(this).prop("disabled", "true");
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
</script>
|
||||
@ -1,207 +0,0 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
<c:set var="pageKorName" scope="request">민원 답변내용 미리보기</c:set>
|
||||
|
||||
<div class="d-flex flex-row justify-content-evenly">
|
||||
<div class="card">
|
||||
<form id="frmEdit--${pageName}">
|
||||
<input id="crdnId--${pageName}" name="crdnId" type="hidden" data-map="CRDN_ID" />
|
||||
<input id="cvlcptLinkId--${pageName}" name="cvlcptLinkId" type="hidden" data-map="CVLCPT_LINK_ID" />
|
||||
|
||||
<div class="row g-1">
|
||||
<div class="col-md-6">
|
||||
<label for="cvlcptAplyCn--${pageName}"
|
||||
class="w-px-150 bg-lighter pe-2 col-form-label text-sm-center">
|
||||
민원 내용
|
||||
</label>
|
||||
</div>
|
||||
<div class="col-md-6 text-end">
|
||||
<input type="text" id="countStauts--${pageName}"
|
||||
class="form-control w-px-150 text-center fw-bold" readonly />
|
||||
<button type="button" id="btnPrev--${pageName}" class="w-px-50 btn-PageUp">◀</button>
|
||||
<button type="button" id="btnNext--${pageName}" class="w-px-50 btn-PageDown">▶</button>
|
||||
</div>
|
||||
<div class="col-md-12">
|
||||
<div class="px-2">
|
||||
<textarea id="cvlcptAplyCn--${pageName}" name="cvlcptAplyCn"
|
||||
data-map="CVLCPT_APLY_CN" rows="10" class="w-100"
|
||||
></textarea>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-12">
|
||||
<label for="cvlcptPrcsRsltCn--${pageName}"
|
||||
class="required w-px-150 bg-lighter pe-2 col-form-label text-sm-center">
|
||||
답변 내용
|
||||
</label>
|
||||
</div>
|
||||
<div class="col-md-12">
|
||||
<div class="px-2">
|
||||
<textarea id="cvlcptPrcsRsltCn--${pageName}" name="cvlcptPrcsRsltCn"
|
||||
data-map="CVLCPT_PRCS_RSLT_CN"
|
||||
required rows="10" class="w-100"
|
||||
></textarea>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-6">
|
||||
변경할내용이있으면 수정하시오.
|
||||
</div>
|
||||
<div class="col-md-6 text-end">
|
||||
<button type="button" id="btnSave--${pageName}" class="btn btn-primary">
|
||||
변경 내용 저장
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
|
||||
pageObject["${pageName}"] = {};
|
||||
pageObject["${pageName}"].parentRes = {};
|
||||
|
||||
pageObject.childReq = [];
|
||||
pageObject.childReq.push({
|
||||
getCountStatus : function(){ return ""; },
|
||||
getNextKey : function(){ return ""; },
|
||||
getPrevKey : function(){ return ""; },
|
||||
selectRow : function(){}
|
||||
});
|
||||
|
||||
$(document).ready(function() {
|
||||
|
||||
var $P = pageObject["${pageName}"];
|
||||
$P.taskSeCd = "${taskSeCd}";
|
||||
|
||||
if(pageObject.parentRes.length > 0){
|
||||
$P.parentRes = pageObject.parentRes.pop();
|
||||
} else {
|
||||
$P.parentRes = pageObject.childReq.pop();
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* DatasetControl, Dataset, FormFields
|
||||
**************************************************************************/
|
||||
$P.formFields = new FimsFormFields("#frmEdit--${pageName}");
|
||||
|
||||
$P.cvlcptControl = new DatasetControl({
|
||||
dataGetter:obj => obj.cvlcptInfo,
|
||||
keymapper:info => info ? info.CRDN_ID : "",
|
||||
urls : {
|
||||
getInfo : wctx.url("/"+$P.taskSeCd+"/cvlc/cvlc02/060/info.do"),
|
||||
update : wctx.url("/"+$P.taskSeCd+"/cvlc/cvlc02/060/update.do")
|
||||
},
|
||||
formats: {
|
||||
CVLCPT_RCPT_YMD : dateFormat,
|
||||
CVLCPT_PRCS_PRNMNT_DT : dateFormat
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
/**************************************************************************
|
||||
* Dataset.on
|
||||
**************************************************************************/
|
||||
$P.cvlcptControl.dataset.onCurrentChange = (dataItem) => {
|
||||
$P.formFields.set($P.cvlcptControl,dataItem);
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* pageObject.function
|
||||
**************************************************************************/
|
||||
|
||||
$P.fnPrev = () => {
|
||||
var prevKey = $P.parentRes.getPrevKey($("#crdnId--${pageName}").val());
|
||||
if(prevKey != ""){
|
||||
$P.fnGo(prevKey);
|
||||
}
|
||||
}
|
||||
|
||||
$P.fnNext = () => {
|
||||
var nextKey = $P.parentRes.getNextKey($("#crdnId--${pageName}").val());
|
||||
if(nextKey != ""){
|
||||
$P.fnGo(nextKey);
|
||||
}
|
||||
}
|
||||
|
||||
$P.fnGo = (crdnId) => {
|
||||
ajax.get({
|
||||
url: $P.cvlcptControl.urls.getInfo,
|
||||
data: { "crdnId" : crdnId },
|
||||
headers: {
|
||||
Accept: "application/json; charset=utf-8"
|
||||
},
|
||||
success : (resp) => {
|
||||
var cvlcptInfo = resp.cvlcptInfo;
|
||||
cvlcptInfo.CVLCPT_APLY_CN = escapeHTMLEntity(cvlcptInfo.CVLCPT_APLY_CN);
|
||||
$P.cvlcptControl.dataset.setData([cvlcptInfo]);
|
||||
|
||||
var cs = $P.parentRes.getCountStatus($("#crdnId--${pageName}").val());
|
||||
$("#countStauts--${pageName}").val(cs);
|
||||
$P.parentRes.selectRow(crdnId);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
$P.fnSave = async() => {
|
||||
|
||||
if(!customValidate($("#frmEdit--${pageName} input"))) return;
|
||||
|
||||
if(await confirm2("현재 답변 내용을 저장하시겠습니까?")){
|
||||
var info = $P.formFields.get();
|
||||
|
||||
if (!info) {
|
||||
return;
|
||||
}
|
||||
|
||||
ajax.post({
|
||||
url : $P.cvlcptControl.urls.update,
|
||||
data : info,
|
||||
success : (resp) => {
|
||||
$P.saveCallback(resp);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
$P.saveCallback = (resp) => {
|
||||
if (resp.saved) {
|
||||
dialog.alert({
|
||||
content : "표지정보조회가 실행되었습니다.",
|
||||
init : function() {
|
||||
setDialogZindex();
|
||||
focusClose();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* element.on
|
||||
**************************************************************************/
|
||||
$("#btnPrev--${pageName}").on("click", () => $P.fnPrev() );
|
||||
$("#btnNext--${pageName}").on("click", () => $P.fnNext() );
|
||||
|
||||
$("#btnSave--${pageName}").on("click", () => $P.fnSave() );
|
||||
|
||||
/**************************************************************************
|
||||
* 초기화
|
||||
**************************************************************************/
|
||||
var cvlcptInfo = ${cvlcptInfo};
|
||||
cvlcptInfo.CVLCPT_APLY_CN = escapeHTMLEntity(cvlcptInfo.CVLCPT_APLY_CN);
|
||||
$P.cvlcptControl.dataset.setData([cvlcptInfo]);
|
||||
var cs = $P.parentRes.getCountStatus($("#crdnId--${pageName}").val());
|
||||
$("#countStauts--${pageName}").val(cs);
|
||||
|
||||
let openerPageName = "${openerPageName}";
|
||||
|
||||
if (openerPageName == "sprt02020") {
|
||||
$("#btnSave--${pageName}").hide();
|
||||
} else {
|
||||
$("#btnSave--${pageName}").show();
|
||||
}
|
||||
});
|
||||
|
||||
</script>
|
||||
@ -1,579 +0,0 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
<c:set var="pageKorName" scope="request">민원관리</c:set>
|
||||
<div class="content-wrapper">
|
||||
<div class="container-xxl flex-grow-1 px-0">
|
||||
<div class="card wrapper-list">
|
||||
|
||||
<div class="container-page-btn">
|
||||
<button type="button" id="btnReset--${pageName}" class="btn btn-outline-dark w-px-120" title="초기화">
|
||||
초기화
|
||||
</button>
|
||||
<span class="container-window-btn-right">
|
||||
<button type="button" id="btnSearch--${pageName}" class="btn btn-search w-px-120" title="검색">
|
||||
검색
|
||||
</button>
|
||||
<button type="button" id="btnExcel--${pageName}" class="btn btn-excel w-px-120" title="엑셀 저장">
|
||||
엑셀
|
||||
</button>
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<form id="frmSearch--${pageName}" name="frmSearch">
|
||||
<div class="container-search">
|
||||
<div class="row g-1">
|
||||
<div class="col-12">
|
||||
<span class="form-label fw-bold form-search-title w-px-120 text-end">업무구분</span>
|
||||
<span class="form-search-linebox">
|
||||
<c:forEach items="${TaskListForSgg}" var="item">
|
||||
<label>
|
||||
<input name="taskSeCd" type="radio" value="${item.code}"
|
||||
class="form-check-input" alt="업무구분"
|
||||
onchange="pageObject['${pageName}'].fnResetAndChangeBiz(this.value);">
|
||||
${item.value}
|
||||
</label>
|
||||
</c:forEach>
|
||||
</span>
|
||||
</div>
|
||||
<div class="col-6">
|
||||
<label class="form-label fw-bold form-search-title w-px-120 text-end" for="schCvlcptRcptYmdFrom--${pageName}">접수일자</label>
|
||||
<span class="form-search-linebox">
|
||||
<input type="text" id="schCvlcptRcptYmdFrom--${pageName}" name="schCvlcptRcptYmdFrom"
|
||||
class="form-control form-date"
|
||||
data-fmt-type="day" title="시작 날짜 선택" />
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
~
|
||||
<input type="text" id="schCvlcptRcptYmdTo--${pageName}" name="schCvlcptRcptYmdTo"
|
||||
class="form-control form-date"
|
||||
data-fmt-type="day" title="종료 날짜 선택">
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
</span>
|
||||
</div>
|
||||
<div class="col-6">
|
||||
<button type="button" class="w-px-120" onclick="$('#cvlcptPrcsPicNm--${pageName}').val('${currentUserName}');">
|
||||
담당자명 지정
|
||||
</button>
|
||||
<input type="text" id="cvlcptPrcsPicNm--${pageName}" name="cvlcptPrcsPicNm"
|
||||
class="form-control" />
|
||||
</div>
|
||||
<div class="col-6">
|
||||
<label class="form-label fw-bold form-search-title w-px-120 text-end" for="schCvlcptPrcsPrnmntDtFrom--${pageName}">처리기한</label>
|
||||
<span class="form-search-linebox">
|
||||
<input type="text" id="schCvlcptPrcsPrnmntDtFrom--${pageName}" name="schCvlcptPrcsPrnmntDtFrom"
|
||||
class="form-control form-date"
|
||||
data-fmt-type="day" title="시작 날짜 선택" />
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
~
|
||||
<input type="text" id="schCvlcptPrcsPrnmntDtTo--${pageName}" name="schCvlcptPrcsPrnmntDtTo"
|
||||
class="form-control form-date"
|
||||
data-fmt-type="day" title="종료 날짜 선택">
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
</span>
|
||||
</div>
|
||||
<div class="col-6">
|
||||
<input type="hidden" id="by--${pageName}" name="by" />
|
||||
<input type="text" class="form-control fw-bold w-px-120 text-end" id="byOutput--${pageName}" value="동적 검색" readonly />
|
||||
<input type="hidden" id="mainOption--${pageName}" name="mainOption" />
|
||||
<input type="hidden" id="subOption--${pageName}" name="subOption" />
|
||||
<input type="text" class="form-control w-px-400" id="term--${pageName}" name="term" autocomplete="off" />
|
||||
<!-- 상세 검색조건 버튼 -->
|
||||
<span class="flr">
|
||||
<button type="button" class="btn btn-open-detail" data-bs-toggle="collapse" data-bs-target="#searchDetail--${pageName}">
|
||||
<i class="bx bx-chevron-down"></i>
|
||||
상세검색
|
||||
</button>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="searchDetail--${pageName}" class="container-search container-search-detail collapse">
|
||||
<div class="row">
|
||||
<div class="col-6">
|
||||
<select class="form-select w-px-120 text-center" id="schRegDateOpt--${pageName}" name="schRegDateOpt">
|
||||
<option value="regDt">등록일자</option>
|
||||
<option value="mdfcnDt">수정일자</option>
|
||||
</select>
|
||||
<span class="form-search-linebox">
|
||||
<input type="text" class="form-control form-date" id="schRegDateFrom--${pageName}" name="schRegDateFrom"
|
||||
data-fmt-type="day" title="시작 날짜 선택" />
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
~
|
||||
<input type="text" class="form-control form-date" id="schRegDateTo--${pageName}" name="schRegDateTo"
|
||||
data-fmt-type="day" title="종료 날짜 선택">
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<div>
|
||||
<span class="container-page-btn">
|
||||
<div class="d-flex flex-row justify-content-between">
|
||||
<span id="crdnPaging--${pageName}PagingInfo" class="dataTables_info"
|
||||
role="status" aria-live="polite"></span>
|
||||
<ul id="crdnPaging--${pageName}" class="pagination pagination-primary">
|
||||
</ul>
|
||||
</div>
|
||||
<span class="container-window-btn-right">
|
||||
<button type="button" id="btnOpenCvlcptOrgnl--${pageName}"
|
||||
class="btn btn-primary" title="민원원본보기">민원원본보기</button>
|
||||
<button type="button" id="btnDelete--${pageName}"
|
||||
class="btn btn-primary" title="선택자료 삭제">선택자료 삭제</button>
|
||||
</span>
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<div class="card-datatable text-nowrap">
|
||||
<div id="DataTables_Table_0_wrapper--${pageName}" class="dataTables_wrapper dt-bootstrap5 no-footer">
|
||||
<div id="table-responsive--${pageName}" class="table-responsive ox-scroll oy-scroll h-px-500">
|
||||
<table id="DataTables_Table_0--${pageName}"
|
||||
class="table-layout-fixed datatables-ajax table table-bordered dataTable no-footer">
|
||||
<thead id="crdnThead--${pageName}" class="sticky-thead">
|
||||
<tr data-by="by--${pageName}" data-by-output="byOutput--${pageName}"
|
||||
data-main-option="mainOption--${pageName}" data-sub-option="subOption--${pageName}">
|
||||
<th style="width: 80px;">No.</th>
|
||||
<th onclick="searchFromGridTitle('CVLCPT_RCPT_NO',this.innerText,'match','part');"
|
||||
style="width: 160px;">접수번호</th>
|
||||
<th onclick="searchFromGridTitle('CVLCPT_LIST_NO',this.innerText,'match','part');"
|
||||
style="width: 160px;">목록번호</th>
|
||||
<th onclick="searchFromGridTitle('CRDN_REG_SE_CD',this.innerText,'codeValue','FIM026');"
|
||||
style="width: 160px;">등록구분</th>
|
||||
<th onclick="searchFromGridTitle('CVLCPT_APLCNT_NM',this.innerText,'match','part');"
|
||||
style="width: 160px;">신고자</th>
|
||||
<th onclick="searchFromGridTitle('CVLCPT_PRCS_PIC_NM',this.innerText,'match','part');"
|
||||
style="width: 160px;">담당자</th>
|
||||
<th onclick="searchFromGridTitle('CVLCPT_PRCS_PIC_TELNO',this.innerText,'match','part');"
|
||||
style="width: 160px;">담당자전화번호</th>
|
||||
<th onclick="searchFromGridTitle('CVLCPT_RCPT_YMD',this.innerText,'ymd');"
|
||||
style="width: 160px;">접수일자</th>
|
||||
<th onclick="searchFromGridTitle('CVLCPT_PRCS_PRNMNT_DT',this.innerText,'ymd');"
|
||||
style="width: 180px;">처리기한</th>
|
||||
<th onclick="searchFromGridTitle('CRDN_YMD','위반일자','ymd');"
|
||||
style="width: 180px;">위반일시</th>
|
||||
<th onclick="searchFromGridTitle('VLTN_ARTCL',this.innerText);"
|
||||
style="width: 160px;">위반내용</th>
|
||||
<th onclick="searchFromGridTitle('VHRNO',this.innerText,'match','part');"
|
||||
style="width: 160px;">차량번호</th>
|
||||
<th onclick="searchFromGridTitle('ATCH_FILE_CNT',this.innerText,'match','perfect');"
|
||||
style="width: 160px;">사진건수</th>
|
||||
<th onclick="searchFromGridTitle('LEVY_EXCL_RSN_CD',this.innerText,'codeValue','FIM022');"
|
||||
style="width: 160px;">서손/계고사유</th>
|
||||
<th onclick="searchFromGridTitle('ETC_CN',this.innerText,'match','part');"
|
||||
style="width: 160px;">특기사항</th>
|
||||
<th class="dummy-th"></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="crdnTbody--${pageName}"></tbody>
|
||||
<template id="crdnRow--${pageName}">
|
||||
<tr data-key="{CRDN_ID}">
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-end">{ROW_NUM}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-center">{CVLCPT_RCPT_NO}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-center">{CVLCPT_LIST_NO}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-center">{CRDN_REG_SE_CD}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-center">{CVLCPT_APLCNT_NM}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-center">{CVLCPT_PRCS_PIC_NM}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-center">{CVLCPT_PRCS_PIC_TELNO}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-center">{CVLCPT_RCPT_YMD}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-center">{CVLCPT_PRCS_PRNMNT_DT}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-center">{CRDN_YMD_TM}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-center">{VLTN_ARTCL}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-center">{VHRNO}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-center">{ATCH_FILE_CNT}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-center">{LEVY_EXCL_RSN_NM}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-center">{ETC_CN}</td>
|
||||
<td class="dummy-td"></td>
|
||||
</tr>
|
||||
</template>
|
||||
<template id="crdnNotFound--${pageName}">
|
||||
<tr>
|
||||
<td valign="top" colspan="16" class="dataTables_empty text-center">
|
||||
민원 정보를 찾지 못했습니다.
|
||||
</td>
|
||||
</tr>
|
||||
</template>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="toast-container position-fixed bottom-0 end-0 p-3">
|
||||
<div id="divToast--${pageName}" class="toast" role="alert" aria-live="assertive" aria-atomic="true">
|
||||
<div class="toast-body bg-black text-white">
|
||||
삭제 되었습니다.
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="content-backdrop fade"></div>
|
||||
</div>
|
||||
|
||||
|
||||
<script>
|
||||
|
||||
/**************************************************************************
|
||||
* Global Variable
|
||||
**************************************************************************/
|
||||
var FIM022 = new CommonCodes(${FIM022});
|
||||
var FIM026 = new CommonCodes(${FIM026});
|
||||
|
||||
pageObject["${pageName}"] = {};
|
||||
|
||||
$(document).ready(function(){
|
||||
|
||||
var $P = pageObject["${pageName}"];
|
||||
|
||||
$P.toast = new bootstrap.Toast(document.getElementById('divToast--${pageName}'), {
|
||||
animation: true,
|
||||
autohide: true,
|
||||
delay: 2000
|
||||
});
|
||||
|
||||
/**************************************************************************
|
||||
* DatasetControl
|
||||
**************************************************************************/
|
||||
$P.crdnControl = new DatasetControl({
|
||||
dataGetter : obj => obj["List"], appendData:true,
|
||||
keymapper : info => info ? info.CRDN_ID : "",
|
||||
urls : {
|
||||
load : "",
|
||||
getInfo : "",
|
||||
remove : ""
|
||||
},
|
||||
formats : {
|
||||
CRDN_REG_SE_CD : FIM026,
|
||||
CVLCPT_RCPT_YMD : dateFormat,
|
||||
CVLCPT_PRCS_PRNMNT_DT : datetimeFormat,
|
||||
CRDN_YMD_TM : datetimeFormat
|
||||
}
|
||||
});
|
||||
$P.crdnControl.defaultFetchSize = FETCH_XS;
|
||||
$P.crdnControl.query = { pageNum : 1, fetchSize : $P.crdnControl.defaultFetchSize };
|
||||
$P.crdnControl.beforeCurrent = null;
|
||||
|
||||
|
||||
/**************************************************************************
|
||||
* Dataset.on
|
||||
**************************************************************************/
|
||||
$P.crdnControl.dataset.onDatasetChange = (obj, option) => {
|
||||
|
||||
var t = $P.getGridTemplate();
|
||||
var trs = Apply.fromDataset.getTbody($P.crdnControl.dataset, t.found, t.notFound, t.replacer);
|
||||
$P.renderCrdnList(obj["Total"], $P.crdnControl.dataset.length, trs, option);
|
||||
|
||||
Apply.fromDataset.paging($P.crdnControl.dataset, obj, "crdnPaging--${pageName}");
|
||||
};
|
||||
|
||||
$P.crdnControl.dataset.onCurrentChange = (dataItem) => {
|
||||
Apply.fromDataset.currentRow($P.crdnControl.dataset, dataItem, $("#crdnTbody--${pageName}")[0]);
|
||||
}
|
||||
|
||||
|
||||
/**************************************************************************
|
||||
* pageObject.function
|
||||
**************************************************************************/
|
||||
$P.fnReset = () => {
|
||||
var searchForm = $("#frmSearch--${pageName}");
|
||||
searchForm.find("input[type='radio']").not("[name='taskSeCd']").prop("checked", false);
|
||||
searchForm.find("input[type='checkbox']").prop("checked", false);
|
||||
searchForm.find("input[type='text']").val("");
|
||||
searchForm.find("input[type='hidden']").val("");
|
||||
searchForm.find("select").each(function(){ $(this).find("option:eq(0)").prop("selected", true); });
|
||||
|
||||
$("#byOutput--${pageName}").val("동적 검색");
|
||||
$('#schCvlcptRcptYmdFrom--${pageName}').datepicker('setDate', DateUtil.getDateDay(-365).date);
|
||||
$('#schCvlcptRcptYmdTo--${pageName}').datepicker('setDate', TODAY());
|
||||
|
||||
$P.crdnControl.dataset.setData([]);
|
||||
}
|
||||
|
||||
$P.fnResetAndChangeBiz = (taskSeCd) => {
|
||||
$P.fnReset();
|
||||
$P.crdnControl.urls.load = wctx.url("/"+taskSeCd+"/cvlc/cvlc03/010/list.do");
|
||||
$P.crdnControl.urls.remove = wctx.url("/"+taskSeCd+"/cvlc/cvlc01/010/remove.do");
|
||||
$P.crdnControl.urls.getInfo = wctx.url("/sprt/sprt02/010/main.do");
|
||||
}
|
||||
|
||||
|
||||
$P.getParams = () => {
|
||||
var formFields = new FimsFormFields("#frmSearch--${pageName}");
|
||||
var data = formFields.get();
|
||||
data.fetchSize = $P.crdnControl.defaultFetchSize;
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
$P.searchCrdnList = () => {
|
||||
|
||||
$P.crdnControl.query = $P.getParams();
|
||||
$P.crdnControl.load(1);
|
||||
}
|
||||
|
||||
$P.scrollCrdnList = () => {
|
||||
$P.crdnControl.load($P.crdnControl.query.pageNum + 1);
|
||||
}
|
||||
|
||||
$P.refreshCrdnList = () => {
|
||||
|
||||
$P.crdnControl.beforeCurrent = {
|
||||
key : $P.crdnControl.dataset.getCurrent()["CRDN_ID"],
|
||||
index : $P.crdnControl.dataset.getCurrent()["ROW_NUM"] - 1
|
||||
};
|
||||
|
||||
Apply.fromDatasetControl.reload($P.crdnControl).then((resp)=>{
|
||||
Apply.toDataset.set($P.crdnControl.dataset, resp);
|
||||
$P.crdnControl.dataset.onDatasetChange(resp, {reloaded : true});
|
||||
|
||||
if($P.crdnControl.beforeCurrent != null){
|
||||
var beforeCurrentKey = $P.crdnControl.beforeCurrent.key;
|
||||
var beforeCurrentIndex = $P.crdnControl.beforeCurrent.index;
|
||||
$P.crdnControl.beforeCurrent = null;
|
||||
|
||||
if(!$P.crdnControl.dataset.empty){
|
||||
var info = $P.crdnControl.dataset.getData(beforeCurrentKey);
|
||||
|
||||
if(info != null){
|
||||
$P.crdnControl.dataset.setCurrent(beforeCurrentKey,true);
|
||||
} else {
|
||||
if(beforeCurrentIndex > ($P.crdnControl.dataset.length - 1)){
|
||||
info = $P.crdnControl.dataset.getDataset()[$P.crdnControl.dataset.length - 1];
|
||||
} else {
|
||||
info = $P.crdnControl.dataset.getDataset()[beforeCurrentIndex];
|
||||
}
|
||||
|
||||
$P.crdnControl.dataset.setCurrent(info["CRDN_ID"],true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$("label[for='table-responsive--${pageName}']").trigger("refreshEnd");
|
||||
});
|
||||
}
|
||||
|
||||
$P.fnExcelDown = () => {
|
||||
if($P.crdnControl.dataset.empty){
|
||||
alert("조회된 자료가 없습니다.");
|
||||
return;
|
||||
}
|
||||
|
||||
var cellDefs = getCellDefs($("#crdnThead--${pageName} th").not(".dummy-th").not(":eq(0)"),
|
||||
$($("#crdnRow--${pageName}")[0].content).find("td").not(".dummy-td").not(":eq(0)"));
|
||||
$P.crdnControl.query.cellDefs = cellDefs;
|
||||
|
||||
$P.crdnControl.download();
|
||||
}
|
||||
|
||||
$P.getGridTemplate = () => {
|
||||
var notFound = [document.getElementById("crdnNotFound--${pageName}").innerHTML];
|
||||
var found = document.getElementById("crdnRow--${pageName}").innerHTML;
|
||||
var replacer = (str, dataItem) => str
|
||||
.replace(/{onclick}/gi, "pageObject['${pageName}'].clickCrdnList('" + dataItem.getValue("CRDN_ID") + "');")
|
||||
.replace(/{ondblclick}/gi, "pageObject['${pageName}'].dblclickCrdnList('" + dataItem.getValue("CRDN_ID") + "');");
|
||||
|
||||
|
||||
return {
|
||||
found : found,
|
||||
notFound : notFound,
|
||||
replacer : replacer
|
||||
};
|
||||
}
|
||||
|
||||
$P.renderCrdnList = (total, listLength, trs, option) => {
|
||||
|
||||
let noMore = (listLength >= total);
|
||||
var initScroll = ($P.crdnControl.query.pageNum < 2);
|
||||
if(option != null && option.reloaded){
|
||||
initScroll = false;
|
||||
}
|
||||
|
||||
$("#table-responsive--${pageName}")[0].changeContent(trs, initScroll, noMore);
|
||||
|
||||
//보안모드
|
||||
fn_securityModeToggle($("#securityMode--top").is(":checked"));
|
||||
|
||||
}
|
||||
|
||||
$P.clickCrdnList = (dataKey) => {
|
||||
if(dataKey == ""){
|
||||
return;
|
||||
}
|
||||
|
||||
$("#crdnTbody--${pageName}").setCurrentRow(dataKey);
|
||||
|
||||
Apply.toDataset.current($P.crdnControl.dataset, dataKey);
|
||||
}
|
||||
|
||||
$P.dblclickCrdnList = (dataKey) => {
|
||||
let params = {
|
||||
callControlName : "pageObject['${pageName}'].crdnControl"
|
||||
, crdnId : dataKey
|
||||
}
|
||||
|
||||
ajax.get({
|
||||
url : $P.crdnControl.urls.getInfo,
|
||||
data : params,
|
||||
success : (resp) => {
|
||||
|
||||
dialog.open({
|
||||
id : "totalInfoMainDialog",
|
||||
title : "개별총정보", size : "xxl", content : resp,
|
||||
init : () => {}
|
||||
});
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
$P.fnRemove = () => {
|
||||
|
||||
var cur = $P.crdnControl.dataset.getCurrent();
|
||||
if(cur == null){
|
||||
return;
|
||||
}
|
||||
|
||||
var curKey = cur["CRDN_ID"];
|
||||
$P.crdnControl.dataset.select(curKey,true);
|
||||
|
||||
var selected = $P.crdnControl.dataset.getKeys("selected");
|
||||
if (selected.length < 1) {
|
||||
return;
|
||||
}
|
||||
|
||||
var params = {
|
||||
"crdnIds" : selected.join(",")
|
||||
};
|
||||
|
||||
ajax.post({
|
||||
url : $P.crdnControl.urls.remove,
|
||||
data : params,
|
||||
success : (resp) => {
|
||||
$P.saveCallback(selected, resp);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
$P.saveCallback = (selected, resp) => {
|
||||
if (resp.saved){
|
||||
$P.toast.show();
|
||||
sleep(1000).then(() => $P.refreshCrdnList());
|
||||
}
|
||||
}
|
||||
|
||||
$P.fnOpenCvlcptOrgnl = () => {
|
||||
var cur = $P.crdnControl.dataset.getCurrent();
|
||||
if(cur == null){
|
||||
return;
|
||||
}
|
||||
|
||||
var taskSeCd = $("#frmSearch--${pageName} input[name='taskSeCd']:checked").val();
|
||||
|
||||
var dialogId = "cvlcptOrgnlDialog--${pageName}";
|
||||
ajax.get({
|
||||
url : wctx.url("/"+taskSeCd+"/cvlc/cvlc01/050/info.do"),
|
||||
data : { crdnId : cur["CRDN_ID"] },
|
||||
success : (resp) => {
|
||||
dialog.open({
|
||||
id : dialogId,
|
||||
title : "민원내역 원본",
|
||||
content : resp,
|
||||
size : "xl",
|
||||
init : () => {
|
||||
var parentRes = new Object();
|
||||
var childReq = pageObject.childReq.pop();
|
||||
|
||||
for(var reqKey in childReq) {
|
||||
if($P.provide[reqKey]){
|
||||
parentRes[reqKey] = $P.provide[reqKey];
|
||||
} else {
|
||||
parentRes[reqKey] = function(){};
|
||||
}
|
||||
}
|
||||
|
||||
pageObject.parentRes.push(parentRes);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
$P.provide = {
|
||||
"getCountStatus" : function(currentKey){
|
||||
var ds = $P.crdnControl.dataset.getDataset();
|
||||
var index = ds.findIndex(item => item.CRDN_ID == currentKey);
|
||||
return (index+1) + " of " + ds.length;
|
||||
},
|
||||
"getNextKey" : function(currentKey){
|
||||
var ds = $P.crdnControl.dataset.getDataset();
|
||||
var index = ds.findIndex(item => item.CRDN_ID == currentKey);
|
||||
if(ds.length > index+1){
|
||||
return ds[index+1]["CRDN_ID"];
|
||||
} else {
|
||||
return "";
|
||||
}
|
||||
},
|
||||
"getPrevKey" : function(currentKey){
|
||||
var ds = $P.crdnControl.dataset.getDataset();
|
||||
var index = ds.findIndex(item => item.CRDN_ID == currentKey);
|
||||
if(index != 0 && ds.length > 1){
|
||||
return ds[index-1]["CRDN_ID"];
|
||||
} else {
|
||||
return "";
|
||||
}
|
||||
},
|
||||
"selectRow" : function(currentKey){
|
||||
$P.clickCrdnList(currentKey);
|
||||
},
|
||||
"refreshList" : function(){
|
||||
$P.refreshCrdnList();
|
||||
},
|
||||
"hasData" : function(key){
|
||||
if($P.crdnControl.dataset.getData(key) == null){
|
||||
return false;
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
|
||||
/**************************************************************************
|
||||
* element.on
|
||||
**************************************************************************/
|
||||
$('#btnReset--${pageName}').on('click', () => $P.fnReset());
|
||||
$('#btnSearch--${pageName}').on('click', () => $P.searchCrdnList());
|
||||
// 동적검색에서 엔터(Enter) 키를 누르면 검색한다.
|
||||
$("#term--${pageName}").onEnterPress($P.searchCrdnList);
|
||||
$('#btnExcel--${pageName}').on('click', () => $P.fnExcelDown());
|
||||
$("#btnDelete--${pageName}").on("click", () => $P.fnRemove());
|
||||
$("#btnOpenCvlcptOrgnl--${pageName}").on("click", () => $P.fnOpenCvlcptOrgnl());
|
||||
|
||||
fnMakeResizableTable($("#table-responsive--${pageName}")[0]);
|
||||
fnMakeScrollableTable($("#table-responsive--${pageName}")[0], $P.scrollCrdnList);
|
||||
|
||||
/**************************************************************************
|
||||
* 초기화
|
||||
**************************************************************************/
|
||||
//달력 초기화
|
||||
initDatepicker("frmSearch--${pageName}");
|
||||
initDetailSearchButton("frmSearch--${pageName}");
|
||||
|
||||
var defaultBizValue = $("#layout-navbar input[name='taskSeCd']:checked").val();
|
||||
$("#frmSearch--${pageName} input[name='taskSeCd'][value='" + defaultBizValue + "']").prop("checked",true);
|
||||
$P.fnResetAndChangeBiz(defaultBizValue);
|
||||
|
||||
//보안모드
|
||||
fn_securityModeToggle($("#securityMode--top").is(":checked"));
|
||||
|
||||
$("#frmSearch--${pageName} input[name='taskSeCd']").each(function(i) {
|
||||
$(this).prop("disabled", "true");
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
</script>
|
||||
@ -1,464 +0,0 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
<c:set var="pageKorName" scope="request">민원 개별 등록</c:set>
|
||||
<div class="content-wrapper">
|
||||
<div class="container-xxl flex-grow-1 px-0">
|
||||
<div class="card wrapper-list">
|
||||
|
||||
<div class="container-page-btn">
|
||||
<button type="button" id="btnReset--${pageName}" class="btn btn-outline-dark w-px-120" title="초기화">
|
||||
초기화
|
||||
</button>
|
||||
<span class="container-window-btn-right">
|
||||
<button type="button" id="btnSearch--${pageName}" class="btn btn-search w-px-120" title="검색">
|
||||
검색
|
||||
</button>
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<form id="frmSearch--${pageName}" name="frmSearch">
|
||||
<div class="container-search">
|
||||
<div class="row g-1">
|
||||
<div class="col-12">
|
||||
<span class="form-label fw-bold form-search-title w-px-120 text-end">업무구분</span>
|
||||
<span class="form-search-linebox">
|
||||
<c:forEach items="${TaskListForSgg}" var="item">
|
||||
<label>
|
||||
<input name="taskSeCd" type="radio" value="${item.code}"
|
||||
class="form-check-input" alt="업무구분"
|
||||
onchange="pageObject['${pageName}'].fnResetAndChangeBiz(this.value);">
|
||||
${item.value}
|
||||
</label>
|
||||
</c:forEach>
|
||||
</span>
|
||||
</div>
|
||||
<div class="col-6">
|
||||
<label class="form-label fw-bold form-search-title w-px-120 text-end" for="schDmndYmdFrom--${pageName}">요청일자</label>
|
||||
<span class="form-search-linebox">
|
||||
<input type="text" id="schDmndYmdFrom--${pageName}" name="schDmndYmdFrom"
|
||||
class="form-control form-date"
|
||||
data-fmt-type="day" title="시작 날짜 선택" />
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
~
|
||||
<input type="text" id="schDmndYmdTo--${pageName}" name="schDmndYmdTo"
|
||||
class="form-control form-date"
|
||||
data-fmt-type="day" title="종료 날짜 선택">
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<div>
|
||||
<span class="container-page-btn">
|
||||
<div class="d-flex flex-row justify-content-between">
|
||||
<span id="dmndPaging--${pageName}PagingInfo" class="dataTables_info"
|
||||
role="status" aria-live="polite"></span>
|
||||
<ul id="dmndPaging--${pageName}" class="pagination pagination-primary">
|
||||
</ul>
|
||||
</div>
|
||||
<span class="container-window-btn-right">
|
||||
<button type="button" id="btnOpenDmndPop--${pageName}"
|
||||
class="btn btn-primary" title="요청 등록">요청 등록</button>
|
||||
<button type="button" id="btnDelete--${pageName}"
|
||||
class="btn btn-primary" title="한 건 삭제">한 건 삭제</button>
|
||||
<button type="button" id="btnDeleteAllCompleteData--${pageName}"
|
||||
class="btn btn-primary" title="요청 완료자료 전체 삭제">요청 완료자료 전체 삭제</button>
|
||||
</span>
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<div class="card-datatable text-nowrap">
|
||||
<div id="DataTables_Table_0_wrapper--${pageName}" class="dataTables_wrapper dt-bootstrap5 no-footer">
|
||||
<div id="table-responsive--${pageName}" class="table-responsive ox-scroll oy-scroll h-px-600">
|
||||
<table id="DataTables_Table_0--${pageName}"
|
||||
class="table-layout-fixed datatables-ajax table table-bordered dataTable no-footer">
|
||||
<thead id="dmndThead--${pageName}" class="sticky-thead">
|
||||
<tr data-by="by--${pageName}" data-by-output="byOutput--${pageName}"
|
||||
data-main-option="mainOption--${pageName}" data-sub-option="subOption--${pageName}">
|
||||
<th style="width: 80px;">No.</th>
|
||||
<th style="width: 180px;">요청일시</th>
|
||||
<th style="width: 180px;">요청자</th>
|
||||
<th style="width: 180px;">접수일자</th>
|
||||
<th style="width: 180px;">목록번호</th>
|
||||
<th style="width: 180px;">상태</th>
|
||||
<th style="width: 180px;">응답일시</th>
|
||||
<th class="dummy-th"></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="dmndTbody--${pageName}"></tbody>
|
||||
<template id="dmndRow--${pageName}">
|
||||
<tr data-key="{INDIV_ID}">
|
||||
<td onclick="{onclick}" class="text-end">{ROW_NUM}</td>
|
||||
<td onclick="{onclick}" class="text-center">{DMND_YMD}</td>
|
||||
<td onclick="{onclick}" class="text-center">{RGTR}</td>
|
||||
<td onclick="{onclick}" class="text-center">{RCPT_YMD}</td>
|
||||
<td onclick="{onclick}" class="text-center">{PST_NO}</td>
|
||||
<td onclick="{onclick}" class="text-center">{STTS_NM}</td>
|
||||
<td onclick="{onclick}" class="text-center">{RSPNS_DT}</td>
|
||||
<td class="dummy-td"></td>
|
||||
</tr>
|
||||
</template>
|
||||
<template id="dmndNotFound--${pageName}">
|
||||
<tr>
|
||||
<td valign="top" colspan="8" class="dataTables_empty text-center">
|
||||
요청 정보를 찾지 못했습니다.
|
||||
</td>
|
||||
</tr>
|
||||
</template>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="toast-container position-fixed bottom-0 end-0 p-3">
|
||||
<div id="divToast--${pageName}" class="toast" role="alert" aria-live="assertive" aria-atomic="true">
|
||||
<div id="toastText--${pageName}" class="toast-body bg-black text-white">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content-backdrop fade"></div>
|
||||
</div>
|
||||
|
||||
<template id="seallDmndDialogTemplate--${pageName}">
|
||||
<form id="frmEdit--${pageName}">
|
||||
<div class="card">
|
||||
<div class="row g-1">
|
||||
<div class="col-md-12">
|
||||
<label for="rcptYmd--${pageName}"
|
||||
class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end required">접수일자</label>
|
||||
<input type="text" id="rcptYmd--${pageName}" name="rcptYmd"
|
||||
class="form-control form-date" required data-fmt-type="day" />
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
</div>
|
||||
<div class="col-md-12">
|
||||
<label for="pstNo--${pageName}"
|
||||
class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end required">목록번호</label>
|
||||
<input type="text" id="pstNo--${pageName}" name="pstNo" class="form-control"
|
||||
required maxlength="6" data-maxlengthb="6" data-fmt-type="zeroLpadNumber" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<span class="container-page-btn">
|
||||
<span class="container-window-btn-right">
|
||||
<button type="button" class="btn btn-primary" id="btnCreate--${pageName}" title="확인">
|
||||
확인
|
||||
</button>
|
||||
</span>
|
||||
</span>
|
||||
</div>
|
||||
</form>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
|
||||
/**************************************************************************
|
||||
* Global Variable
|
||||
**************************************************************************/
|
||||
var FIM063 = new CommonCodes(${FIM063});
|
||||
pageObject["${pageName}"] = {};
|
||||
|
||||
$(document).ready(function(){
|
||||
|
||||
var $P = pageObject["${pageName}"];
|
||||
|
||||
$P.toast = new bootstrap.Toast(document.getElementById('divToast--${pageName}'), {
|
||||
animation: true,
|
||||
autohide: true,
|
||||
delay: 2000
|
||||
});
|
||||
|
||||
/**************************************************************************
|
||||
* DatasetControl
|
||||
**************************************************************************/
|
||||
$P.dmndControl = new DatasetControl({
|
||||
dataGetter : obj => obj["List"], appendData:true,
|
||||
keymapper : info => info ? info.INDIV_ID : "",
|
||||
urls : {
|
||||
load : "",
|
||||
create : "",
|
||||
remove : ""
|
||||
},
|
||||
formats : {
|
||||
DMND_YMD : dateFormat,
|
||||
RCPT_YMD : dateFormat,
|
||||
RSPNS_DT : datetimeFormat
|
||||
}
|
||||
});
|
||||
$P.dmndControl.defaultFetchSize = FETCH_XS;
|
||||
$P.dmndControl.query = { pageNum : 1, fetchSize : $P.dmndControl.defaultFetchSize };
|
||||
$P.dmndControl.beforeCurrent = null;
|
||||
|
||||
/**************************************************************************
|
||||
* Dataset.on
|
||||
**************************************************************************/
|
||||
$P.dmndControl.dataset.onDatasetChange = (obj, option) => {
|
||||
var t = $P.getGridTemplate();
|
||||
var trs = Apply.fromDataset.getTbody($P.dmndControl.dataset, t.found, t.notFound, t.replacer);
|
||||
$P.renderDmndList(obj["Total"], $P.dmndControl.dataset.length, trs, option);
|
||||
|
||||
Apply.fromDataset.paging($P.dmndControl.dataset, obj, "dmndPaging--${pageName}");
|
||||
};
|
||||
|
||||
$P.dmndControl.dataset.onCurrentChange = (dataItem) => {
|
||||
Apply.fromDataset.currentRow($P.dmndControl.dataset, dataItem, $("#dmndTbody--${pageName}")[0]);
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* pageObject.function
|
||||
**************************************************************************/
|
||||
$P.fnReset = () => {
|
||||
|
||||
$('#schDmndYmdFrom--${pageName}').datepicker('setDate', DateUtil.getDateDay(-5475).date);
|
||||
$('#schDmndYmdTo--${pageName}').datepicker('setDate', TODAY());
|
||||
$P.dmndControl.dataset.setData([]);
|
||||
}
|
||||
|
||||
$P.fnResetAndChangeBiz = (taskSeCd) => {
|
||||
$P.fnReset();
|
||||
$P.dmndControl.urls.load = wctx.url("/"+taskSeCd+"/cvlc/cvlc04/010/list.do");
|
||||
$P.dmndControl.urls.create = wctx.url("/"+taskSeCd+"/cvlc/cvlc04/010/create.do");
|
||||
$P.dmndControl.urls.remove = wctx.url("/"+taskSeCd+"/cvlc/cvlc04/010/remove.do");
|
||||
}
|
||||
|
||||
$P.getParams = () => {
|
||||
var formFields = new FimsFormFields("#frmSearch--${pageName}");
|
||||
var data = formFields.get();
|
||||
data.fetchSize = $P.dmndControl.defaultFetchSize;
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
$P.searchDmndList = () => {
|
||||
$P.dmndControl.query = $P.getParams();
|
||||
$P.dmndControl.load(1);
|
||||
}
|
||||
|
||||
$P.scrollDmndList = () => {
|
||||
$P.dmndControl.load($P.dmndControl.query.pageNum + 1);
|
||||
}
|
||||
|
||||
$P.refreshDmndList = () => {
|
||||
|
||||
if(!$P.dmndControl.dataset.empty){
|
||||
$P.dmndControl.beforeCurrent = {
|
||||
key : $P.dmndControl.dataset.getCurrent()["INDIV_ID"],
|
||||
index : $P.dmndControl.dataset.getCurrent()["ROW_NUM"] - 1
|
||||
};
|
||||
}
|
||||
|
||||
Apply.fromDatasetControl.reload($P.dmndControl).then((resp)=>{
|
||||
Apply.toDataset.set($P.dmndControl.dataset, resp);
|
||||
$P.dmndControl.dataset.onDatasetChange(resp, {reloaded : true});
|
||||
|
||||
if($P.dmndControl.beforeCurrent != null){
|
||||
var beforeCurrentKey = $P.dmndControl.beforeCurrent.key;
|
||||
var beforeCurrentIndex = $P.dmndControl.beforeCurrent.index;
|
||||
$P.dmndControl.beforeCurrent = null;
|
||||
|
||||
if(!$P.dmndControl.dataset.empty){
|
||||
var info = $P.dmndControl.dataset.getData(beforeCurrentKey);
|
||||
|
||||
if(info != null){
|
||||
$P.dmndControl.dataset.setCurrent(beforeCurrentKey,true);
|
||||
} else {
|
||||
|
||||
if(beforeCurrentIndex > ($P.dmndControl.dataset.length - 1)){
|
||||
info = $P.dmndControl.dataset.getDataset()[$P.dmndControl.dataset.length - 1];
|
||||
} else {
|
||||
info = $P.dmndControl.dataset.getDataset()[beforeCurrentIndex];
|
||||
}
|
||||
|
||||
$P.dmndControl.dataset.setCurrent(info["INDIV_ID"],true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
$P.getGridTemplate = () => {
|
||||
var notFound = [document.getElementById("dmndNotFound--${pageName}").innerHTML];
|
||||
var found = document.getElementById("dmndRow--${pageName}").innerHTML;
|
||||
var replacer = (str, dataItem) => str
|
||||
.replace(/{onclick}/gi, "pageObject['${pageName}'].clickDmndList('" + dataItem.getValue("INDIV_ID") + "');");
|
||||
|
||||
return {
|
||||
found : found,
|
||||
notFound : notFound,
|
||||
replacer : replacer
|
||||
};
|
||||
}
|
||||
|
||||
$P.renderDmndList = (total, listLength, trs, option) => {
|
||||
|
||||
let noMore = (listLength >= total);
|
||||
var initScroll = ($P.dmndControl.query.pageNum < 2);
|
||||
if(option != null && option.reloaded){
|
||||
initScroll = false;
|
||||
}
|
||||
|
||||
$("#table-responsive--${pageName}")[0].changeContent(trs, initScroll, noMore);
|
||||
}
|
||||
|
||||
$P.clickDmndList = (dataKey) => {
|
||||
if(dataKey == ""){
|
||||
return;
|
||||
}
|
||||
|
||||
$("#dmndTbody--${pageName}").setCurrentRow(dataKey);
|
||||
Apply.toDataset.current($P.dmndControl.dataset, dataKey);
|
||||
}
|
||||
|
||||
$P.fnRemove = (allCompleteDataIds) => {
|
||||
|
||||
if(allCompleteDataIds != null){
|
||||
$P.dmndControl.dataset.select(allCompleteDataIds,true);
|
||||
} else {
|
||||
var cur = $P.dmndControl.dataset.getCurrent();
|
||||
if(cur == null){
|
||||
return;
|
||||
}
|
||||
|
||||
var curKey = cur["INDIV_ID"];
|
||||
$P.dmndControl.dataset.select(curKey,true);
|
||||
}
|
||||
|
||||
var selected = $P.dmndControl.dataset.getKeys("selected");
|
||||
if (selected.length < 1) {
|
||||
return;
|
||||
}
|
||||
|
||||
var params = {
|
||||
"indivIds" : selected.join(",")
|
||||
};
|
||||
|
||||
ajax.post({
|
||||
url : $P.dmndControl.urls.remove,
|
||||
data : params,
|
||||
success : (resp) => {
|
||||
$P.removeCallback(selected, resp);
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
$P.removeCallback = (selected, resp) => {
|
||||
if (resp.saved){
|
||||
$("#toastText--${pageName}").html("삭제 되었습니다.");
|
||||
$P.toast.show();
|
||||
sleep(1000).then(() => $P.refreshDmndList());
|
||||
}
|
||||
}
|
||||
|
||||
$P.fnRemoveAllCompleteData = () => {
|
||||
var cur = $P.dmndControl.dataset.getCurrent();
|
||||
if(cur == null){
|
||||
return;
|
||||
}
|
||||
|
||||
var ds = $P.dmndControl.dataset.getDataset();
|
||||
|
||||
var indivIds = ds.filter(function(item){
|
||||
if(item['STTS_CD'] == '9' || item['STTS_CD'] == 'B'){
|
||||
return item["INDIV_ID"];
|
||||
}
|
||||
});
|
||||
|
||||
if(indivIds.length == 0){
|
||||
dialog.alert({
|
||||
content : "요청 완료자료가 없습니다.",
|
||||
init : function() {
|
||||
focusClose();
|
||||
}
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
dialog.alert({
|
||||
content : "완료된 자료를 모두 삭제하시겠습니까?",
|
||||
init : function() {
|
||||
focusOK();
|
||||
},
|
||||
onOK : () => {
|
||||
$P.fnRemove(indivIds);
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
//요청 등록 팝업 호출
|
||||
$P.fnOpenDmndPop = () => {
|
||||
dialog.open({
|
||||
id : "seallDmndDialog--${pageName}",
|
||||
title : "새올 접수 요청",
|
||||
content : document.getElementById("seallDmndDialogTemplate--${pageName}").innerHTML,
|
||||
size : "lg",
|
||||
init : () => {
|
||||
initDatepicker("seallDmndDialog--${pageName}");
|
||||
$('#rcptYmd--${pageName}').datepicker('setDate', TODAY());
|
||||
$('#btnCreate--${pageName}').on("click", () => $P.fnCreateDmnd());
|
||||
},
|
||||
onClose : () => {}
|
||||
});
|
||||
}
|
||||
|
||||
//요청 등록
|
||||
$P.fnCreateDmnd = () => {
|
||||
|
||||
if(!customValidate($("#frmEdit--${pageName} input"))) return;
|
||||
|
||||
var info = (new FimsFormFields("#frmEdit--${pageName}")).get();
|
||||
info.taskSeCd = $("#frmSearch--${pageName} input[name='taskSeCd']:checked").val();
|
||||
|
||||
ajax.get({
|
||||
url : $P.dmndControl.urls.create,
|
||||
data : info,
|
||||
success : (resp) => {
|
||||
if(resp.saved){
|
||||
dialog.close("seallDmndDialog--${pageName}");
|
||||
|
||||
$("#toastText--${pageName}").html("등록 되었습니다.");
|
||||
$P.toast.show();
|
||||
|
||||
if(!$P.dmndControl.dataset.empty){
|
||||
sleep(1000).then(() => $P.refreshDmndList());
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* element.on
|
||||
**************************************************************************/
|
||||
$('#btnReset--${pageName}').on('click', () => $P.fnReset());
|
||||
$('#btnSearch--${pageName}').on('click', () => $P.searchDmndList());
|
||||
$("#btnOpenDmndPop--${pageName}").on("click", () => $P.fnOpenDmndPop());
|
||||
$("#btnDelete--${pageName}").on("click", () => $P.fnRemove(null));
|
||||
$("#btnDeleteAllCompleteData--${pageName}").on("click", () => $P.fnRemoveAllCompleteData());
|
||||
|
||||
fnMakeResizableTable($("#table-responsive--${pageName}")[0]);
|
||||
fnMakeScrollableTable($("#table-responsive--${pageName}")[0], $P.scrollDmndList);
|
||||
|
||||
/**************************************************************************
|
||||
* 초기화
|
||||
**************************************************************************/
|
||||
//달력 초기화
|
||||
initDatepicker("frmSearch--${pageName}");
|
||||
|
||||
var defaultBizValue = $("#layout-navbar input[name='taskSeCd']:checked").val();
|
||||
$("#frmSearch--${pageName} input[name='taskSeCd'][value='" + defaultBizValue + "']").prop("checked",true);
|
||||
$P.fnResetAndChangeBiz(defaultBizValue);
|
||||
|
||||
$("#frmSearch--${pageName} input[name='taskSeCd']").each(function(i) {
|
||||
$(this).prop("disabled", "true");
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
</script>
|
||||
@ -1,792 +0,0 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
<c:set var="pageKorName" scope="request">민원신고 답변 문구 관리</c:set>
|
||||
<div class="content-wrapper" id="wrapper--${pageName}">
|
||||
<div class="container-xxl flex-grow-1 px-0">
|
||||
<div class="card wrapper-list">
|
||||
|
||||
<form id="frmSearch--${pageName}" name="frmSearch">
|
||||
<div class="container-search">
|
||||
<div class="row g-1">
|
||||
<div class="col-12">
|
||||
<span class="form-label fw-bold form-search-title w-px-120 text-end">업무구분</span>
|
||||
<span class="form-search-linebox">
|
||||
<c:forEach items="${TaskListForSgg}" var="item">
|
||||
<label>
|
||||
<input name="taskSeCd" type="radio" value="${item.code}"
|
||||
class="form-check-input" alt="업무구분"
|
||||
onchange="pageObject['${pageName}'].fnResetAndChangeBiz(this.value);">
|
||||
${item.value}
|
||||
</label>
|
||||
</c:forEach>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<div class="container-page-btn mt-3">
|
||||
<button type="button" id="btnReset--${pageName}" class="btn btn-outline-dark w-px-120" title="초기화">
|
||||
초기화
|
||||
</button>
|
||||
<span class="container-window-btn-right"></span>
|
||||
</div>
|
||||
|
||||
<span class="d-flex justify-content-center">
|
||||
<div class="nav-align-top mb-1 w-px-1300">
|
||||
<ul class="nav nav-tabs" role="tablist">
|
||||
<li class="nav-item">
|
||||
<button type="button" id="btnAnsBasicTab--${pageName}" class="nav-link active"
|
||||
role="tab" data-bs-toggle="tab">
|
||||
머리말/꼬리말
|
||||
</button>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<button type="button" id="btnLevyAnsBodyTab--${pageName}" class="nav-link"
|
||||
role="tab" data-bs-toggle="tab">
|
||||
부과건 답변내용
|
||||
</button>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<button type="button" id="btnWarningAnsBodyTab--${pageName}" class="nav-link"
|
||||
role="tab" data-bs-toggle="tab">
|
||||
계도건 답변내용
|
||||
</button>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<button type="button" id="btnNonlevyAnsBodyTab--${pageName}" class="nav-link"
|
||||
role="tab" data-bs-toggle="tab">
|
||||
미부과처리건 답변내용
|
||||
</button>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</span>
|
||||
|
||||
<div class="h-px-500 mt-1">
|
||||
|
||||
<!-- 머리말,꼬리말 영역 -->
|
||||
<span class="area-answerbasic">
|
||||
<div class="d-flex flex-row justify-content-center h-100">
|
||||
<div class="card p-4 justify-content-center align-items-center w-px-1300">
|
||||
<form id="frmEditAnsBasic--${pageName}">
|
||||
<div class="w-px-900">
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<label for="headerCn--${pageName}"
|
||||
class="w-px-130 bg-lighter pe-2 col-form-label text-sm-end align-top"
|
||||
>머리말</label>
|
||||
<textarea id="headerCn--${pageName}" name="headerCn"
|
||||
rows="5" cols="80%" class="form-control" required
|
||||
placeholder="머리말이 없습니다."
|
||||
></textarea>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<label for="footerCn--${pageName}"
|
||||
class="w-px-130 bg-lighter pe-2 col-form-label text-sm-end align-top"
|
||||
>꼬리말</label>
|
||||
<textarea id="footerCn--${pageName}" name="footerCn"
|
||||
rows="5" cols="80%" class="form-control" required
|
||||
placeholder="꼬리말이 없습니다."
|
||||
></textarea>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row justify-content-end">
|
||||
<div class="col-12">
|
||||
<button type="button" id="btnSaveAnsBasic--${pageName}"
|
||||
class="btn btn-primary float-end" title="적용">적용</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</span>
|
||||
|
||||
<!-- 본문처리 영역 -->
|
||||
<span class="area-answerbody area-answerbody-common">
|
||||
<div class="d-flex flex-row justify-content-center h-100">
|
||||
<div class="card p-4 d-flex flex-row w-px-1300">
|
||||
<!-- 그리드 영역 -->
|
||||
<div class="card-datatable text-nowrap d-inline-flex border-card">
|
||||
<div class="dataTables_wrapper dt-bootstrap5 no-footer">
|
||||
<!-- 부과건 그리드 -->
|
||||
<span class="area-answerbody area-levy">
|
||||
<div id="table-responsive-levy--${pageName}"
|
||||
class="table-responsive oy-auto h-100"
|
||||
style="width:470px;">
|
||||
<table class="datatables-ajax table table-bordered dataTable no-footer">
|
||||
<thead class="sticky-thead">
|
||||
<tr>
|
||||
<th style="width:50px;"></th>
|
||||
<th style="min-width: 300px;">위반내용</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="vltnTbody--${pageName}"></tbody>
|
||||
<template id="vltnRow--${pageName}">
|
||||
<tr data-key="{VLTN_CASE_ID}">
|
||||
<td class="text-center min-w-px-50 mw-px-50">
|
||||
<input type="radio" name="levyRadio" value="{VLTN_CASE_ID}"
|
||||
onchange="{onchange}" />
|
||||
</td>
|
||||
<td onclick="{onclick}" class="text-center">{VLTN_CASE_NM}</td>
|
||||
</tr>
|
||||
</template>
|
||||
<template id="vltnNotFound--${pageName}">
|
||||
<tr>
|
||||
<td valign="top" colspan="2"
|
||||
class="dataTables_empty text-center">정보를 찾지 못했습니다.</td>
|
||||
</tr>
|
||||
</template>
|
||||
</table>
|
||||
</div>
|
||||
</span>
|
||||
<!-- 계도건 그리드 -->
|
||||
<span class="area-answerbody area-warning">
|
||||
<div id="table-responsive-warning--${pageName}"
|
||||
class="table-responsive oy-auto h-100"
|
||||
style="width:470px;">
|
||||
<table class="datatables-ajax table table-bordered dataTable no-footer">
|
||||
<thead class="sticky-thead">
|
||||
<tr>
|
||||
<th style="width:50px;"></th>
|
||||
<th style="min-width: 300px;">계도내용</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="warningTbody--${pageName}"></tbody>
|
||||
<template id="warningRow--${pageName}">
|
||||
<tr data-key="{LEVY_EXCL_RSN_CD}">
|
||||
<td class="text-center min-w-px-50 mw-px-50">
|
||||
<input type="radio" name="warningRadio" value="{LEVY_EXCL_RSN_CD}"
|
||||
onchange="{onchange}" />
|
||||
</td>
|
||||
<td onclick="{onclick}" class="text-center">{LEVY_EXCL_RSN_NM}</td>
|
||||
</tr>
|
||||
</template>
|
||||
<template id="warningNotFound--${pageName}">
|
||||
<tr>
|
||||
<td valign="top" colspan="2"
|
||||
class="dataTables_empty text-center">정보를 찾지 못했습니다.</td>
|
||||
</tr>
|
||||
</template>
|
||||
</table>
|
||||
</div>
|
||||
</span>
|
||||
<!-- 미부과처리건 그리드 -->
|
||||
<span class="area-answerbody area-nonlevy">
|
||||
<div id="table-responsive-nonlevy--${pageName}"
|
||||
class="table-responsive oy-auto h-100"
|
||||
style="width:470px;">
|
||||
<table class="datatables-ajax table table-bordered dataTable no-footer">
|
||||
<thead class="sticky-thead">
|
||||
<tr>
|
||||
<th style="width:50px;"></th>
|
||||
<th style="min-width: 300px;">미부과사유</th>
|
||||
<th style="min-width: 100px;">답변여부</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="nonlevyTbody--${pageName}"></tbody>
|
||||
<template id="nonlevyRow--${pageName}">
|
||||
<tr data-key="{LEVY_EXCL_RSN_CD}">
|
||||
<td class="text-center min-w-px-50 mw-px-50">
|
||||
<input type="radio" name="nonlevyRadio" value="{LEVY_EXCL_RSN_CD}"
|
||||
onchange="{onchange}" />
|
||||
</td>
|
||||
<td onclick="{onclick}" class="text-center">{LEVY_EXCL_RSN_NM}</td>
|
||||
<td onclick="{onclick}" class="text-center">{USE_YN}</td>
|
||||
</tr>
|
||||
</template>
|
||||
<template id="nonlevyNotFound--${pageName}">
|
||||
<tr>
|
||||
<td valign="top" colspan="3"
|
||||
class="dataTables_empty text-center">정보를 찾지 못했습니다.</td>
|
||||
</tr>
|
||||
</template>
|
||||
</table>
|
||||
</div>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 답변내용 표시영역 -->
|
||||
<div class="w-px-800 d-inline-flex">
|
||||
<div class="container-md d-flex justify-content-between flex-column">
|
||||
<div class="row g-1 h-px-400 oy-auto border-separator-b">
|
||||
<div class="col-12">
|
||||
<form id="frmEditAnsBody--${pageName}">
|
||||
<input type="hidden" id="ansRsnCd--${pageName}" name="ansRsnCd" />
|
||||
<input type="hidden" id="dstrbncYn--${pageName}" name="dstrbncYn" />
|
||||
<input type="hidden" id="ansWordsId--${pageName}" name="ansWordsId" />
|
||||
<label for="prcsRsltCn--${pageName}"
|
||||
class="w-px-130 bg-lighter pe-2 col-form-label text-sm-center">
|
||||
답변내용
|
||||
</label>
|
||||
<br/>
|
||||
<textarea id="prcsRsltCn--${pageName}" name="prcsRsltCn"
|
||||
class="form-control w-100" required rows="15"
|
||||
></textarea>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row g-1 py-2">
|
||||
<div class="col-12">
|
||||
<div class="btns float-start">
|
||||
<button type="button" id="btnRemove--${pageName}"
|
||||
class="btn btn-primary area-answerbody area-nonlevy"
|
||||
title="답변대상 제외">답변대상 제외</button>
|
||||
</div>
|
||||
<div class="btns float-end">
|
||||
<button type="button" id="btnOpenPreviewPop--${pageName}"
|
||||
class="btn btn-primary" title="미리보기">미리보기</button>
|
||||
<button type="button" id="btnSaveAnsBody--${pageName}"
|
||||
class="btn btn-primary" title="적용">적용</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<!-- 매크로 삽입 버튼 영역 -->
|
||||
<div class="mt-4 d-flex flex-row justify-content-center align-items-center">
|
||||
<div class="card ps-3 py-3 w-px-1300">
|
||||
<div class="row">
|
||||
<div class="col-12 btns">
|
||||
<strong>[매크로 문자 삽입]</strong>
|
||||
<label id="macroTarget--${pageName}" for="" hidden></label>
|
||||
|
||||
<button type="button" id="btnInsertMacro1--${pageName}"
|
||||
class="btn btn-primary" title="일련번호 삽입">일련번호</button>
|
||||
<button type="button" id="btnInsertMacro2--${pageName}"
|
||||
class="btn btn-primary" title="사용자 전화번호 삽입">사용자 전화번호</button>
|
||||
<button type="button" id="btnInsertMacro3--${pageName}"
|
||||
class="btn btn-primary" title="사용자 성명 삽입">사용자 성명</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="toast-container position-fixed bottom-0 end-0 p-3">
|
||||
<div id="divToast--${pageName}" class="toast" role="alert" aria-live="assertive" aria-atomic="true">
|
||||
<div class="toast-body bg-black text-white">
|
||||
저장 되었습니다.
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content-backdrop fade"></div>
|
||||
</div>
|
||||
|
||||
<template id="previewDialogTemplate--${pageName}">
|
||||
<form id="frmView--${pageName}">
|
||||
<div class="card">
|
||||
<textarea id="preview--${pageName}" rows="15"
|
||||
></textarea>
|
||||
</div>
|
||||
<div>
|
||||
<span class="container-page-btn">
|
||||
<span class="container-window-btn-right">
|
||||
<button type="button" class="btn btn-primary" id="btnClose--${pageName}" title="닫기">닫기</button>
|
||||
</span>
|
||||
</span>
|
||||
</div>
|
||||
</form>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
LoadScript("answerWordsScript","/resources/js/fims/cvlc/answerWords.js");
|
||||
/**************************************************************************
|
||||
* Global Variable
|
||||
**************************************************************************/
|
||||
pageObject["${pageName}"] = {};
|
||||
|
||||
$(document).ready(function(){
|
||||
|
||||
var $P = pageObject["${pageName}"];
|
||||
|
||||
$P.toast = new bootstrap.Toast(document.getElementById('divToast--${pageName}'), {
|
||||
animation: true,
|
||||
autohide: true,
|
||||
delay: 2000
|
||||
});
|
||||
|
||||
/**************************************************************************
|
||||
* DatasetControl
|
||||
**************************************************************************/
|
||||
$P.ansBodyControl = new AnswerBodyControl({
|
||||
dataGetter : obj => obj["levyCaseList"], urls : {}, formats : {},
|
||||
keymapper : info => info ? info.VLTN_CASE_ID : ""
|
||||
},
|
||||
{
|
||||
dataGetter : obj => obj["warningCaseList"], urls : {}, formats : {},
|
||||
keymapper : info => info ? info.LEVY_EXCL_RSN_CD : ""
|
||||
},
|
||||
{
|
||||
dataGetter : obj => obj["nonlevyCaseList"], urls : {}, formats : {},
|
||||
keymapper : info => info ? info.LEVY_EXCL_RSN_CD : ""
|
||||
});
|
||||
|
||||
/**************************************************************************
|
||||
* pageObject.function
|
||||
**************************************************************************/
|
||||
$P.fnResetAndChangeBiz = (taskSeCd) => {
|
||||
$P.ansBodyControl.urls = {};
|
||||
$P.ansBodyControl.urls.load = wctx.url("/"+taskSeCd+"/cvlc/cvlc05/010/info.do");
|
||||
$P.ansBodyControl.urls.update = wctx.url("/"+taskSeCd+"/cvlc/cvlc05/010/save.do");
|
||||
$P.ansBodyControl.urls.remove = wctx.url("/"+taskSeCd+"/cvlc/cvlc05/010/remove.do");
|
||||
|
||||
$P.fnReset();
|
||||
}
|
||||
|
||||
$P.fnReset = () => {
|
||||
$('#btnAnsBasicTab--${pageName}').trigger("click");
|
||||
$P.ansBodyControl.levy.setData([]);
|
||||
$P.ansBodyControl.warning.setData([]);
|
||||
$P.ansBodyControl.nonlevy.setData([]);
|
||||
|
||||
$P.renderAnsBodyList(0,'levy');
|
||||
$P.renderAnsBodyList(0,'warning');
|
||||
$P.renderAnsBodyList(0,'nonlevy');
|
||||
|
||||
$("#frmEditAnsBasic--${pageName}").find("input, textarea").val("");
|
||||
$("#frmEditAnsBody--${pageName}").find("input, textarea").val("");
|
||||
|
||||
$P.searchWordsStng();
|
||||
}
|
||||
|
||||
$P.getParams = () => {
|
||||
var formFields = new FimsFormFields("#frmSearch--${pageName}");
|
||||
var data = formFields.get();
|
||||
return data;
|
||||
}
|
||||
|
||||
$P.searchWordsStng = () => {
|
||||
var taskSeCd = $("#frmSearch--${pageName}").find("input[name='taskSeCd']:checked").val();
|
||||
|
||||
ajax.get({
|
||||
url : $P.ansBodyControl.urls.load,
|
||||
data : {"taskSeCd" : taskSeCd},
|
||||
success : (resp) => {
|
||||
|
||||
$("#headerCn--${pageName}").val(resp.headerCn);
|
||||
$("#footerCn--${pageName}").val(resp.footerCn);
|
||||
|
||||
$P.ansBodyControl.levy.setData(resp.levyCaseList);
|
||||
$P.ansBodyControl.warning.setData(resp.warningCaseList);
|
||||
$P.ansBodyControl.nonlevy.setData(resp.nonlevyCaseList);
|
||||
|
||||
$P.renderAnsBodyList(resp.levyCaseList.length,'levy');
|
||||
$P.renderAnsBodyList(resp.warningCaseList.length,'warning');
|
||||
$P.renderAnsBodyList(resp.nonlevyCaseList.length,'nonlevy');
|
||||
|
||||
if(resp.levyCaseList.length > 0){
|
||||
var current = $P.ansBodyControl.levy.getCurrent()["VLTN_CASE_ID"];
|
||||
$P.clickAnsBodyList(current,'levy');
|
||||
}
|
||||
if(resp.warningCaseList.length > 0){
|
||||
var current = $P.ansBodyControl.warning.getCurrent()["LEVY_EXCL_RSN_CD"];
|
||||
$P.clickAnsBodyList(current,'warning');
|
||||
}
|
||||
if(resp.nonlevyCaseList.length > 0){
|
||||
var current = $P.ansBodyControl.nonlevy.getCurrent()["LEVY_EXCL_RSN_CD"];
|
||||
$P.clickAnsBodyList(current,'nonlevy');
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
$P.renderAnsBodyList = (total, renderDataType) => {
|
||||
|
||||
var notFoundId = "";
|
||||
var foundId = "";
|
||||
var tbodyId = "";
|
||||
if(renderDataType == "levy"){
|
||||
notFoundId = "vltnNotFound--${pageName}";
|
||||
foundId = "vltnRow--${pageName}";
|
||||
tbodyId = "vltnTbody--${pageName}";
|
||||
} else if(renderDataType == "warning"){
|
||||
notFoundId = "warningNotFound--${pageName}";
|
||||
foundId = "warningRow--${pageName}";
|
||||
tbodyId = "warningTbody--${pageName}";
|
||||
} else if(renderDataType == "nonlevy"){
|
||||
notFoundId = "nonlevyNotFound--${pageName}";
|
||||
foundId = "nonlevyRow--${pageName}";
|
||||
tbodyId = "nonlevyTbody--${pageName}";
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
|
||||
var ansBodyDS = $P.ansBodyControl[renderDataType].dataset;
|
||||
var empty = ansBodyDS.empty;
|
||||
var notFound = [document.getElementById(notFoundId).innerHTML];
|
||||
var found = document.getElementById(foundId).innerHTML;
|
||||
|
||||
var replacer = () => {};
|
||||
if(renderDataType == "levy"){
|
||||
replacer = (str, dataItem) => str
|
||||
.replace(/{onclick}/gi, "pageObject['${pageName}'].clickAnsBodyList('" + dataItem.getValue("VLTN_CASE_ID") + "','levy');")
|
||||
.replace(/{onchange}/gi, "pageObject['${pageName}'].radioClickAnsBodyList('" + dataItem.getValue("VLTN_CASE_ID") + "','levy');");
|
||||
} else if(renderDataType == "warning"){
|
||||
replacer = (str, dataItem) => str
|
||||
.replace(/{onclick}/gi, "pageObject['${pageName}'].clickAnsBodyList('" + dataItem.getValue("LEVY_EXCL_RSN_CD") + "','warning');")
|
||||
.replace(/{onchange}/gi, "pageObject['${pageName}'].radioClickAnsBodyList('" + dataItem.getValue("LEVY_EXCL_RSN_CD") + "','warning');");
|
||||
} else if(renderDataType == "nonlevy"){
|
||||
replacer = (str, dataItem) => str
|
||||
.replace(/{onclick}/gi, "pageObject['${pageName}'].clickAnsBodyList('" + dataItem.getValue("LEVY_EXCL_RSN_CD") + "','nonlevy');")
|
||||
.replace(/{onchange}/gi, "pageObject['${pageName}'].radioClickAnsBodyList('" + dataItem.getValue("LEVY_EXCL_RSN_CD") + "','nonlevy');");
|
||||
}
|
||||
|
||||
var trs = empty ? notFound : ansBodyDS.inStrings(found, replacer);
|
||||
$("#"+tbodyId).html(trs.join());
|
||||
}
|
||||
|
||||
$P.radioClickAnsBodyList = (dataKey, gridType) => {
|
||||
|
||||
$P.ansBodyControl[gridType].setCurrent(dataKey);
|
||||
|
||||
var tbodyId = "";
|
||||
if(gridType == "levy"){
|
||||
tbodyId = "vltnTbody--${pageName}";
|
||||
} else if(gridType == "warning"){
|
||||
tbodyId = "warningTbody--${pageName}";
|
||||
} else if(gridType == "nonlevy"){
|
||||
tbodyId = "nonlevyTbody--${pageName}";
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
$("#"+tbodyId).setCurrentRow(dataKey);
|
||||
|
||||
if(gridType == "levy" && $P.currentDisplay == "levyAnsBody"){
|
||||
$P.changeAnsBodyText();
|
||||
} else if(gridType == "warning" && $P.currentDisplay == "warningAnsBody"){
|
||||
$P.changeAnsBodyText();
|
||||
} else if(gridType == "nonlevy" && $P.currentDisplay == "nonlevyAnsBody"){
|
||||
$P.changeAnsBodyText();
|
||||
}
|
||||
}
|
||||
|
||||
$P.clickAnsBodyList = (dataKey, gridType) => {
|
||||
var radioName = "";
|
||||
if(gridType == "levy"){
|
||||
radioName = "levyRadio";
|
||||
} else if(gridType == "warning"){
|
||||
radioName = "warningRadio";
|
||||
} else if(gridType == "nonlevy"){
|
||||
radioName = "nonlevyRadio";
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
|
||||
$("#wrapper--${pageName}").find(":radio[name='"+radioName+"'][value='"+dataKey+"']").prop("checked",true);
|
||||
|
||||
if(gridType == "levy" && $P.currentDisplay == "levyAnsBody"){
|
||||
$("#wrapper--${pageName}").find(":radio[name='"+radioName+"'][value='"+dataKey+"']").focus();
|
||||
} else if(gridType == "warning" && $P.currentDisplay == "warningAnsBody"){
|
||||
$("#wrapper--${pageName}").find(":radio[name='"+radioName+"'][value='"+dataKey+"']").focus();
|
||||
} else if(gridType == "nonlevy" && $P.currentDisplay == "nonlevyAnsBody"){
|
||||
$("#wrapper--${pageName}").find(":radio[name='"+radioName+"'][value='"+dataKey+"']").focus();
|
||||
}
|
||||
|
||||
$P.radioClickAnsBodyList(dataKey, gridType);
|
||||
}
|
||||
|
||||
$P.changeAnsBodyText = () => {
|
||||
var curData = null;
|
||||
var rnsRsnCd = "";
|
||||
var dstrbncYn = "";
|
||||
|
||||
if($P.currentDisplay == "levyAnsBody"){
|
||||
curData = $P.ansBodyControl.levy.getCurrent();
|
||||
} else if($P.currentDisplay == "warningAnsBody"){
|
||||
curData = $P.ansBodyControl.warning.getCurrent();
|
||||
} else if($P.currentDisplay == "nonlevyAnsBody"){
|
||||
curData = $P.ansBodyControl.nonlevy.getCurrent();
|
||||
}
|
||||
|
||||
if(curData == null){
|
||||
$("#ansRsnCd--${pageName}").val("");
|
||||
$("#dstrbncYn--${pageName}").val("");
|
||||
$("#ansWordsId--${pageName}").val("");
|
||||
$("#prcsRsltCn--${pageName}").val("");
|
||||
return;
|
||||
}
|
||||
|
||||
if($P.currentDisplay == "levyAnsBody"){
|
||||
if(curData["VLTN_CASE_ID"].endsWith("D")){
|
||||
rnsRsnCd = "3" + curData["VLTN_CASE_ID"].substring(0,2);
|
||||
dstrbncYn = "Y";
|
||||
} else {
|
||||
rnsRsnCd = "3" + curData["VLTN_CASE_ID"];
|
||||
dstrbncYn = "N";
|
||||
}
|
||||
} else if($P.currentDisplay == "warningAnsBody"){
|
||||
rnsRsnCd = curData["LEVY_EXCL_RSN_CD"]
|
||||
} else if($P.currentDisplay == "nonlevyAnsBody"){
|
||||
rnsRsnCd = curData["LEVY_EXCL_RSN_CD"]
|
||||
|
||||
if(curData["ANS_WORDS_ID"] == null){
|
||||
$("#btnRemove--${pageName}").prop("disabled",true);
|
||||
} else {
|
||||
$("#btnRemove--${pageName}").prop("disabled",false);
|
||||
}
|
||||
}
|
||||
|
||||
$("#ansRsnCd--${pageName}").val(rnsRsnCd);
|
||||
$("#dstrbncYn--${pageName}").val(dstrbncYn);
|
||||
$("#ansWordsId--${pageName}").val(curData["ANS_WORDS_ID"]);
|
||||
$("#prcsRsltCn--${pageName}").val(curData["PRCS_RSLT_CN"]);
|
||||
}
|
||||
|
||||
$P.refreshAnsWordsInfo = () => {
|
||||
var cursor1 = $P.ansBodyControl.levy.getCurrent()["VLTN_CASE_ID"];
|
||||
var cursor2 = $P.ansBodyControl.warning.getCurrent()["LEVY_EXCL_RSN_CD"];
|
||||
var cursor3 = $P.ansBodyControl.nonlevy.getCurrent()["LEVY_EXCL_RSN_CD"];
|
||||
|
||||
var taskSeCd = $("#frmSearch--${pageName}").find("input[name='taskSeCd']:checked").val();
|
||||
|
||||
ajax.get({
|
||||
url : $P.ansBodyControl.urls.load,
|
||||
data : {"taskSeCd" : taskSeCd},
|
||||
success : (resp) => {
|
||||
|
||||
$("#headerCn--${pageName}").val(resp.headerCn);
|
||||
$("#footerCn--${pageName}").val(resp.footerCn);
|
||||
|
||||
$P.ansBodyControl.levy.setData(resp.levyCaseList);
|
||||
$P.ansBodyControl.warning.setData(resp.warningCaseList);
|
||||
$P.ansBodyControl.nonlevy.setData(resp.nonlevyCaseList);
|
||||
|
||||
$P.renderAnsBodyList(resp.levyCaseList.length,'levy');
|
||||
$P.renderAnsBodyList(resp.warningCaseList.length,'warning');
|
||||
$P.renderAnsBodyList(resp.nonlevyCaseList.length,'nonlevy');
|
||||
|
||||
if(resp.levyCaseList.length > 0){
|
||||
$P.ansBodyControl.levy.setCurrent(cursor1);
|
||||
var current = $P.ansBodyControl.levy.getCurrent()["VLTN_CASE_ID"];
|
||||
$P.clickAnsBodyList(current,'levy');
|
||||
}
|
||||
if(resp.warningCaseList.length > 0){
|
||||
$P.ansBodyControl.warning.setCurrent(cursor2);
|
||||
var current = $P.ansBodyControl.warning.getCurrent()["LEVY_EXCL_RSN_CD"];
|
||||
$P.clickAnsBodyList(current,'warning');
|
||||
}
|
||||
if(resp.nonlevyCaseList.length > 0){
|
||||
$P.ansBodyControl.nonlevy.setCurrent(cursor3);
|
||||
var current = $P.ansBodyControl.nonlevy.getCurrent()["LEVY_EXCL_RSN_CD"];
|
||||
$P.clickAnsBodyList(current,'nonlevy');
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
//적용
|
||||
$P.fnSave = (isBasicWords) => {
|
||||
|
||||
var formId = "";
|
||||
var confirmMessage = "";
|
||||
|
||||
if(isBasicWords){
|
||||
confirmMessage = "머리말/꼬리말 내용을 저장하시겠습니까?";
|
||||
formId = "frmEditAnsBasic--${pageName}";
|
||||
} else {
|
||||
confirmMessage = "본문내용을 저장하시겠습니까?"
|
||||
formId = "frmEditAnsBody--${pageName}";
|
||||
}
|
||||
|
||||
|
||||
if(!customValidate($("#"+formId).find("input, select, textarea"))) return;
|
||||
var info = (new FimsFormFields("#"+formId)).get();
|
||||
if(isBasicWords){
|
||||
info.saveData = "basic";
|
||||
} else {
|
||||
info.saveData = "body";
|
||||
}
|
||||
info.taskSeCd = $("#frmSearch--${pageName}").find("input[name='taskSeCd']:checked").val();
|
||||
|
||||
dialog.alert({
|
||||
content : confirmMessage,
|
||||
init : function() { focusOK(); },
|
||||
onOK: () => {
|
||||
|
||||
ajax.get({
|
||||
url : $P.ansBodyControl.urls.update,
|
||||
data : info,
|
||||
success : (resp) => {
|
||||
if(resp.saved){
|
||||
$P.toast.show();
|
||||
sleep(1000).then(() => $P.refreshAnsWordsInfo());
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
//답변대상 제외
|
||||
$P.fnRemove = () => {
|
||||
|
||||
if(!customValidate($("#frmEditAnsBody--${pageName}").find("input, select, textarea"))) return;
|
||||
var info = (new FimsFormFields("#frmEditAnsBody--${pageName}")).get();
|
||||
|
||||
dialog.alert({
|
||||
content : "해당 미부과사유를 답변대상에서 제외하시겠습니까?",
|
||||
init : function() { focusOK(); },
|
||||
onOK: () => {
|
||||
ajax.get({
|
||||
url : $P.ansBodyControl.urls.remove,
|
||||
data : info,
|
||||
success : (resp) => {
|
||||
if(resp.saved){
|
||||
$P.toast.show();
|
||||
sleep(1000).then(() => $P.refreshAnsWordsInfo());
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
//미리보기 팝업 호출
|
||||
$P.fnOpenPreviewPop = () => {
|
||||
|
||||
var result = fnMacroWordsReplace(
|
||||
$("#headerCn--${pageName}").val(),
|
||||
$("#footerCn--${pageName}").val(),
|
||||
$("#prcsRsltCn--${pageName}").val(),
|
||||
"${currentUserTelno}",
|
||||
"${currentUserName}"
|
||||
);
|
||||
|
||||
dialog.open({
|
||||
id : "previewDialog--${pageName}",
|
||||
title : "답변 내용 미리보기",
|
||||
content : document.getElementById("previewDialogTemplate--${pageName}").innerHTML,
|
||||
size : "lg",
|
||||
init : () => {
|
||||
$("#preview--${pageName}").val(result);
|
||||
$("#btnClose--${pageName}").on("click", () => dialog.close("previewDialog--${pageName}"));
|
||||
},
|
||||
onOk : () => {},
|
||||
onClose : () => {}
|
||||
});
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* element.on
|
||||
**************************************************************************/
|
||||
$('#btnReset--${pageName}').on('click', () => $P.fnReset());
|
||||
|
||||
//탭 버튼
|
||||
$('#btnAnsBasicTab--${pageName}').on('click', (event) => {
|
||||
|
||||
$("#wrapper--${pageName}").find(".area-answerbasic").show();
|
||||
$("#wrapper--${pageName}").find(".area-answerbody").hide();
|
||||
|
||||
$P.currentDisplay = "ansBasic";
|
||||
|
||||
$("#macroTarget--${pageName}").attr("for","");
|
||||
});
|
||||
|
||||
$('#btnLevyAnsBodyTab--${pageName}').on('click', (event) => {
|
||||
|
||||
$("#wrapper--${pageName}").find(".area-answerbasic").hide();
|
||||
$("#wrapper--${pageName}").find(".area-answerbody").each(function(){
|
||||
if($(this).hasClass("area-answerbody-common") || $(this).hasClass("area-levy")){
|
||||
$(this).show();
|
||||
} else {
|
||||
$(this).hide();
|
||||
}
|
||||
});
|
||||
|
||||
$P.currentDisplay = "levyAnsBody";
|
||||
|
||||
$("#wrapper--${pageName}").find(":radio[name='levyRadio']:checked").focus();
|
||||
|
||||
$P.changeAnsBodyText();
|
||||
|
||||
$("#macroTarget--${pageName}").attr("for","");
|
||||
});
|
||||
$('#btnWarningAnsBodyTab--${pageName}').on('click', (event) => {
|
||||
|
||||
$("#wrapper--${pageName}").find(".area-answerbasic").hide();
|
||||
$("#wrapper--${pageName}").find(".area-answerbody").each(function(){
|
||||
if($(this).hasClass("area-answerbody-common") || $(this).hasClass("area-warning")){
|
||||
$(this).show();
|
||||
} else {
|
||||
$(this).hide();
|
||||
}
|
||||
});
|
||||
|
||||
$P.currentDisplay = "warningAnsBody";
|
||||
|
||||
$("#wrapper--${pageName}").find(":radio[name='warningRadio']:checked").focus();
|
||||
|
||||
$P.changeAnsBodyText();
|
||||
|
||||
$("#macroTarget--${pageName}").attr("for","");
|
||||
});
|
||||
$('#btnNonlevyAnsBodyTab--${pageName}').on('click', (event) => {
|
||||
|
||||
$("#wrapper--${pageName}").find(".area-answerbasic").hide();
|
||||
$("#wrapper--${pageName}").find(".area-answerbody").each(function(){
|
||||
if($(this).hasClass("area-answerbody-common") || $(this).hasClass("area-nonlevy")){
|
||||
$(this).show();
|
||||
} else {
|
||||
$(this).hide();
|
||||
}
|
||||
});
|
||||
|
||||
$P.currentDisplay = "nonlevyAnsBody";
|
||||
|
||||
$("#wrapper--${pageName}").find(":radio[name='nonlevyRadio']:checked").focus();
|
||||
|
||||
$P.changeAnsBodyText();
|
||||
|
||||
$("#macroTarget--${pageName}").attr("for","");
|
||||
});
|
||||
|
||||
//업무처리 버튼
|
||||
$("#btnSaveAnsBasic--${pageName}").on("click", () => $P.fnSave(true));
|
||||
$("#btnSaveAnsBody--${pageName}").on("click", () => $P.fnSave(false));
|
||||
$("#btnRemove--${pageName}").on("click", () => $P.fnRemove());
|
||||
$("#btnOpenPreviewPop--${pageName}").on("click", () => $P.fnOpenPreviewPop());
|
||||
|
||||
$("#headerCn--${pageName},#footerCn--${pageName},#prcsRsltCn--${pageName}").on("focus", (event) => {
|
||||
$("#macroTarget--${pageName}").attr("for", event.target.id);
|
||||
});
|
||||
|
||||
$("#btnInsertMacro1--${pageName}").on("click", () => {
|
||||
var macroTarget = $("#macroTarget--${pageName}").attr("for");
|
||||
if(macroTarget == ""){ return; }
|
||||
fnMacroStringInsert(macroTarget, MACRO_STRING.MACRO_SEQ);
|
||||
});
|
||||
$("#btnInsertMacro2--${pageName}").on("click", () => {
|
||||
var macroTarget = $("#macroTarget--${pageName}").attr("for");
|
||||
if(macroTarget == ""){ return; }
|
||||
fnMacroStringInsert(macroTarget, MACRO_STRING.MACRO_TELNO);
|
||||
});
|
||||
$("#btnInsertMacro3--${pageName}").on("click", () => {
|
||||
var macroTarget = $("#macroTarget--${pageName}").attr("for");
|
||||
if(macroTarget == ""){ return; }
|
||||
fnMacroStringInsert(macroTarget, MACRO_STRING.MACRO_PIC_NM);
|
||||
});
|
||||
/**************************************************************************
|
||||
* 초기화
|
||||
**************************************************************************/
|
||||
var defaultBizValue = $("#layout-navbar input[name='taskSeCd']:checked").val();
|
||||
$("#frmSearch--${pageName} input[name='taskSeCd'][value='" + defaultBizValue + "']").prop("checked",true);
|
||||
$P.fnResetAndChangeBiz(defaultBizValue);
|
||||
|
||||
$("#frmSearch--${pageName} input[name='taskSeCd']").each(function(i) {
|
||||
$(this).prop("disabled", "true");
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
</script>
|
||||
@ -1,318 +0,0 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
<c:set var="pageKorName" scope="request">계도문 문구 관리</c:set>
|
||||
<div class="content-wrapper" id="wrapper--${pageName}">
|
||||
<div class="container-xxl flex-grow-1 px-0">
|
||||
<div class="card wrapper-list">
|
||||
|
||||
<form id="frmSearch--${pageName}" name="frmSearch">
|
||||
<div class="container-search">
|
||||
<div class="row g-1">
|
||||
<div class="col-12">
|
||||
<span class="form-label fw-bold form-search-title w-px-120 text-end">업무구분</span>
|
||||
<span class="form-search-linebox">
|
||||
<c:forEach items="${TaskListForSgg}" var="item">
|
||||
<label>
|
||||
<input name="taskSeCd" type="radio" value="${item.code}"
|
||||
class="form-check-input" alt="업무구분"
|
||||
onchange="pageObject['${pageName}'].fnResetAndChangeBiz(this.value);">
|
||||
${item.value}
|
||||
</label>
|
||||
</c:forEach>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<div class="container-page-btn mt-3">
|
||||
<button type="button" id="btnReset--${pageName}" class="btn btn-outline-dark w-px-120" title="초기화">
|
||||
초기화
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<div class="h-px-500 mt-4">
|
||||
|
||||
<div class="d-flex flex-row justify-content-center h-100">
|
||||
<div class="card p-4 d-flex flex-row w-px-1300">
|
||||
<!-- 그리드 영역 -->
|
||||
<div class="card-datatable text-nowrap d-inline-flex border-card">
|
||||
<div class="dataTables_wrapper dt-bootstrap5 no-footer">
|
||||
<div class="table-responsive oy-auto h-100"
|
||||
style="width:470px;">
|
||||
<table class="datatables-ajax table table-bordered dataTable no-footer">
|
||||
<thead class="sticky-thead">
|
||||
<tr>
|
||||
<th style="width:50px;"></th>
|
||||
<th style="min-width: 300px;">계도사유</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="warningWordsTbody--${pageName}"></tbody>
|
||||
<template id="warningWordsRow--${pageName}">
|
||||
<tr data-key="{LEVY_EXCL_RSN_CD}">
|
||||
<td class="text-center min-w-px-50 mw-px-50">
|
||||
<input type="radio" name="gridRadio" value="{LEVY_EXCL_RSN_CD}"
|
||||
onchange="{onchange}" />
|
||||
</td>
|
||||
<td onclick="{onclick}" class="text-center">{LEVY_EXCL_RSN_NM}</td>
|
||||
</tr>
|
||||
</template>
|
||||
<template id="warningWordsNotFound--${pageName}">
|
||||
<tr>
|
||||
<td valign="top" colspan="2"
|
||||
class="dataTables_empty text-center">정보를 찾지 못했습니다.</td>
|
||||
</tr>
|
||||
</template>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 제목,내용 표시영역 -->
|
||||
<div class="w-px-800 d-inline-flex">
|
||||
<div class="container-md d-flex justify-content-between flex-column">
|
||||
<div class="row g-1 h-px-400 border-separator-b oy-auto">
|
||||
<div class="col-12">
|
||||
<form id="frmEditWarningWords--${pageName}">
|
||||
<input type="hidden" id="ansRsnCd--${pageName}" name="ansRsnCd" />
|
||||
<input type="hidden" id="ansWordsId--${pageName}" name="ansWordsId" />
|
||||
<label for="mailTtlNm--${pageName}"
|
||||
class="w-px-130 bg-lighter pe-2 col-form-label text-sm-center">제목</label>
|
||||
<input type="text" id="mailTtlNm--${pageName}" name="mailTtlNm" required
|
||||
class="form-control w-px-500" />
|
||||
<br/>
|
||||
<label for="mailCn--${pageName}"
|
||||
class="w-px-130 bg-lighter pe-2 col-form-label text-sm-center" hidden>
|
||||
내용
|
||||
</label>
|
||||
<textarea id="mailCn--${pageName}" name="mailCn" class="form-control w-100"
|
||||
required rows="15"
|
||||
></textarea>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row g-1 py-2">
|
||||
<div class="col-12">
|
||||
<div class="btns float-end">
|
||||
<button type="button" id="btnSave--${pageName}"
|
||||
class="btn btn-primary" title="적용">적용</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="toast-container position-fixed bottom-0 end-0 p-3">
|
||||
<div id="divToast--${pageName}" class="toast" role="alert" aria-live="assertive" aria-atomic="true">
|
||||
<div class="toast-body bg-black text-white">
|
||||
저장 되었습니다.
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content-backdrop fade"></div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
/**************************************************************************
|
||||
* Global Variable
|
||||
**************************************************************************/
|
||||
pageObject["${pageName}"] = {};
|
||||
|
||||
$(document).ready(function(){
|
||||
|
||||
var $P = pageObject["${pageName}"];
|
||||
|
||||
$P.toast = new bootstrap.Toast(document.getElementById('divToast--${pageName}'), {
|
||||
animation: true,
|
||||
autohide: true,
|
||||
delay: 2000
|
||||
});
|
||||
|
||||
/**************************************************************************
|
||||
* DatasetControl
|
||||
**************************************************************************/
|
||||
$P.warningWordsControl = new DatasetControl({
|
||||
dataGetter : obj => obj["List"],
|
||||
keymapper : info => info ? info.LEVY_EXCL_RSN_CD : "",
|
||||
urls : {},
|
||||
formats : {}
|
||||
});
|
||||
|
||||
/**************************************************************************
|
||||
* pageObject.function
|
||||
**************************************************************************/
|
||||
$P.fnResetAndChangeBiz = (taskSeCd) => {
|
||||
$P.warningWordsControl.urls = {};
|
||||
$P.warningWordsControl.urls.load = wctx.url("/"+taskSeCd+"/cvlc/cvlc06/010/list.do");
|
||||
$P.warningWordsControl.urls.update = wctx.url("/"+taskSeCd+"/cvlc/cvlc06/010/save.do");
|
||||
|
||||
$P.fnReset();
|
||||
}
|
||||
|
||||
$P.fnReset = () => {
|
||||
|
||||
$P.warningWordsControl.dataset.setData([]);
|
||||
$P.renderWarningWordsList(0);
|
||||
$("#frmEditWarningWords--${pageName}").find("input, textarea").val("");
|
||||
|
||||
$P.searchWordsStng();
|
||||
}
|
||||
|
||||
$P.getParams = () => {
|
||||
var formFields = new FimsFormFields("#frmSearch--${pageName}");
|
||||
var data = formFields.get();
|
||||
return data;
|
||||
}
|
||||
|
||||
$P.searchWordsStng = () => {
|
||||
var taskSeCd = $("#frmSearch--${pageName}").find("input[name='taskSeCd']:checked").val();
|
||||
|
||||
ajax.get({
|
||||
url : $P.warningWordsControl.urls.load,
|
||||
data : {"taskSeCd" : taskSeCd},
|
||||
success : (resp) => {
|
||||
|
||||
$P.warningWordsControl.dataset.setData(resp.List);
|
||||
|
||||
$P.renderWarningWordsList(resp.List.length);
|
||||
|
||||
if(resp.List.length > 0){
|
||||
var current = $P.warningWordsControl.dataset.getCurrent()["LEVY_EXCL_RSN_CD"];
|
||||
$P.clickWarningWordsList(current);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
$P.renderWarningWordsList = (total) => {
|
||||
|
||||
var warningWordsDS = $P.warningWordsControl.dataset;
|
||||
var empty = warningWordsDS.empty;
|
||||
var notFound = [document.getElementById("warningWordsNotFound--${pageName}").innerHTML];
|
||||
var found = document.getElementById("warningWordsRow--${pageName}").innerHTML;
|
||||
|
||||
var replacer = (str, dataItem) => str
|
||||
.replace(/{onclick}/gi, "pageObject['${pageName}'].clickWarningWordsList('" + dataItem.getValue("LEVY_EXCL_RSN_CD") + "');")
|
||||
.replace(/{onchange}/gi, "pageObject['${pageName}'].radioClickWarningWordsList('" + dataItem.getValue("LEVY_EXCL_RSN_CD") + "');");
|
||||
|
||||
var trs = empty ? notFound : warningWordsDS.inStrings(found, replacer);
|
||||
$("#warningWordsTbody--${pageName}").html(trs.join());
|
||||
}
|
||||
|
||||
$P.radioClickWarningWordsList = (dataKey, gridType) => {
|
||||
|
||||
$P.warningWordsControl.dataset.setCurrent(dataKey);
|
||||
|
||||
$("#warningWordsTbody--${pageName}").setCurrentRow(dataKey);
|
||||
|
||||
$P.changeTextarea();
|
||||
}
|
||||
|
||||
$P.clickWarningWordsList = (dataKey, gridType) => {
|
||||
|
||||
$("#wrapper--${pageName}").find(":radio[name='gridRadio'][value='"+dataKey+"']").prop("checked",true);
|
||||
$("#wrapper--${pageName}").find(":radio[name='gridRadio'][value='"+dataKey+"']").focus();
|
||||
|
||||
|
||||
$P.radioClickWarningWordsList(dataKey, gridType);
|
||||
}
|
||||
|
||||
$P.changeTextarea = () => {
|
||||
|
||||
var curData = $P.warningWordsControl.dataset.getCurrent();
|
||||
|
||||
if(curData == null){
|
||||
$("#ansRsnCd--${pageName}").val("");
|
||||
$("#ansWordsId--${pageName}").val("");
|
||||
$("#mailTtlNm--${pageName}").val("");
|
||||
$("#mailCn--${pageName}").val("");
|
||||
return;
|
||||
}
|
||||
|
||||
$("#ansRsnCd--${pageName}").val(curData["LEVY_EXCL_RSN_CD"]);
|
||||
$("#ansWordsId--${pageName}").val(curData["ANS_WORDS_ID"]);
|
||||
$("#mailTtlNm--${pageName}").val(curData["MAIL_TTL_NM"]);
|
||||
$("#mailCn--${pageName}").val(curData["MAIL_CN"]);
|
||||
}
|
||||
|
||||
$P.refreshWarningWordsInfo = () => {
|
||||
|
||||
var cursor = $P.warningWordsControl.dataset.getCurrent()["LEVY_EXCL_RSN_CD"];
|
||||
|
||||
var taskSeCd = $("#frmSearch--${pageName}").find("input[name='taskSeCd']:checked").val();
|
||||
|
||||
ajax.get({
|
||||
url : $P.warningWordsControl.urls.load,
|
||||
data : {"taskSeCd" : taskSeCd},
|
||||
success : (resp) => {
|
||||
|
||||
$P.warningWordsControl.dataset.setData(resp.List);
|
||||
$P.renderWarningWordsList(resp.List.length);
|
||||
if(resp.List.length > 0){
|
||||
$P.warningWordsControl.dataset.setCurrent(cursor);
|
||||
var current = $P.warningWordsControl.dataset.getCurrent()["LEVY_EXCL_RSN_CD"];
|
||||
$P.clickWarningWordsList(current,'warning');
|
||||
}
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
//적용
|
||||
$P.fnSave = () => {
|
||||
|
||||
if(!customValidate($("#frmEditWarningWords--${pageName}").find("input, select, textarea"))) return;
|
||||
|
||||
var info = (new FimsFormFields("#frmEditWarningWords--${pageName}")).get();
|
||||
|
||||
info.taskSeCd = $("#frmSearch--${pageName}").find("input[name='taskSeCd']:checked").val();
|
||||
|
||||
dialog.alert({
|
||||
content : "저장하시겠습니까?",
|
||||
init : function() {
|
||||
focusOK();
|
||||
},
|
||||
onOK: () => {
|
||||
|
||||
ajax.get({
|
||||
url : $P.warningWordsControl.urls.update,
|
||||
data : info,
|
||||
success : (resp) => {
|
||||
if(resp.saved){
|
||||
$P.toast.show();
|
||||
sleep(1000).then(() => $P.refreshWarningWordsInfo());
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* element.on
|
||||
**************************************************************************/
|
||||
$('#btnReset--${pageName}').on('click', () => $P.fnReset());
|
||||
|
||||
//업무처리 버튼
|
||||
$("#btnSave--${pageName}").on("click", () => $P.fnSave());
|
||||
|
||||
/**************************************************************************
|
||||
* 초기화
|
||||
**************************************************************************/
|
||||
var defaultBizValue = $("#layout-navbar input[name='taskSeCd']:checked").val();
|
||||
$("#frmSearch--${pageName} input[name='taskSeCd'][value='" + defaultBizValue + "']").prop("checked",true);
|
||||
$P.fnResetAndChangeBiz(defaultBizValue);
|
||||
|
||||
$("#frmSearch--${pageName} input[name='taskSeCd']").each(function(i) {
|
||||
$(this).prop("disabled", "true");
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
</script>
|
||||
@ -1,590 +0,0 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
|
||||
<c:set var="prefixName" scope="request">우편통합 안내문</c:set>
|
||||
|
||||
<!-- inner page html -->
|
||||
<div class="content-wrapper">
|
||||
<!-- Content -->
|
||||
<div class="container-xxl flex-grow-1 px-0">
|
||||
<div class="card wrapper-list">
|
||||
<!-- 상단 버튼 -->
|
||||
<div class="container-page-btn">
|
||||
<button type="button" class="btn btn-outline-dark w-px-120" id="btnReset--${pageName}" title="초기화">
|
||||
초기화
|
||||
</button>
|
||||
<span class="container-window-btn-right">
|
||||
<button type="button" class="btn btn-search w-px-120" id="btnSearch--${pageName}" title="검색">
|
||||
검색
|
||||
</button>
|
||||
<button type="button" class="btn btn-excel w-px-120" id="btnExcel--${pageName}" title="엑셀">
|
||||
엑셀
|
||||
</button>
|
||||
</span>
|
||||
</div>
|
||||
<!-- 상단 버튼 -->
|
||||
|
||||
<!-- 검색 조건 영역 -->
|
||||
<form id="frmSearch--${pageName}" name="frmSearch">
|
||||
<!-- hidden -->
|
||||
<input type="hidden" id="sggCd--${pageName}" name="sggCd" />
|
||||
|
||||
<!-- 메인 조건 -->
|
||||
<div class="container-search">
|
||||
<div class="row g-1">
|
||||
<!-- 업무구분 -->
|
||||
<div class="col-12">
|
||||
<span class="form-label fw-bold form-search-title w-px-120 text-end">업무구분</span>
|
||||
<span class="form-search-linebox">
|
||||
<c:forEach items="${taskListForSgg}" var="item">
|
||||
<label>
|
||||
<input type="radio" class="form-check-input" name="taskSeCd" alt="업무구분"
|
||||
value="${item.code}" onchange="pageObject['${pageName}'].fnResetAndChangeBiz(this.value);">
|
||||
${item.value}
|
||||
</label>
|
||||
</c:forEach>
|
||||
</span>
|
||||
</div>
|
||||
<!-- 발송 구분 코드 -->
|
||||
<div class="col-6">
|
||||
<label class="form-label fw-bold form-search-title w-px-120 text-end" for="schSndngSeCd--${pageName}">발송구분</label>
|
||||
<select class="form-select w-px-160" id="schSndngSeCd--${pageName}" name="schSndngSeCd">
|
||||
<option value="">전체</option>
|
||||
<c:forEach items="${FIM047List}" var="item">
|
||||
<option value="${item.code}">${item.value}</option>
|
||||
</c:forEach>
|
||||
</select>
|
||||
</div>
|
||||
<!-- 동적검색 -->
|
||||
<div class="col-6">
|
||||
<input type="hidden" id="by--${pageName}" name="by" />
|
||||
<input type="text" class="form-control fw-bold w-px-120 text-end" id="byOutput--${pageName}" value="동적 검색" readonly />
|
||||
<input type="hidden" id="mainOption--${pageName}" name="mainOption" />
|
||||
<input type="hidden" id="subOption--${pageName}" name="subOption" />
|
||||
<input type="text" class="form-control w-px-400" id="term--${pageName}" name="term" autocomplete="off" />
|
||||
<!-- 상세 검색조건 버튼 -->
|
||||
<span class="flr">
|
||||
<button type="button" class="btn btn-open-detail" data-bs-toggle="collapse" data-bs-target="#searchDetail--${pageName}">
|
||||
<i class="bx bx-chevron-down"></i>
|
||||
상세검색
|
||||
</button>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div> <!-- 메인 조건 -->
|
||||
|
||||
<!-- 상세 조건 -->
|
||||
<div id="searchDetail--${pageName}" class="container-search container-search-detail collapse">
|
||||
<div class="row g-1">
|
||||
<!-- 등록일자, 수정일자 -->
|
||||
<div class="col-6">
|
||||
<select class="form-select w-px-120 text-center" id="schRegDateOpt--${pageName}" name="schRegDateOpt">
|
||||
<option value="regDt">등록일자</option>
|
||||
<option value="mdfcnDt">수정일자</option>
|
||||
</select>
|
||||
<span class="form-search-linebox">
|
||||
<input type="text" class="form-control form-date" id="schRegDateFrom--${pageName}" name="schRegDateFrom"
|
||||
data-fmt-type="day" title="시작 날짜 선택" />
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
~
|
||||
<input type="text" class="form-control form-date" id="schRegDateTo--${pageName}" name="schRegDateTo"
|
||||
data-fmt-type="day" title="종료 날짜 선택">
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
</span>
|
||||
</div>
|
||||
<!-- 등록자명, 수정자명 -->
|
||||
<div class="col-6">
|
||||
<select class="form-select w-px-120 text-center" id="schRgtrOpt--${pageName}" name="schRgtrOpt">
|
||||
<option value="rgtr">등록자</option>
|
||||
<option value="mdfr">수정자</option>
|
||||
</select>
|
||||
<input type="hidden" id="schRgtrCd--${pageName}" name="schRgtrCd" />
|
||||
<input type="text" class="form-control w-px-160" id="schRgtrNm--${pageName}" name="schRgtrNm" />
|
||||
<button type="button" class="btn btn-sm btn-outline-dark" id="btnFindUser--${pageName}" title="사용자 검색">검색</button>
|
||||
</div>
|
||||
</div>
|
||||
</div> <!-- 상세 조건 -->
|
||||
</form>
|
||||
<!-- 검색 조건 영역 -->
|
||||
|
||||
<!-- 업무 버튼 및 건수 표시 -->
|
||||
<div>
|
||||
<span class="container-page-btn">
|
||||
<!-- 건수, 페이지 표시 -->
|
||||
<div class="d-flex flex-row justify-content-between">
|
||||
<span class="dataTables_info" id="paging--${pageName}PagingInfo" role="status" aria-live="polite"></span>
|
||||
<ul class="pagination pagination-primary" id="paging--${pageName}">
|
||||
</ul>
|
||||
</div>
|
||||
<!-- 업무 버튼 -->
|
||||
<span class="container-window-btn-right">
|
||||
<button type="button" class="btn btn-primary w-px-120" id="btnCreate--${pageName}" title="안내문 등록">
|
||||
안내문 등록
|
||||
</button>
|
||||
<button type="button" class="btn btn-primary w-px-120" id="btnUpdate--${pageName}" title="안내문 수정">
|
||||
안내문 수정
|
||||
</button>
|
||||
<button type="button" class="btn btn-primary w-px-120" id="btnRemove--${pageName}" title="안내문 삭제">
|
||||
안내문 삭제
|
||||
</button>
|
||||
</span>
|
||||
</span>
|
||||
</div>
|
||||
<!-- 업무 버튼 및 건수 표시 -->
|
||||
|
||||
<!-- DataTables(그리드) -->
|
||||
<div class="card-datatable text-nowrap">
|
||||
<div class="dataTables_wrapper dt-bootstrap5 no-footer" id="DataTables_Table_0_wrapper--${pageName}">
|
||||
<div class="table-responsive ox-scroll oy-scroll h-px-500" id="table-responsive--${pageName}">
|
||||
<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">
|
||||
<tr id="theadTr--${pageName}"
|
||||
data-by="by--${pageName}" data-by-output="byOutput--${pageName}" data-main-option="mainOption--${pageName}" data-sub-option="subOption--${pageName}">
|
||||
<th class="cmn" style="width: 72px;">No.</th>
|
||||
<th class="cmn" style="width: 56px;"><input type="checkbox" class="form-check-input" id="gridAllCheckbox--${pageName}" onchange="pageObject['${pageName}'].control.select(this.checked);" /></th>
|
||||
<th class="cmn" style="width: 160px;">업무구분</th>
|
||||
<th class="cmn" style="width: 140px;">발송구분</th>
|
||||
<th class="cmn" style="width: 180px;">최종사용일시</th>
|
||||
<th class="cmn" style="width: 320px;" onclick="searchFromGridTitle('TTL_NM', this.innerText, 'match', 'part');">제목</th>
|
||||
<th class="cmn" style="width: 400px;">문구내용</th>
|
||||
<th class="cmn" style="width: 100px;">사용여부</th>
|
||||
<th class="cmn" style="width: 180px;">등록일시</th>
|
||||
<th class="cmn" style="width: 140px;">등록사용자</th>
|
||||
<th class="cmn" style="width: 180px;">수정일시</th>
|
||||
<th class="cmn" style="width: 140px;">수정사용자</th>
|
||||
<th class="cmn dummy-th"></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="tbody--${pageName}">
|
||||
</tbody>
|
||||
<template id="${infoPrefix}Row--${pageName}">
|
||||
<tr data-key="{GDNTC_ID}">
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{ROW_NUM}</td>
|
||||
<td class="cmn text-center"><input type="checkbox" class="form-check-input" name="gridCheckbox" value="{GDNTC_ID}" onchange="pageObject['${pageName}'].control.select('{GDNTC_ID}', this.checked);"></td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{TASK_SE_NM}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{SNDNG_SE_NM}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{LAST_USE_DT}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{TTL_NM}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{WORDS_CN}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{USE_YN_NM}</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}">{MDFCN_DT}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{MDFR_NM}</td>
|
||||
<td class="cmn dummy-td"></td>
|
||||
</tr>
|
||||
</template>
|
||||
<template id="${infoPrefix}NotFound--${pageName}">
|
||||
<tr class="odd">
|
||||
<td valign="top" colspan="13" class="dataTables_empty text-center">${prefixName} 정보를 찾지 못했습니다.</td>
|
||||
</tr>
|
||||
</template>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- DataTables(그리드) -->
|
||||
</div> <!-- <div class="card wrapper-list"> -->
|
||||
</div> <!-- <div class="container-xxl flex-grow-1 px-0"> -->
|
||||
<!-- Content -->
|
||||
|
||||
<div class="content-backdrop fade"></div>
|
||||
</div>
|
||||
<!-- / inner page html <div class="content-wrapper"> -->
|
||||
|
||||
<script>
|
||||
/**************************************************************************
|
||||
* Global Variable
|
||||
**************************************************************************/
|
||||
pageObject["${pageName}"] = {};
|
||||
|
||||
/**************************************************************************
|
||||
* script 진입
|
||||
**************************************************************************/
|
||||
$(document).ready(function() {
|
||||
// pageObject
|
||||
let $P = pageObject["${pageName}"];
|
||||
|
||||
// FormFields
|
||||
$P.formFields = new FimsFormFields("#frmSearch--${pageName}");
|
||||
|
||||
/**************************************************************************
|
||||
* DatasetControl
|
||||
**************************************************************************/
|
||||
$P.control = new DatasetControl({
|
||||
prefix: "epostGdntc"
|
||||
, prefixName: "전자우편 안내문"
|
||||
, keymapper: info => info ? info.GDNTC_ID : ""
|
||||
, dataGetter: obj => obj.${infoPrefix}List
|
||||
, appendData: true
|
||||
, infoSize: "md"
|
||||
, formats: {
|
||||
LAST_USE_DT: datetimeFormat
|
||||
, REG_DT: datetimeFormat
|
||||
, MDFCN_DT: datetimeFormat
|
||||
}
|
||||
});
|
||||
// $P.control 설정
|
||||
$P.control.defaultFetchSize = FETCH_XS; // 1 페이지당 조회되는 자료 건수 index.jsp에서 확인 FETCH_XS = 30
|
||||
$P.control.query = { pageNum : 1, fetchSize : $P.control.defaultFetchSize };
|
||||
$P.control.beforeCurrent = null;
|
||||
|
||||
/**************************************************************************
|
||||
* DatasetControl 이벤트
|
||||
**************************************************************************/
|
||||
// Dataset 변경 이벤트
|
||||
$P.control.onDatasetChange = (obj, option) => {
|
||||
$P.renderList(obj.${infoPrefix}Total, option);
|
||||
|
||||
$("#paging--${pageName}").setPagingInfo({
|
||||
list: $P.control.dataset
|
||||
, prefix: "paging--${pageName}"
|
||||
, start: obj.${infoPrefix}Start
|
||||
, totalSize: obj.${infoPrefix}Total
|
||||
, fetchSize: obj.${infoPrefix}Fetch
|
||||
, func: "pageObject['${pageName}'].control.load({index})"
|
||||
});
|
||||
};
|
||||
|
||||
// 현재 선택 자료 변경 이벤트
|
||||
$P.control.onCurrentChange = (item) => {
|
||||
if (!item) return;
|
||||
|
||||
let key = item.data.GDNTC_ID;
|
||||
|
||||
$("#tbody--${pageName}").setCurrentRow(key);
|
||||
};
|
||||
|
||||
// 선택(체크) 변경 이벤트
|
||||
$P.control.onSelectionChange = (selected) => {
|
||||
let ${infoPrefix}List = $P.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()));
|
||||
});
|
||||
|
||||
// 삭제 버튼
|
||||
$("#btnRemove--${pageName}").prop("disabled", keys.length < 1);
|
||||
|
||||
// DataTables(그리드) 전체 선택(checkbox)
|
||||
if (keys.length < 1) {
|
||||
$("#DataTables_Table_0--${pageName} th input[type='checkbox']").prop("checked", false); // 체크 해제
|
||||
} else if (keys.length == ${infoPrefix}List.length) {
|
||||
$("#DataTables_Table_0--${pageName} th input[type='checkbox']").prop("checked", true); // 체크 설정
|
||||
} else {
|
||||
$("#DataTables_Table_0--${pageName} th input[type='checkbox']").prop("checked", false); // 체크 해제
|
||||
}
|
||||
};
|
||||
|
||||
// 상세정보 dialog
|
||||
$P.control.getInfo = (gdntcId) => {
|
||||
let dialogTitle = "";
|
||||
let params = {};
|
||||
|
||||
if (typeof gdntcId == "undefined" || gdntcId == null || gdntcId == "") {
|
||||
dialogTitle = $P.control.prefixName + " 등록";
|
||||
|
||||
params.callPurpose = "create";
|
||||
params.sggCd = $("#sggCd--${pageName}").val(); // 시군구 코드
|
||||
params.taskSeCd = $("#frmSearch--${pageName} input[name='taskSeCd']:checked").val(); // 업무 구분 코드
|
||||
} else {
|
||||
dialogTitle = $P.control.prefixName + " 수정";
|
||||
|
||||
params.callPurpose = "update";
|
||||
params.sggCd = $("#sggCd--${pageName}").val(); // 시군구 코드
|
||||
params.taskSeCd = $("#frmSearch--${pageName} input[name='taskSeCd']:checked").val(); // 업무 구분 코드
|
||||
params.gdntcId = gdntcId;
|
||||
}
|
||||
|
||||
ajax.get({
|
||||
url: wctx.url("/" + params.taskSeCd + "${infoPrefixUrl}" + "/020/info.do") + "?openerPageName=${pageName}"
|
||||
, data: params || {}
|
||||
, success: resp => {
|
||||
dialog.open({
|
||||
id: $P.control.prefixed("Dialog--${pageName}")
|
||||
, title: dialogTitle
|
||||
, content: resp
|
||||
, size: $P.control.infoSize
|
||||
, onClose : () => { $P.fnRefreshList(); } // 자료 재조회
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// 삭제 callback
|
||||
$P.control.onRemove = (resp) => {
|
||||
let btnTitle = $("#btnRemove--${pageName}").attr("title");
|
||||
let showMessage = resp.rtnMsg.replace(/[S]|[F]/g, btnTitle);
|
||||
|
||||
// 메시지 출력
|
||||
dialog.alert({
|
||||
content: showMessage
|
||||
, init: () => { setDialogZindex(); }
|
||||
, onOK: () => { }
|
||||
});
|
||||
|
||||
if (resp.saved) { $P.fnRefreshList(); } // 자료 재조회
|
||||
}
|
||||
|
||||
// 삭제
|
||||
$P.control.remove = (params) => {
|
||||
if (!params) return;
|
||||
|
||||
ajax.post({
|
||||
url: wctx.url("/" + params.taskSeCd + "${infoPrefixUrl}" + "/010/remove.do")
|
||||
, data: params || {}
|
||||
, success: resp => $P.control.onRemove(resp)
|
||||
});
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* DataTables 이벤트
|
||||
**************************************************************************/
|
||||
// DataTables에 click, dbclick 이벤트
|
||||
$P.renderList = (totalSize, option) => {
|
||||
let ${infoPrefix}List = $P.control.dataset;
|
||||
let empty = ${infoPrefix}List.empty;
|
||||
|
||||
let trs = empty ?
|
||||
[document.getElementById("${infoPrefix}NotFound--${pageName}").innerHTML] : <%-- from template#${infoPrefix}NotFound --%>
|
||||
${infoPrefix}List.inStrings(
|
||||
document.getElementById("${infoPrefix}Row--${pageName}").innerHTML, <%-- from template#${infoPrefix}Row --%>
|
||||
(str, dataItem) => str
|
||||
.replace(/{onclick}/gi, "pageObject['${pageName}'].control.setCurrent('" + dataItem.getValue("GDNTC_ID") + "');")
|
||||
.replace(/{ondblclick}/gi, "pageObject['${pageName}'].control.getInfo('" + dataItem.getValue("GDNTC_ID") + "');")
|
||||
);
|
||||
|
||||
let noMore = (${infoPrefix}List.length >= totalSize);
|
||||
let initScroll = ($P.control.query.pageNum < 2);
|
||||
if(option != null && option.reloaded){
|
||||
initScroll = false;
|
||||
}
|
||||
|
||||
$("#table-responsive--${pageName}")[0].changeContent(trs.join(), initScroll, noMore);
|
||||
|
||||
// checkbox 체크 해제
|
||||
$("#DataTables_Table_0--${pageName} th input[type='checkbox']").prop("checked", false);
|
||||
|
||||
//보안모드
|
||||
fn_securityModeToggle($("#securityMode--top").is(":checked"));
|
||||
}
|
||||
|
||||
// DataTables에 스크롤이 맨 밑으로 이동했을 때 이벤트
|
||||
$P.scrollDataList = () => {
|
||||
$P.control.load($P.control.query.pageNum + 1);
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 사용자 함수(function)
|
||||
**************************************************************************/
|
||||
// 검색 자료 재조회
|
||||
$P.fnRefreshList = () => {
|
||||
$P.control.reload({all : true});
|
||||
}
|
||||
|
||||
// 사용자검색 callback
|
||||
$P.callbackFindUser = (userId, userNm) => {
|
||||
$("#schRgtrCd--${pageName}").val(userId); // 사용자 ID
|
||||
$("#schRgtrNm--${pageName}").val(userNm); // 사용자 명
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 버튼 clickEvent
|
||||
**************************************************************************/
|
||||
// 업무 구분 변경 이벤트
|
||||
$P.fnResetAndChangeBiz = (taskSeCd) => {
|
||||
// 업무 구분 코드
|
||||
if (typeof taskSeCd == "undefined" || taskSeCd == null || taskSeCd == "") {
|
||||
taskSeCd = $("#layout-navbar input[name='taskSeCd']:checked").val();
|
||||
}
|
||||
|
||||
// 초기 기본 설정
|
||||
$P.initForm(taskSeCd);
|
||||
// 업무 구분별 설정
|
||||
$P.setTask(taskSeCd);
|
||||
|
||||
// dataset 초기화
|
||||
$P.control.dataset.clear();
|
||||
}
|
||||
|
||||
// 사용자검색 버튼 클릭 이벤트
|
||||
$P.fnGetFindUser = () => {
|
||||
let params = {
|
||||
openerPageName: "${pageName}"
|
||||
, callbackFuncName: "pageObject['${pageName}']['callbackFindUser']"
|
||||
}
|
||||
|
||||
ajax.get({
|
||||
url: wctx.url("/user/user02/010/main.do") + "?openerPageName=${pageName}"
|
||||
, data: params || {}
|
||||
, success: resp => {
|
||||
dialog.open({
|
||||
id: "userDialog--${pageName}"
|
||||
, title: "사용자 검색"
|
||||
, content: resp
|
||||
, size: "lg"
|
||||
, init: () => { setDialogZindex(); }
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// 검색 버튼 이벤트
|
||||
$P.fnSearchList = () => {
|
||||
// 검색조건
|
||||
$P.control.query = $P.formFields.get(); // 검색 조건
|
||||
$P.control.query.fetchSize = $P.control.defaultFetchSize; // 한번에 조회되는 자료 건수
|
||||
$P.control.query.delYn = "N"; // 삭제 여부
|
||||
|
||||
$P.control.load(1);
|
||||
}
|
||||
|
||||
// 엑셀 버튼 이벤트
|
||||
$P.fnExcel = () => {
|
||||
if ($P.control.dataset.empty) {
|
||||
dialog.alert({
|
||||
content: "검색된 자료가 없습니다."
|
||||
, init: () => { setDialogZindex(); }
|
||||
, 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)")
|
||||
, getCellDefsForPrivacyCell);
|
||||
|
||||
$P.control.query.cellDefs = cellDefs;
|
||||
|
||||
$P.control.download();
|
||||
}
|
||||
|
||||
// 전자우편 안내문 등록 버튼 이벤트
|
||||
$P.fnCreate = (title) => {
|
||||
$P.control.getInfo();
|
||||
}
|
||||
|
||||
// 전자우편 안내문 수정 버튼 이벤트
|
||||
$P.fnUpdate = (title) => {
|
||||
// 안내문 ID
|
||||
let gdntcId = $P.control.dataset.getValue("GDNTC_ID");
|
||||
// 안내문 ID 가 없다면.. return
|
||||
if (typeof gdntcId == "undefined" || gdntcId == null || gdntcId == "") return;
|
||||
|
||||
$P.control.getInfo(gdntcId);
|
||||
}
|
||||
|
||||
// 삭제 버튼 이벤트
|
||||
$P.fnRemove = (title) => {
|
||||
let selected = $P.control.dataset.getKeys("selected");
|
||||
|
||||
if (selected.length < 1) return;
|
||||
|
||||
let params = {};
|
||||
params.sggCd = $("#sggCd--${pageName}").val(); // 시군구 코드
|
||||
params.taskSeCd = $("#frmSearch--${pageName} input[name='taskSeCd']:checked").val(); // 업무 구분 코드
|
||||
params.gdntcIds = selected.join(","); // params[$P.control.prefixed("IDs")] = selected.join(",");
|
||||
|
||||
dialog.alert({
|
||||
content: "선택한 " + $P.control.prefixName + " 정보를 삭제하시겠습니까?"
|
||||
, onOK: () => {
|
||||
$P.control.remove(params);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 초기 설정
|
||||
**************************************************************************/
|
||||
// 이벤트 설정
|
||||
$P.setEvent = () => {
|
||||
// 기본 버튼 이벤트
|
||||
$("#btnReset--${pageName}").on("click", () => $P.fnResetAndChangeBiz()); // 초기화
|
||||
$("#btnSearch--${pageName}").on("click", () => $P.fnSearchList()); // 검색
|
||||
$("#btnExcel--${pageName}").on("click", () => $P.fnExcel()); // 엑셀
|
||||
$("#btnFindUser--${pageName}").on("click", () => $P.fnGetFindUser()); // 사용자 검색
|
||||
|
||||
// 동적검색에서 엔터(Enter) 키를 누르면 검색한다.
|
||||
$("#term--${pageName}").onEnterPress(function() {
|
||||
$P.fnSearchList();
|
||||
});
|
||||
|
||||
// form-date 항목에서 키보드로 입력시 날짜 포맷팅 적용
|
||||
$("#frmSearch--${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);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// 버튼 이벤트
|
||||
$("#btnCreate--${pageName}").on("click", function() {
|
||||
$P.fnCreate($(this).attr("title")); // 안내문 등록
|
||||
});
|
||||
$("#btnUpdate--${pageName}").on("click", function() {
|
||||
$P.fnUpdate($(this).attr("title")); // 안내문 수정
|
||||
});
|
||||
$("#btnRemove--${pageName}").on("click", function() {
|
||||
$P.fnRemove($(this).attr("title")); // 안내문 삭제
|
||||
});
|
||||
|
||||
// DataTables width 변경 조정 업무별 그리드가 존재 한다면.. crdn06010-main.jsp 참고
|
||||
fnMakeResizableTable($("#table-responsive--${pageName}")[0]);
|
||||
|
||||
// DataTables 스크롤 이벤트 생성
|
||||
fnMakeScrollableTable($("#table-responsive--${pageName}")[0], $P.scrollDataList);
|
||||
}
|
||||
|
||||
// 초기 화면 설정
|
||||
$P.initForm = (taskSeCd) => {
|
||||
// 화면 초기화
|
||||
$("#frmSearch--${pageName}")[0].reset();
|
||||
|
||||
// input, select 초기화
|
||||
let searchForm = $("#frmSearch--${pageName}");
|
||||
searchForm.find("input[type='radio']").not("[name='taskSeCd']").prop("checked", false);
|
||||
searchForm.find("input[type='checkbox']").prop("checked", false);
|
||||
searchForm.find("input[type='text']").val("");
|
||||
searchForm.find("input[type='hidden']").val("");
|
||||
searchForm.find("select").each(function() { $(this).find("option:eq(0)").prop("selected", true); });
|
||||
|
||||
// 최고 관리자 경우 업무구분을 선택할 수 있도록 하자.
|
||||
$("#frmSearch--${pageName} input[name='taskSeCd']").each(function(i) {
|
||||
$(this).prop("disabled", "true");
|
||||
});
|
||||
|
||||
// 기본 데이터 설정
|
||||
$("#sggCd--${pageName}").val("${sggCd}"); // 시군구 코드
|
||||
$("#frmSearch--${pageName} input[name='taskSeCd'][value='" + taskSeCd + "']").prop("checked", true); // 업무 구분 코드
|
||||
$("#byOutput--${pageName}").val("동적 검색"); // 동적 검색
|
||||
$("#schRgtrNm--${pageName}").prop("readonly", true); // 사용자 이름
|
||||
}
|
||||
|
||||
// 업무 구분별 설정
|
||||
$P.setTask = (taskSeCd) => {
|
||||
// 업무구분에 따른 URL 설정
|
||||
$P.control.urls.load = wctx.url("/" + taskSeCd + "${infoPrefixUrl}" + "/010/list.do"); // 검색
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 최초 실행 함수
|
||||
**************************************************************************/
|
||||
// 1. 이벤트 설정
|
||||
$P.setEvent();
|
||||
|
||||
// 2. 초기 설정 및 업무 구분 변경
|
||||
$P.fnResetAndChangeBiz($("#layout-navbar input[name='taskSeCd']:checked").val());
|
||||
|
||||
// 3. 보안모드
|
||||
fn_securityModeToggle($("#securityMode--top").is(":checked"));
|
||||
});
|
||||
|
||||
</script>
|
||||
@ -1,207 +0,0 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
|
||||
<c:set var="prefixName" scope="request">우편통합 안내문 정보</c:set>
|
||||
|
||||
<!-- inner page html -->
|
||||
<div class="content-pop">
|
||||
<!-- Content -->
|
||||
<div class="container flex-grow-1 px-0">
|
||||
<div class="card">
|
||||
<!-- 입력 영역 -->
|
||||
<form id="frmEdit--${pageName}" name="frmEdit">
|
||||
<!-- hidden -->
|
||||
<input type="hidden" id="sggCd--${pageName}" name="sggCd" data-map="SGG_CD" />
|
||||
<input type="hidden" id="taskSeCd--${pageName}" name="taskSeCd" data-map="TASK_SE_CD" />
|
||||
<input type="hidden" id="gdntcId--${pageName}" name="gdntcId" data-map="GDNTC_ID" />
|
||||
|
||||
<div class="row g-1">
|
||||
<!-- 발송 구분 코드 -->
|
||||
<div class="col-md-12">
|
||||
<label for="sndngSeCd--${pageName}" class="w-px-100 bg-lighter pe-2 col-form-label text-sm-end required">발송구분</label>
|
||||
<select class="form-select" id="sndngSeCd--${pageName}" name="sndngSeCd" data-map="SNDNG_SE_CD" required>
|
||||
<option value="">선택하세요</option>
|
||||
<c:forEach items="${FIM047List}" var="item">
|
||||
<option value="${item.code}">${item.value}</option>
|
||||
</c:forEach>
|
||||
</select>
|
||||
</div>
|
||||
<!-- 제목 명 -->
|
||||
<div class="col-md-12">
|
||||
<label for="ttlNm--${pageName}" class="w-px-100 bg-lighter pe-2 col-form-label text-sm-end required">제목</label>
|
||||
<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 for="wordsCn--${pageName}" class="w-px-100 bg-lighter pe-2 col-form-label text-sm-end">문구내용</label>
|
||||
</div>
|
||||
<div class="col-md-12">
|
||||
<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>
|
||||
<span class="container-page-btn">
|
||||
<!-- 업무 버튼 -->
|
||||
<span class="container-window-btn-right">
|
||||
<button type="button" class="btn btn-primary w-px-80" id="btnSave--${pageName}" title="저장">
|
||||
저장
|
||||
</button>
|
||||
</span>
|
||||
</span>
|
||||
</div>
|
||||
<!-- 업무 버튼 및 건수 표시 -->
|
||||
</div> <!-- <div class="card"> -->
|
||||
</div> <!-- <div class="container flex-grow-1 px-0"> -->
|
||||
<!-- Content -->
|
||||
</div>
|
||||
<!-- / inner page html <div class="content-pop"> -->
|
||||
|
||||
<script>
|
||||
/**************************************************************************
|
||||
* Global Variable
|
||||
**************************************************************************/
|
||||
pageObject["${pageName}"] = {};
|
||||
|
||||
/**************************************************************************
|
||||
* script 진입
|
||||
**************************************************************************/
|
||||
$(document).ready(function() {
|
||||
// pageObject
|
||||
let $P = pageObject["${pageName}"];
|
||||
|
||||
// infoDialog 호출 용도(view 조회(편집불가), create 등록, update 수정)
|
||||
$P.callPurpose = "${callPurpose}";
|
||||
// FormFields
|
||||
$P.formFields = new FimsFormFields("#frmEdit--${pageName}");
|
||||
|
||||
/**************************************************************************
|
||||
* DatasetControl
|
||||
**************************************************************************/
|
||||
$P.control = new DatasetControl({
|
||||
prefix: "epostGdntc"
|
||||
, prefixName: "안내문 정보"
|
||||
, keymapper: info => info ? info.GDNTC_ID : ""
|
||||
, dataGetter: obj => obj.${infoPrefix}Info
|
||||
});
|
||||
|
||||
/**************************************************************************
|
||||
* DatasetControl 이벤트
|
||||
**************************************************************************/
|
||||
// 현재 선택 자료 변경 이벤트
|
||||
$P.control.onCurrentChange = (item) => {
|
||||
if (!item) return;
|
||||
|
||||
// Dataset 셋팅
|
||||
$P.formFields.set($P.control, item);
|
||||
|
||||
// 업무구분에 따른 URL 변경
|
||||
$P.fnSetURL(item.data.TASK_SE_CD);
|
||||
}
|
||||
|
||||
// 저장 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
|
||||
, init: () => { setDialogZindex(); }
|
||||
, onOK: () => { }
|
||||
});
|
||||
|
||||
if (resp.saved) {
|
||||
dialog.close($P.control.prefix + "Dialog--${openerPageName}");
|
||||
}
|
||||
}
|
||||
|
||||
// 저장
|
||||
$P.control.save = (info) => {
|
||||
if (!info) return;
|
||||
|
||||
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)
|
||||
});
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 사용자 함수(function)
|
||||
**************************************************************************/
|
||||
// 업무구분에 따른 URL 설정
|
||||
$P.fnSetURL = (taskSeCd) => {
|
||||
$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 (!customValidate($("#frmEdit--${pageName}").find("input, select, textarea"))) return;
|
||||
|
||||
dialog.alert({
|
||||
content: "현재 " + $P.control.prefixName + " 정보를 저장하시겠습니까?"
|
||||
, init: () => { 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>
|
||||
@ -1,855 +0,0 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
|
||||
<c:set var="prefixName" scope="request">우편통합 우편발송</c:set>
|
||||
|
||||
<!-- inner page html -->
|
||||
<div class="content-wrapper">
|
||||
<!-- Content -->
|
||||
<div class="container-xxl flex-grow-1 px-0">
|
||||
<div class="card wrapper-list">
|
||||
<!-- 상단 버튼 -->
|
||||
<div class="container-page-btn">
|
||||
<button type="button" class="btn btn-outline-dark w-px-120" id="btnReset--${pageName}" title="초기화">
|
||||
초기화
|
||||
</button>
|
||||
<span class="container-window-btn-right">
|
||||
<button type="button" class="btn btn-search w-px-120" id="btnSearch--${pageName}" title="검색">
|
||||
검색
|
||||
</button>
|
||||
<button type="button" class="btn btn-excel w-px-120" id="btnExcel--${pageName}" title="엑셀">
|
||||
엑셀
|
||||
</button>
|
||||
</span>
|
||||
</div>
|
||||
<!-- 상단 버튼 -->
|
||||
|
||||
<!-- 검색 조건 영역 -->
|
||||
<form id="frmSearch--${pageName}" name="frmSearch">
|
||||
<!-- hidden -->
|
||||
<input type="hidden" id="sggCd--${pageName}" name="sggCd" />
|
||||
<input type="hidden" id="deptCd--${pageName}" name="deptCd" />
|
||||
<input type="hidden" id="conOrg--${pageName}" name="conOrg" />
|
||||
|
||||
<!-- 메인 조건 -->
|
||||
<div class="container-search">
|
||||
<div class="row g-1">
|
||||
<!-- 업무구분 -->
|
||||
<div class="col-12">
|
||||
<span class="form-label fw-bold form-search-title w-px-120 text-end">업무구분</span>
|
||||
<span class="form-search-linebox">
|
||||
<c:forEach items="${taskListForSgg}" var="item">
|
||||
<label>
|
||||
<input type="radio" class="form-check-input" name="taskSeCd" alt="업무구분"
|
||||
value="${item.code}" onchange="pageObject['${pageName}'].fnResetAndChangeBiz(this.value);">
|
||||
${item.value}
|
||||
</label>
|
||||
</c:forEach>
|
||||
</span>
|
||||
</div>
|
||||
<!-- 발송 일자 -->
|
||||
<div class="col-6">
|
||||
<label class="form-label fw-bold form-search-title w-px-120 text-end" for="schSendDateFrom--${pageName}">발송일자</label>
|
||||
<span class="form-search-linebox">
|
||||
<input type="text" class="form-control form-date" id="schSendDateFrom--${pageName}" name="schSendDateFrom"
|
||||
data-fmt-type="day" autocomplete="off" title="시작 날짜 선택" />
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
~
|
||||
<input type="text" class="form-control form-date" id="schSendDateTo--${pageName}" name="schSendDateTo"
|
||||
data-fmt-type="day" autocomplete="off" title="종료 날짜 선택" />
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
</span>
|
||||
</div>
|
||||
<!-- 접수 일자 -->
|
||||
<div class="col-6">
|
||||
<label class="form-label fw-bold form-search-title w-px-120 text-end" for="schRceptYmdFrom--${pageName}">접수일자</label>
|
||||
<span class="form-search-linebox">
|
||||
<input type="text" class="form-control form-date" id="schRceptYmdFrom--${pageName}" name="schRceptYmdFrom"
|
||||
data-fmt-type="day" autocomplete="off" title="시작 날짜 선택" />
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
~
|
||||
<input type="text" class="form-control form-date" id="schRceptYmdTo--${pageName}" name="schRceptYmdTo"
|
||||
data-fmt-type="day" autocomplete="off" title="종료 날짜 선택" />
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
</span>
|
||||
</div>
|
||||
<!-- -->
|
||||
<div class="col-6">
|
||||
</div>
|
||||
<!-- 동적검색 -->
|
||||
<div class="col-6">
|
||||
<input type="hidden" id="by--${pageName}" name="by" />
|
||||
<input type="text" class="form-control fw-bold w-px-120 text-end" id="byOutput--${pageName}" value="동적 검색" readonly />
|
||||
<input type="hidden" id="mainOption--${pageName}" name="mainOption" />
|
||||
<input type="hidden" id="subOption--${pageName}" name="subOption" />
|
||||
<input type="text" class="form-control w-px-400" id="term--${pageName}" name="term" autocomplete="off" />
|
||||
<!-- 상세 검색조건 버튼 -->
|
||||
<span class="flr">
|
||||
<button type="button" class="btn btn-open-detail" data-bs-toggle="collapse" data-bs-target="#searchDetail--${pageName}">
|
||||
<i class="bx bx-chevron-down"></i>
|
||||
상세검색
|
||||
</button>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div> <!-- 메인 조건 -->
|
||||
|
||||
<!-- 상세 조건 -->
|
||||
<div id="searchDetail--${pageName}" class="container-search container-search-detail collapse">
|
||||
<div class="row g-1">
|
||||
<!-- 등록일자, 수정일자 -->
|
||||
<div class="col-6">
|
||||
<select class="form-select w-px-120 text-center" id="schRegDateOpt--${pageName}" name="schRegDateOpt">
|
||||
<option value="regDt">등록일자</option>
|
||||
<option value="mdfcnDt">수정일자</option>
|
||||
</select>
|
||||
<span class="form-search-linebox">
|
||||
<input type="text" class="form-control form-date" id="schRegDateFrom--${pageName}" name="schRegDateFrom"
|
||||
data-fmt-type="day" title="시작 날짜 선택" />
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
~
|
||||
<input type="text" class="form-control form-date" id="schRegDateTo--${pageName}" name="schRegDateTo"
|
||||
data-fmt-type="day" title="종료 날짜 선택">
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
</span>
|
||||
</div>
|
||||
<!-- 등록자명, 수정자명 -->
|
||||
<div class="col-6">
|
||||
<select class="form-select w-px-120 text-center" id="schRgtrOpt--${pageName}" name="schRgtrOpt">
|
||||
<option value="rgtr">등록자</option>
|
||||
<option value="mdfr">수정자</option>
|
||||
</select>
|
||||
<input type="hidden" id="schRgtrCd--${pageName}" name="schRgtrCd" />
|
||||
<input type="text" class="form-control w-px-160" id="schRgtrNm--${pageName}" name="schRgtrNm" />
|
||||
<button type="button" class="btn btn-sm btn-outline-dark" id="btnFindUser--${pageName}" title="사용자 검색">검색</button>
|
||||
</div>
|
||||
</div>
|
||||
</div> <!-- 상세 조건 -->
|
||||
</form>
|
||||
<!-- 검색 조건 영역 -->
|
||||
|
||||
<!-- 업무 버튼 및 건수 표시 -->
|
||||
<div>
|
||||
<span class="container-page-btn">
|
||||
<!-- 건수, 페이지 표시 -->
|
||||
<div class="d-flex flex-row justify-content-between">
|
||||
<span class="dataTables_info" id="paging--${pageName}PagingInfo" role="status" aria-live="polite"></span>
|
||||
<ul class="pagination pagination-primary" id="paging--${pageName}">
|
||||
</ul>
|
||||
</div>
|
||||
<!-- 업무 버튼 -->
|
||||
<span class="container-window-btn-right">
|
||||
<button type="button" class="btn btn-primary w-px-120" id="btnUpdate--${pageName}" title="발송 취소">
|
||||
발송 취소
|
||||
</button>
|
||||
<button type="button" class="btn btn-primary w-px-120" id="btnRemove--${pageName}" title="발송 삭제">
|
||||
발송 삭제
|
||||
</button>
|
||||
</span>
|
||||
</span>
|
||||
</div>
|
||||
<!-- 업무 버튼 및 건수 표시 -->
|
||||
|
||||
<!-- tab -->
|
||||
<div class="nav-align-top">
|
||||
<ul class="nav nav-tabs" id="tabs--${pageName}" role="tablist">
|
||||
<li class="nav-item">
|
||||
<button type="button" class="nav-link w-px-160 h-100 active" role="tab" data-bs-toggle="tab" data-bs-target="#tabEpostRcpt0"
|
||||
aria-controls="tabEpostRcpt0" aria-selected="true" onClick="pageObject['${pageName}'].fnTabEpostRcpt0();">
|
||||
전체
|
||||
</button>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<button type="button" class="nav-link w-px-160 h-100" role="tab" data-bs-toggle="tab" data-bs-target="#tabEpostRcpt1"
|
||||
aria-controls="tabEpostRcpt1" aria-selected="false" onClick="pageObject['${pageName}'].fnTabEpostRcpt1();">
|
||||
발송대기
|
||||
</button>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<button type="button" class="nav-link w-px-160 h-100" role="tab" data-bs-toggle="tab" data-bs-target="#tabEpostRcpt2"
|
||||
aria-controls="tabEpostRcpt2" aria-selected="false" onClick="pageObject['${pageName}'].fnTabEpostRcpt2();">
|
||||
발송취소
|
||||
</button>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<button type="button" class="nav-link w-px-160 h-100" role="tab" data-bs-toggle="tab" data-bs-target="#tabEpostRcpt3"
|
||||
aria-controls="tabEpostRcpt3" aria-selected="false" onClick="pageObject['${pageName}'].fnTabEpostRcpt3();">
|
||||
전송
|
||||
</button>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<button type="button" class="nav-link w-px-160 h-100" role="tab" data-bs-toggle="tab" data-bs-target="#tabEpostRcpt4"
|
||||
aria-controls="tabEpostRcpt4" aria-selected="false" onClick="pageObject['${pageName}'].fnTabEpostRcpt4();">
|
||||
접수
|
||||
</button>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<button type="button" class="nav-link w-px-160 h-100" role="tab" data-bs-toggle="tab" data-bs-target="#tabEpostRcpt5"
|
||||
aria-controls="tabEpostRcpt5" aria-selected="false" onClick="pageObject['${pageName}'].fnTabEpostRcpt5();">
|
||||
제작불가
|
||||
</button>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<button type="button" class="nav-link w-px-160 h-100" role="tab" data-bs-toggle="tab" data-bs-target="#tabEpostRcpt6"
|
||||
aria-controls="tabEpostRcpt6" aria-selected="false" onClick="pageObject['${pageName}'].fnTabEpostRcpt6();">
|
||||
제작
|
||||
</button>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<button type="button" class="nav-link w-px-160 h-100" role="tab" data-bs-toggle="tab" data-bs-target="#tabEpostRcpt7"
|
||||
aria-controls="tabEpostRcpt7" aria-selected="false" onClick="pageObject['${pageName}'].fnTabEpostRcpt7();">
|
||||
배달중
|
||||
</button>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<button type="button" class="nav-link w-px-160 h-100" role="tab" data-bs-toggle="tab" data-bs-target="#tabEpostRcpt8"
|
||||
aria-controls="tabEpostRcpt8" aria-selected="false" onClick="pageObject['${pageName}'].fnTabEpostRcpt8();">
|
||||
배달완료
|
||||
</button>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<div class="tab-content">
|
||||
<div class="tab-pane fade show active" id="tabEpostRcpt0" role="tabpanel"></div>
|
||||
<div class="tab-pane fade" id="tabEpostRcpt1" role="tabpanel"></div>
|
||||
<div class="tab-pane fade" id="tabEpostRcpt2" role="tabpanel"></div>
|
||||
<div class="tab-pane fade" id="tabEpostRcpt3" role="tabpanel"></div>
|
||||
<div class="tab-pane fade" id="tabEpostRcpt4" role="tabpanel"></div>
|
||||
<div class="tab-pane fade" id="tabEpostRcpt5" role="tabpanel"></div>
|
||||
<div class="tab-pane fade" id="tabEpostRcpt6" role="tabpanel"></div>
|
||||
<div class="tab-pane fade" id="tabEpostRcpt7" role="tabpanel"></div>
|
||||
<div class="tab-pane fade" id="tabEpostRcpt8" role="tabpanel"></div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- tab -->
|
||||
|
||||
<!-- DataTables(그리드) -->
|
||||
<div class="card-datatable text-nowrap" id="datatable--${pageName}">
|
||||
<div class="dataTables_wrapper dt-bootstrap5 no-footer" id="DataTables_Table_0_wrapper--${pageName}">
|
||||
<div class="table-responsive ox-scroll oy-scroll h-px-500" id="table-responsive--${pageName}">
|
||||
<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">
|
||||
<tr id="theadTr--${pageName}"
|
||||
data-by="by--${pageName}" data-by-output="byOutput--${pageName}" data-main-option="mainOption--${pageName}" data-sub-option="subOption--${pageName}">
|
||||
<th class="cmn" style="width: 72px;">No.</th>
|
||||
<th class="cmn" style="width: 56px;"><input type="checkbox" class="form-check-input" id="gridAllCheckbox--${pageName}" onchange="pageObject['${pageName}'].control.select(this.checked);" /></th>
|
||||
<th class="cmn" style="width: 120px;" onclick="searchFromGridTitle('SEND_DATE', this.innerText, 'ymd', '');">발송일자</th>
|
||||
<th class="cmn" style="width: 120px;" onclick="searchFromGridTitle('JOB_CD', this.innerText, 'match', 'part');">발송내역</th>
|
||||
<th class="cmn" style="width: 120px;" onclick="searchFromGridTitle('DIV_KB', this.innerText, 'codeValue', 'EGP002');">취급구분</th>
|
||||
<th class="cmn" style="width: 120px;" onclick="searchFromGridTitle('RCEPT_YMD', this.innerText, 'ymd', '');">접수일자</th>
|
||||
<th class="cmn" style="width: 240px;" onclick="searchFromGridTitle('CON_KEY', this.innerText, 'match', 'part');">자료키</th>
|
||||
<th class="cmn" style="width: 120px;" onclick="searchFromGridTitle('RECEV_CNT', this.innerText, 'match', 'part');">발송건수</th>
|
||||
<th class="cmn" style="width: 200px;" onclick="searchFromGridTitle('POST_PRCS_STTS_CD', this.innerText, 'codeValue', 'EGP012');">우편처리상태</th>
|
||||
<th class="cmn" style="width: 180px;">등록일시</th>
|
||||
<th class="cmn" style="width: 140px;">등록사용자</th>
|
||||
<th class="cmn dummy-th"></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="tbody--${pageName}">
|
||||
</tbody>
|
||||
<template id="${infoPrefix}Row--${pageName}">
|
||||
<tr data-key="{CON_KEY}">
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{ROW_NUM}</td>
|
||||
<td class="cmn text-center"><input type="checkbox" class="form-check-input" name="gridCheckbox" value="{CON_KEY}" onchange="pageObject['${pageName}'].control.select('{CON_KEY}', this.checked);"></td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{SEND_DATE}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{JOB_CD}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{DIV_KB_NM}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{RCEPT_YMD}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{CON_KEY}</td>
|
||||
<td class="cmn text-end" onclick="{onclick}" ondblclick="{ondblclick}">{RECEV_CNT}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{POST_PRCS_STTS_NM}</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 dummy-td"></td>
|
||||
</tr>
|
||||
</template>
|
||||
<template id="${infoPrefix}NotFound--${pageName}">
|
||||
<tr class="odd">
|
||||
<td valign="top" colspan="12" class="dataTables_empty text-center">${prefixName} 정보를 찾지 못했습니다.</td>
|
||||
</tr>
|
||||
</template>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- DataTables(그리드) -->
|
||||
</div> <!-- <div class="card wrapper-list"> -->
|
||||
</div> <!-- <div class="container-xxl flex-grow-1 px-0"> -->
|
||||
<!-- Content -->
|
||||
|
||||
<div class="content-backdrop fade"></div>
|
||||
</div>
|
||||
<!-- / inner page html <div class="content-wrapper"> -->
|
||||
|
||||
<script>
|
||||
/**************************************************************************
|
||||
* Global Variable
|
||||
**************************************************************************/
|
||||
pageObject["${pageName}"] = {};
|
||||
|
||||
/**************************************************************************
|
||||
* script 진입
|
||||
**************************************************************************/
|
||||
$(document).ready(function() {
|
||||
// pageObject
|
||||
let $P = pageObject["${pageName}"];
|
||||
|
||||
// FormFields
|
||||
$P.formFields = new FimsFormFields("#frmSearch--${pageName}");
|
||||
|
||||
/**************************************************************************
|
||||
* DatasetControl
|
||||
**************************************************************************/
|
||||
$P.control = new DatasetControl({
|
||||
prefix: "epostRcptReg"
|
||||
, prefixName: "우편 발송"
|
||||
, keymapper: info => info ? info.CON_KEY : ""
|
||||
, dataGetter: obj => obj.${infoPrefix}List
|
||||
, appendData: true
|
||||
, infoSize: "xxl"
|
||||
, formats: {
|
||||
SEND_DATE: dateFormat
|
||||
, RCEPT_YMD: dateFormat
|
||||
, RECEV_CNT: numberFormat
|
||||
, REG_DT: datetimeFormat
|
||||
, MDFCN_DT: datetimeFormat
|
||||
}
|
||||
});
|
||||
// $P.control 설정
|
||||
$P.control.defaultFetchSize = FETCH_XS; // 1 페이지당 조회되는 자료 건수 index.jsp에서 확인 FETCH_XS = 30
|
||||
$P.control.query = { pageNum : 1, fetchSize : $P.control.defaultFetchSize };
|
||||
$P.control.beforeCurrent = null;
|
||||
|
||||
/**************************************************************************
|
||||
* DatasetControl 이벤트
|
||||
**************************************************************************/
|
||||
// Dataset 변경 이벤트
|
||||
$P.control.onDatasetChange = (obj, option) => {
|
||||
$P.renderList(obj.${infoPrefix}Total, option);
|
||||
|
||||
$("#paging--${pageName}").setPagingInfo({
|
||||
list: $P.control.dataset
|
||||
, prefix: "paging--${pageName}"
|
||||
, start: obj.${infoPrefix}Start
|
||||
, totalSize: obj.${infoPrefix}Total
|
||||
, fetchSize: obj.${infoPrefix}Fetch
|
||||
, func: "pageObject['${pageName}'].control.load({index})"
|
||||
});
|
||||
|
||||
|
||||
};
|
||||
|
||||
// 현재 선택 자료 변경 이벤트
|
||||
$P.control.onCurrentChange = (item) => {
|
||||
if (!item) return;
|
||||
|
||||
let key = item.data.CON_KEY;
|
||||
|
||||
$("#tbody--${pageName}").setCurrentRow(key);
|
||||
};
|
||||
|
||||
// 선택(체크) 변경 이벤트
|
||||
$P.control.onSelectionChange = (selected) => {
|
||||
let ${infoPrefix}List = $P.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()));
|
||||
});
|
||||
|
||||
// 삭제 버튼
|
||||
$("#btnRemove--${pageName}").prop("disabled", keys.length < 1);
|
||||
|
||||
// DataTables(그리드) 전체 선택(checkbox)
|
||||
if (keys.length < 1) {
|
||||
$("#DataTables_Table_0--${pageName} th input[type='checkbox']").prop("checked", false); // 체크 해제
|
||||
} else if (keys.length == ${infoPrefix}List.length) {
|
||||
$("#DataTables_Table_0--${pageName} th input[type='checkbox']").prop("checked", true); // 체크 설정
|
||||
} else {
|
||||
$("#DataTables_Table_0--${pageName} th input[type='checkbox']").prop("checked", false); // 체크 해제
|
||||
}
|
||||
};
|
||||
|
||||
// 상세정보 dialog
|
||||
$P.control.getInfo = (callPurpose, conKey) => {
|
||||
if (typeof conKey == "undefined" || conKey == null || conKey == "") return;
|
||||
|
||||
if (typeof callPurpose == "undefined" || callPurpose == null || callPurpose == "") {
|
||||
callPurpose = "view";
|
||||
}
|
||||
|
||||
let params = {
|
||||
callPurpose: callPurpose
|
||||
, sggCd: $("#sggCd--${pageName}").val() // 시군구 코드
|
||||
, taskSeCd: $("#frmSearch--${pageName} input[name='taskSeCd']:checked").val() // 업무 구분 코드
|
||||
, conKey: conKey //
|
||||
}
|
||||
|
||||
let dialogTitle = "";
|
||||
|
||||
if (params.callPurpose == "create") {
|
||||
dialogTitle = $P.control.prefixName + " 등록";
|
||||
} else if (params.callPurpose == "update") {
|
||||
dialogTitle = $P.control.prefixName + " 수정";
|
||||
} else {
|
||||
dialogTitle = $P.control.prefixName + " 정보";
|
||||
}
|
||||
|
||||
ajax.get({
|
||||
url: wctx.url("/" + params.taskSeCd + "${infoPrefixUrl}" + "/040/info.do") + "?openerPageName=${pageName}"
|
||||
, data: params || {}
|
||||
, success: resp => {
|
||||
dialog.open({
|
||||
id: $P.control.prefixed("DtlDialog--${pageName}")
|
||||
, title: dialogTitle
|
||||
, content: resp
|
||||
, size: $P.control.infoSize
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// 저장 callback
|
||||
$P.control.onSave = (resp) => {
|
||||
let btnTitle = $("#btnUpdate--${pageName}").attr("title");
|
||||
let showMessage = resp.rtnMsg.replace(/[S]|[F]/g, btnTitle);
|
||||
|
||||
// 메시지 출력
|
||||
dialog.alert({
|
||||
content: showMessage
|
||||
, onOK: () => { }
|
||||
});
|
||||
|
||||
if (resp.saved) { $P.fnRefreshList(); } // 자료 재조회
|
||||
}
|
||||
|
||||
// 저장
|
||||
$P.control.save = (info) => {
|
||||
if (!info) return;
|
||||
|
||||
ajax.post({
|
||||
url: wctx.url("/" + params.taskSeCd + "${infoPrefixUrl}" + "/030/updateSttsCd.do") // 발송취소
|
||||
, data: info || {}
|
||||
, success: resp => $P.control.onSave(resp)
|
||||
});
|
||||
}
|
||||
|
||||
// 삭제 callback
|
||||
$P.control.onRemove = (selected, resp) => {
|
||||
let btnTitle = $("#btnRemove--${pageName}").attr("title");
|
||||
let showMessage = resp.rtnMsg.replace(/[S]|[F]/g, btnTitle);
|
||||
|
||||
// 메시지 출력
|
||||
dialog.alert({
|
||||
content: showMessage
|
||||
, onOK: () => { }
|
||||
});
|
||||
|
||||
if (resp.saved) { $P.fnRefreshList(); } // 자료 재조회
|
||||
}
|
||||
|
||||
// 삭제
|
||||
$P.control.remove = (params) => {
|
||||
let selected = $P.control.dataset.getKeys("selected");
|
||||
|
||||
if (selected.length < 1) return;
|
||||
|
||||
if (!params) {
|
||||
params = {};
|
||||
params["conKeys"] = selected.join(","); // params[$P.control.prefixed("IDs")] = selected.join(",");
|
||||
params.sggCd = $("#sggCd--${pageName}").val(); // 시군구 코드
|
||||
params.taskSeCd = $("#frmSearch--${pageName} input[name='taskSeCd']:checked").val(); // 업무 구분 코드
|
||||
}
|
||||
|
||||
ajax.post({
|
||||
url: wctx.url("/" + params.taskSeCd + "${infoPrefixUrl}" + "/030/remove.do")
|
||||
, data: params || {}
|
||||
, success: resp => $P.control.onRemove(selected, resp)
|
||||
});
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* DataTables 이벤트
|
||||
**************************************************************************/
|
||||
// DataTables에 click, dbclick 이벤트
|
||||
$P.renderList = (totalSize, option) => {
|
||||
let ${infoPrefix}List = $P.control.dataset;
|
||||
let empty = ${infoPrefix}List.empty;
|
||||
|
||||
let trs = empty ?
|
||||
[document.getElementById("${infoPrefix}NotFound--${pageName}").innerHTML] : <%-- from template#${infoPrefix}NotFound --%>
|
||||
${infoPrefix}List.inStrings(
|
||||
document.getElementById("${infoPrefix}Row--${pageName}").innerHTML, <%-- from template#${infoPrefix}Row --%>
|
||||
(str, dataItem) => str
|
||||
.replace(/{onclick}/gi, "pageObject['${pageName}'].control.setCurrent('" + dataItem.getValue("CON_KEY") + "');")
|
||||
.replace(/{ondblclick}/gi, "pageObject['${pageName}'].control.getInfo('view', '" + dataItem.getValue("CON_KEY") + "');")
|
||||
);
|
||||
|
||||
let noMore = (${infoPrefix}List.length >= totalSize);
|
||||
let initScroll = ($P.control.query.pageNum < 2);
|
||||
if(option != null && option.reloaded){
|
||||
initScroll = false;
|
||||
}
|
||||
|
||||
$("#table-responsive--${pageName}")[0].changeContent(trs.join(), initScroll, noMore);
|
||||
|
||||
// checkbox 체크 해제
|
||||
$("#DataTables_Table_0--${pageName} th input[type='checkbox']").prop("checked", false);
|
||||
|
||||
// 보안모드
|
||||
fn_securityModeToggle($("#securityMode--top").is(":checked"));
|
||||
}
|
||||
|
||||
// DataTables에 스크롤이 맨 밑으로 이동했을 때 이벤트
|
||||
$P.scrollDataList = () => {
|
||||
|
||||
$P.control.load($P.control.query.pageNum + 1);
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 사용자 함수
|
||||
**************************************************************************/
|
||||
// 검색 자료 재조회
|
||||
$P.fnRefreshList = () => {
|
||||
$P.control.reload({all : true});
|
||||
}
|
||||
|
||||
// 사용자검색 callback
|
||||
$P.callbackFindUser = (userId, userNm) => {
|
||||
$("#schRgtrCd--${pageName}").val(userId); // 사용자 ID
|
||||
$("#schRgtrNm--${pageName}").val(userNm); // 사용자 명
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 버튼 clickEvent
|
||||
**************************************************************************/
|
||||
// 업무 구분 변경
|
||||
$P.fnResetAndChangeBiz = (taskSeCd) => {
|
||||
// 업무 구분 코드
|
||||
if (typeof taskSeCd == "undefined" || taskSeCd == null || taskSeCd == "") {
|
||||
taskSeCd = $("#layout-navbar input[name='taskSeCd']:checked").val();
|
||||
}
|
||||
|
||||
// 초기 기본 설정
|
||||
$P.initForm(taskSeCd);
|
||||
// 업무 구분별 설정
|
||||
$P.setTask(taskSeCd);
|
||||
|
||||
// dataset 초기화
|
||||
$P.control.dataset.clear();
|
||||
}
|
||||
|
||||
// 사용자검색 버튼 클릭 이벤트
|
||||
$P.fnGetFindUser = () => {
|
||||
let params = {
|
||||
openerPageName: "${pageName}"
|
||||
, callbackFuncName: "pageObject['${pageName}']['callbackFindUser']"
|
||||
}
|
||||
|
||||
ajax.get({
|
||||
url: wctx.url("/user/user02/010/main.do") + "?openerPageName=${pageName}"
|
||||
, data: params || {}
|
||||
, success: resp => {
|
||||
dialog.open({
|
||||
id: "userDialog--${pageName}"
|
||||
, title: "사용자 검색"
|
||||
, content: resp
|
||||
, size: "lg"
|
||||
, init: () => { setDialogZindex(); }
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// 검색 버튼 이벤트
|
||||
$P.fnSearchList = (clickTab) => {
|
||||
// 검색조건
|
||||
$P.control.query = $P.formFields.get();
|
||||
$P.control.query.fetchSize = $P.control.defaultFetchSize; // 한번에 조회되는 자료 건수
|
||||
$P.control.query.sggCd = $("#sggCd--${pageName}").val(); // 시군구 코드
|
||||
$P.control.query.conOrg = $("#conOrg--${pageName}").val(); // 외부기관구분코드
|
||||
$P.control.query.relorsectCd = $("#deptCd--${pageName}").val(); // 결제부서코드(부서코드)
|
||||
$P.control.query.delYn = "N"; // 삭제 여부
|
||||
|
||||
// 탭 선택에 따른 우편 처리 상태(POST_PROC_STT) 설정.
|
||||
if (clickTab == "tab1") { // 발송대기
|
||||
$P.control.query.postPrcsSttsCdFrom = "01";
|
||||
$P.control.query.postPrcsSttsCdTo = "01";
|
||||
} else if (clickTab == "tab2") { // 발송취소
|
||||
$P.control.query.postPrcsSttsCdFrom = "02";
|
||||
$P.control.query.postPrcsSttsCdTo = "02";
|
||||
} else if (clickTab == "tab3") { // 전송
|
||||
$P.control.query.postPrcsSttsCdFrom = "03";
|
||||
$P.control.query.postPrcsSttsCdTo = "03";
|
||||
} else if (clickTab == "tab4") { // 접수
|
||||
$P.control.query.postPrcsSttsCdFrom = "05";
|
||||
$P.control.query.postPrcsSttsCdTo = "05";
|
||||
} else if (clickTab == "tab5") { // 제작불가
|
||||
$P.control.query.postPrcsSttsCdFrom = "21";
|
||||
$P.control.query.postPrcsSttsCdTo = "79";
|
||||
} else if (clickTab == "tab6") { // 제작완료
|
||||
$P.control.query.postPrcsSttsCdFrom = "80";
|
||||
$P.control.query.postPrcsSttsCdTo = "80";
|
||||
} else if (clickTab == "tab7") { // 배달중
|
||||
$P.control.query.postPrcsSttsCdFrom = "90";
|
||||
$P.control.query.postPrcsSttsCdTo = "90";
|
||||
} else if (clickTab == "tab8") { // 배달완료
|
||||
$P.control.query.postPrcsSttsCdFrom = "95";
|
||||
$P.control.query.postPrcsSttsCdTo = "95";
|
||||
} else { // 전체
|
||||
//
|
||||
}
|
||||
|
||||
$P.control.load(1); // 검색
|
||||
}
|
||||
|
||||
// 엑셀 버튼 이벤트
|
||||
$P.fnExcel = () => {
|
||||
if ($P.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)")
|
||||
, getCellDefsForPrivacyCell);
|
||||
|
||||
$P.control.query.cellDefs = cellDefs;
|
||||
|
||||
$P.control.download();
|
||||
}
|
||||
|
||||
// 발송 취소 버튼 이벤트
|
||||
$P.fnUpdateCancle = (title) => {
|
||||
// 외부연계식별키
|
||||
let conKey = $P.control.dataset.getValue("CON_KEY");
|
||||
// 외부연계식별키 가 없다면.. return
|
||||
if (typeof conKey == "undefined" || conKey == null || conKey == "") return;
|
||||
|
||||
// 발송 ID
|
||||
let sndngId = $P.control.dataset.getValue("SNDNG_ID");
|
||||
// 발송 ID 가 없다면.. return
|
||||
if (typeof sndngId == "undefined" || sndngId == null || sndngId == "") return;
|
||||
|
||||
// 우편 처리 상태 코드
|
||||
let postPrcsSttsCd = $P.control.dataset.getValue("POST_PRCS_STTS_CD");
|
||||
// 우편 처리 상태 확인
|
||||
if (postPrcsSttsCd != "01") {
|
||||
dialog.alert({
|
||||
content: "우편통합 처리상태가 '" + postPrcsSttsNm + "' 입니다."
|
||||
+ "<br>" + "[" + title + "]" + " 실행은 발송대기 자료만 가능합니다."
|
||||
, onOK: () => { }
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
let params = {
|
||||
callPurpose: "update"
|
||||
, title: title
|
||||
, sggCd: $P.control.dataset.getValue("SGG_CD")
|
||||
, conKey: conKey // 외부연계식별키
|
||||
, sndngId: sndngId // 발송 ID
|
||||
};
|
||||
|
||||
dialog.alert({
|
||||
content: "선택한 " + $P.control.prefixName + " 정보를 취소하시겠습니까?"
|
||||
, onOK: () => {
|
||||
$P.control.save(params);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// 발송 삭제 버튼 이벤트
|
||||
$P.fnRemove = (title) => {
|
||||
// 외부연계식별키
|
||||
let conKey = $P.control.dataset.getValue("CON_KEY");
|
||||
// 외부연계식별키 가 없다면.. return
|
||||
if (typeof conKey == "undefined" || conKey == null || conKey == "") return;
|
||||
|
||||
// 우편 처리 상태 코드
|
||||
let postPrcsSttsCd = $P.control.dataset.getValue("POST_PRCS_STTS_CD");
|
||||
// 우편 처리 상태 확인
|
||||
if (postPrcsSttsCd != "02" && postPrcsSttsCd != "03" && postPrcsSttsCd != "05"
|
||||
&& postPrcsSttsCd != "21" && postPrcsSttsCd != "22" && postPrcsSttsCd != "23"
|
||||
&& postPrcsSttsCd != "24" && postPrcsSttsCd != "61" && postPrcsSttsCd != "62") {
|
||||
dialog.alert({
|
||||
content: "우편통합 처리상태가 '" + postPrcsSttsNm + "' 입니다."
|
||||
+ "<br>" + "[" + title + "]" + " 실행은 '발송취소', '전송', '접수', '제작불가' 자료만 가능합니다."
|
||||
, onOK: () => { }
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
dialog.alert({
|
||||
content: "선택한 " + $P.control.prefixName + " 정보를 삭제하시겠습니까?"
|
||||
, onOK: () => {
|
||||
$P.control.remove();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// 탭0
|
||||
$P.fnTabEpostRcpt0 = () => {
|
||||
$("#tabEpostRcpt0").html($("#datatable--${pageName}"));
|
||||
|
||||
$P.fnSearchList("tab0");
|
||||
}
|
||||
|
||||
// 탭1
|
||||
$P.fnTabEpostRcpt1 = () => {
|
||||
$("#tabEpostRcpt1").html($("#datatable--${pageName}"));
|
||||
|
||||
$P.fnSearchList("tab1");
|
||||
}
|
||||
|
||||
// 탭2
|
||||
$P.fnTabEpostRcpt2 = () => {
|
||||
$("#tabEpostRcpt2").html($("#datatable--${pageName}"));
|
||||
|
||||
$P.fnSearchList("tab2");
|
||||
}
|
||||
|
||||
// 탭3
|
||||
$P.fnTabEpostRcpt3 = () => {
|
||||
$("#tabEpostRcpt3").html($("#datatable--${pageName}"));
|
||||
|
||||
$P.fnSearchList("tab3");
|
||||
}
|
||||
|
||||
// 탭4
|
||||
$P.fnTabEpostRcpt4 = () => {
|
||||
$("#tabEpostRcpt4").html($("#datatable--${pageName}"));
|
||||
|
||||
$P.fnSearchList("tab4");
|
||||
}
|
||||
|
||||
// 탭5
|
||||
$P.fnTabEpostRcpt5 = () => {
|
||||
$("#tabEpostRcpt5").html($("#datatable--${pageName}"));
|
||||
|
||||
$P.fnSearchList("tab5");
|
||||
}
|
||||
|
||||
// 탭6
|
||||
$P.fnTabEpostRcpt6 = () => {
|
||||
$("#tabEpostRcpt6").html($("#datatable--${pageName}"));
|
||||
|
||||
$P.fnSearchList("tab6");
|
||||
}
|
||||
|
||||
// 탭7
|
||||
$P.fnTabEpostRcpt7 = () => {
|
||||
$("#tabEpostRcpt7").html($("#datatable--${pageName}"));
|
||||
|
||||
$P.fnSearchList("tab7");
|
||||
}
|
||||
|
||||
// 탭8
|
||||
$P.fnTabEpostRcpt8 = () => {
|
||||
$("#tabEpostRcpt8").html($("#datatable--${pageName}"));
|
||||
|
||||
$P.fnSearchList("tab8");
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 초기 설정
|
||||
**************************************************************************/
|
||||
// 이벤트
|
||||
$P.setEvent = () => {
|
||||
// 기본 버튼 이벤트
|
||||
$("#btnReset--${pageName}").on("click", () => $P.fnResetAndChangeBiz()); // 초기화
|
||||
$("#btnSearch--${pageName}").on("click", () => $P.fnSearchList()); // 검색
|
||||
$("#btnExcel--${pageName}").on("click", () => $P.fnExcel()); // 엑셀
|
||||
$("#btnFindUser--${pageName}").on("click", () => $P.fnGetFindUser()); // 사용자 검색
|
||||
|
||||
// 동적검색에서 엔터(Enter) 키를 누르면 검색한다.
|
||||
$("#term--${pageName}").onEnterPress(function() {
|
||||
$P.fnSearchList();
|
||||
});
|
||||
|
||||
// form-date 항목에서 키보드로 입력시 날짜 포맷팅 적용
|
||||
$("#frmSearch--${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);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// 발송 취소 버튼 이벤트
|
||||
$("#btnUpdateCancel--${pageName}").on("click", function() {
|
||||
$P.fnUpdateCancle($(this).attr("title"));
|
||||
});
|
||||
// 발송 삭제 버튼 이벤트
|
||||
$("#btnRemove--${pageName}").on("click", function() {
|
||||
$P.fnRemove($(this).attr("title"));
|
||||
});
|
||||
|
||||
// DataTables width 변경 조정 업무별 그리드가 존재 한다면.. crdn06010-main.jsp 참고
|
||||
fnMakeResizableTable($("#table-responsive--${pageName}")[0]);
|
||||
|
||||
// DataTables 스크롤 이벤트 생성
|
||||
fnMakeScrollableTable($("#table-responsive--${pageName}")[0], $P.scrollDataList);
|
||||
}
|
||||
|
||||
// 초기 화면 설정
|
||||
$P.initForm = (taskSeCd) => {
|
||||
// 화면 초기화
|
||||
$("#frmSearch--${pageName}")[0].reset();
|
||||
|
||||
// input, select 초기화
|
||||
let searchForm = $("#frmSearch--${pageName}");
|
||||
searchForm.find("input[type='radio']").not("[name='taskSeCd']").prop("checked", false);
|
||||
searchForm.find("input[type='checkbox']").prop("checked", false);
|
||||
searchForm.find("input[type='text']").val("");
|
||||
searchForm.find("input[type='hidden']").val("");
|
||||
searchForm.find("select").each(function() { $(this).find("option:eq(0)").prop("selected", true); });
|
||||
|
||||
// 최고 관리자 경우 업무구분을 선택할 수 있도록 하자.
|
||||
$("#frmSearch--${pageName} input[name='taskSeCd']").each(function(i) {
|
||||
$(this).prop("disabled", "true");
|
||||
});
|
||||
|
||||
// 기본 데이터 설정
|
||||
$("#sggCd--${pageName}").val("${sggCd}"); // 시군구 코드
|
||||
$("#deptCd--${pageName}").val("${deptCd}"); // 부서 코드
|
||||
$("#conOrg--${pageName}").val("${conOrg}"); // E그린 외부기관구분코드
|
||||
$("#frmSearch--${pageName} input[name='taskSeCd'][value='" + taskSeCd + "']").prop("checked", true); // 업무 구분
|
||||
initDatepicker("frmSearch--${pageName}"); // 달력 초기화
|
||||
$("#schSendDateFrom--${pageName}").datepicker("setDate", DateUtil.getDateDay(-7).date);
|
||||
$("#schSendDateTo--${pageName}").datepicker("setDate", new Date());
|
||||
$("#byOutput--${pageName}").val("동적 검색"); // 동적 검색
|
||||
$("#schRgtrNm--${pageName}").prop("readonly", true); // 사용자 이름
|
||||
|
||||
// 첫번째 "전체" 탭에 datatable 설정
|
||||
$("#tabEpostRcpt0").html($("#datatable--${pageName}"));
|
||||
}
|
||||
|
||||
// 업무 구분별 설정
|
||||
$P.setTask = (taskSeCd) => {
|
||||
$P.control.urls.load = wctx.url("/" + taskSeCd + "${infoPrefixUrl}" + "/030/list.do"); // 조회
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 최초 실행 함수
|
||||
**************************************************************************/
|
||||
// 1. 이벤트 설정
|
||||
$P.setEvent();
|
||||
|
||||
// 2. 초기 설정 및 업무 구분 변경
|
||||
$P.fnResetAndChangeBiz($("#layout-navbar input[name='taskSeCd']:checked").val());
|
||||
|
||||
// 3. 보안모드
|
||||
fn_securityModeToggle($("#securityMode--top").is(":checked"));
|
||||
});
|
||||
|
||||
</script>
|
||||
@ -1,295 +0,0 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
|
||||
<c:set var="prefixName" scope="request">우편통합 발송 내역</c:set>
|
||||
|
||||
<!-- inner page html -->
|
||||
<div class="content-pop">
|
||||
<!-- Content -->
|
||||
<div class="container flex-grow-1 px-0">
|
||||
<div class="card">
|
||||
<!-- 입력 영역 -->
|
||||
<form id="frmEdit--${pageName}" name="frmEdit">
|
||||
<!-- hidden -->
|
||||
<input type="hidden" id="conKey--${pageName}" name="conKey" />
|
||||
</form>
|
||||
<!-- 입력 영역 -->
|
||||
|
||||
<!-- 업무 버튼 및 건수 표시 -->
|
||||
<div>
|
||||
<span class="container-page-btn">
|
||||
<!-- 건수, 페이지 표시 -->
|
||||
<div class="d-flex flex-row justify-content-between">
|
||||
<span class="dataTables_info" id="paging--${pageName}PagingInfo" role="status" aria-live="polite"></span>
|
||||
<ul class="pagination pagination-primary" id="paging--${pageName}">
|
||||
</ul>
|
||||
</div>
|
||||
<!-- 업무 버튼 -->
|
||||
<span class="container-window-btn-right">
|
||||
<button type="button" class="btn btn-excel w-px-120" id="btnExcel--${pageName}" title="엑셀">
|
||||
엑셀
|
||||
</button>
|
||||
</span>
|
||||
</span>
|
||||
</div>
|
||||
<!-- 업무 버튼 및 건수 표시 -->
|
||||
|
||||
<!-- DataTables(그리드) -->
|
||||
<div class="card-datatable text-nowrap" id="datatable--${pageName}">
|
||||
<div class="dataTables_wrapper dt-bootstrap5 no-footer" id="DataTables_Table_0_wrapper--${pageName}">
|
||||
<div class="table-responsive ox-scroll oy-scroll h-px-500" id="table-responsive--${pageName}">
|
||||
<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">
|
||||
<tr id="theadTr--${pageName}"
|
||||
data-by="by--${pageName}" data-by-output="byOutput--${pageName}" data-main-option="mainOption--${pageName}" data-sub-option="subOption--${pageName}">
|
||||
<th class="cmn" style="width: 72px;">No.</th>
|
||||
<th class="cmn" style="width: 180px;">등록일시</th>
|
||||
<th class="cmn" style="width: 160px;">등기번호</th>
|
||||
<th class="cmn" style="width: 100px;">우편번호</th>
|
||||
<th class="cmn" style="width: 200px;">수취인명</th>
|
||||
<th class="cmn" style="width: 180px;">배달일시</th>
|
||||
<th class="cmn" style="width: 120px;">배달결과</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: 280px;">주소</th>
|
||||
<th class="cmn" style="width: 320px;">상세주소</th>
|
||||
<th class="cmn" style="width: 240px;">연계식별키</th>
|
||||
<th class="cmn" style="width: 140px;">등록사용자</th>
|
||||
<th class="cmn" style="width: 180px;">수정일시</th>
|
||||
<th class="cmn" style="width: 140px;">수정사용자</th>
|
||||
<th class="cmn dummy-th"></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="tbody--${pageName}">
|
||||
</tbody>
|
||||
<template id="${infoPrefix}Row--${pageName}">
|
||||
<tr data-key="{RGST_NMBR}">
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{ROW_NUM}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{REG_DT}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{RGST_NMBR}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{RECEV_CAR_OWNER_ZIPCODE}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{RECEV_CAR_OWNER_NM}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{DELIV_YMD_TM}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{DELIVRSLTCD_NM}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{SUBRECPRSNNM}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{RELRECPRSNCDNM}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{NONDELIVREASNCDNM}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{RECEV_CAR_OWNER_ADDR}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{RECEV_CAR_OWNER_DETAILADDR}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{CON_KEY}</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}">{MDFR_NM}</td>
|
||||
<td class="cmn dummy-td"></td>
|
||||
</tr>
|
||||
</template>
|
||||
<template id="${infoPrefix}NotFound--${pageName}">
|
||||
<tr class="odd">
|
||||
<td valign="top" colspan="17" class="dataTables_empty text-center">${prefixName} 정보를 찾지 못했습니다.</td>
|
||||
</tr>
|
||||
</template>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- DataTables(그리드) -->
|
||||
</div> <!-- <div class="card"> -->
|
||||
</div> <!-- <div class="container flex-grow-1 px-0"> -->
|
||||
<!-- Content -->
|
||||
</div>
|
||||
<!-- / inner page html <div class="content-pop"> -->
|
||||
|
||||
<script>
|
||||
/**************************************************************************
|
||||
* Global Variable
|
||||
**************************************************************************/
|
||||
pageObject["${pageName}"] = {};
|
||||
|
||||
/**************************************************************************
|
||||
* script 진입
|
||||
**************************************************************************/
|
||||
$(document).ready(function() {
|
||||
// pageObject
|
||||
let $P = pageObject["${pageName}"];
|
||||
|
||||
// infoDialog 호출 용도(view 조회(편집불가), create 등록, update 수정)
|
||||
$P.callPurpose = "${callPurpose}";
|
||||
// FormFields
|
||||
$P.formFields = new FimsFormFields("#frmEdit--${pageName}");
|
||||
// main 의 검색 조건을 그대로 유지
|
||||
$P.mainQuery = ${mainQuery};
|
||||
|
||||
/**************************************************************************
|
||||
* DatasetControl
|
||||
**************************************************************************/
|
||||
$P.control = new DatasetControl({
|
||||
prefix: "epostRcptRegDtl"
|
||||
, prefixName: "우편 발송 정보"
|
||||
, keymapper: info => info ? info.RGST_NMBR : ""
|
||||
, dataGetter: obj => obj.${infoPrefix}List
|
||||
, appendData: true
|
||||
, formats: {
|
||||
DELIV_YMD_TM: datetimeFormat
|
||||
, REG_DT: datetimeFormat
|
||||
, MDFCN_DT: datetimeFormat
|
||||
}
|
||||
});
|
||||
// $P.control 설정
|
||||
$P.control.defaultFetchSize = FETCH_XS; // 1 페이지당 조회되는 자료 건수 index.jsp에서 확인 FETCH_XS = 30
|
||||
$P.control.query = { pageNum : 1, fetchSize : $P.control.defaultFetchSize };
|
||||
$P.control.beforeCurrent = null;
|
||||
|
||||
/**************************************************************************
|
||||
* DatasetControl 이벤트
|
||||
**************************************************************************/
|
||||
// Dataset 변경 이벤트
|
||||
$P.control.onDatasetChange = (obj, option) => {
|
||||
$P.renderList(obj.${infoPrefix}Total, option);
|
||||
|
||||
$("#paging--${pageName}").setPagingInfo({
|
||||
list: $P.control.dataset
|
||||
, prefix: "paging--${pageName}"
|
||||
, start: obj.${infoPrefix}Start
|
||||
, totalSize: obj.${infoPrefix}Total
|
||||
, fetchSize: obj.${infoPrefix}Fetch
|
||||
, func: "pageObject['${pageName}'].control.load({index})"
|
||||
});
|
||||
|
||||
|
||||
};
|
||||
|
||||
// 현재 선택 자료 변경 이벤트
|
||||
$P.control.onCurrentChange = (item) => {
|
||||
if (!item) return;
|
||||
|
||||
let key = item.data.RGST_NMBR;
|
||||
|
||||
$("#tbody--${pageName}").setCurrentRow(key);
|
||||
// CON_KEY
|
||||
$("#conKey--${pageName}").val(item.data.CON_KEY);
|
||||
};
|
||||
|
||||
/**************************************************************************
|
||||
* DataTables 이벤트
|
||||
**************************************************************************/
|
||||
// DataTables에 click, dbclick 이벤트
|
||||
$P.renderList = (totalSize, option) => {
|
||||
let ${infoPrefix}List = $P.control.dataset;
|
||||
let empty = ${infoPrefix}List.empty;
|
||||
|
||||
let trs = empty ?
|
||||
[document.getElementById("${infoPrefix}NotFound--${pageName}").innerHTML] : <%-- from template#${infoPrefix}NotFound --%>
|
||||
${infoPrefix}List.inStrings(
|
||||
document.getElementById("${infoPrefix}Row--${pageName}").innerHTML, <%-- from template#${infoPrefix}Row --%>
|
||||
(str, dataItem) => str
|
||||
.replace(/{onclick}/gi, "pageObject['${pageName}'].control.setCurrent('" + dataItem.getValue("RGST_NMBR") + "');")
|
||||
);
|
||||
|
||||
let noMore = (${infoPrefix}List.length >= totalSize);
|
||||
let initScroll = ($P.control.query.pageNum < 2);
|
||||
if(option != null && option.reloaded){
|
||||
initScroll = false;
|
||||
}
|
||||
|
||||
$("#table-responsive--${pageName}")[0].changeContent(trs.join(), initScroll, noMore);
|
||||
|
||||
// 보안모드
|
||||
fn_securityModeToggle($("#securityMode--top").is(":checked"));
|
||||
}
|
||||
|
||||
// DataTables에 스크롤이 맨 밑으로 이동했을 때 이벤트
|
||||
$P.scrollDataList = () => {
|
||||
|
||||
|
||||
$P.control.load($P.control.query.pageNum + 1);
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 사용자 함수(function)
|
||||
**************************************************************************/
|
||||
|
||||
|
||||
/**************************************************************************
|
||||
* 버튼 clickEvent
|
||||
**************************************************************************/
|
||||
// 엑셀 버튼 이벤트
|
||||
$P.fnExcel = () => {
|
||||
if ($P.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)")
|
||||
, getCellDefsForPrivacyCell);
|
||||
|
||||
$P.control.query.cellDefs = cellDefs;
|
||||
|
||||
$P.control.download();
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 초기 셋팅
|
||||
**************************************************************************/
|
||||
// 이벤트 설정
|
||||
$P.setEvent = () => {
|
||||
// 기본 버튼 이벤트
|
||||
$("#btnExcel--${pageName}").on("click", () => $P.fnExcel()); // 엑셀
|
||||
|
||||
// DataTables width 변경 조정 업무별 그리드가 존재 한다면.. crdn06010-main.jsp 참고
|
||||
fnMakeResizableTable($("#table-responsive--${pageName}")[0]);
|
||||
|
||||
// DataTables 스크롤 이벤트 생성
|
||||
fnMakeScrollableTable($("#table-responsive--${pageName}")[0], $P.scrollDataList);
|
||||
|
||||
// DataTables 스크롤을 위해서 다이얼로그 화면이 생성된 후 Dataset을 설정한다.
|
||||
$("#${infoPrefix}Dialog--${openerPageName}").on("shown.bs.modal", function (e) {
|
||||
$P.control.setData({
|
||||
${infoPrefix}List: ${epostRcptRegDtlList}
|
||||
, ${infoPrefix}Start: ${epostRcptRegDtlStart}
|
||||
, ${infoPrefix}Fetch: ${epostRcptRegDtlFetch}
|
||||
, ${infoPrefix}Total: ${epostRcptRegDtlTotal}
|
||||
});
|
||||
|
||||
// 업무 구분별 설정
|
||||
$P.setTask("${taskSeCd}");
|
||||
});
|
||||
}
|
||||
|
||||
// 초기 화면 설정
|
||||
$P.initForm = () => {
|
||||
// 화면 초기화
|
||||
$("#frmEdit--${pageName}")[0].reset();
|
||||
}
|
||||
|
||||
// 업무 구분별 설정
|
||||
$P.setTask = (taskSeCd) => {
|
||||
// 검색 조건 설정
|
||||
$P.control.query = $P.mainQuery;
|
||||
|
||||
// CON_KEY
|
||||
$("#conKey--${pageName}").val($P.control.dataset.getValue("CON_KEY"));
|
||||
|
||||
// 업무구분에 따른 URL 변경
|
||||
$P.control.urls.load = wctx.url("/" + taskSeCd + "${infoPrefixUrl}" + "/040/list.do"); // 검색
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 최초 실행 함수
|
||||
**************************************************************************/
|
||||
// 1. 이벤트 설정
|
||||
$P.setEvent();
|
||||
|
||||
// 2. 초기 화면 설정
|
||||
$P.initForm();
|
||||
|
||||
// 3. 보안모드
|
||||
fn_securityModeToggle($("#securityMode--top").is(":checked"));
|
||||
});
|
||||
|
||||
</script>
|
||||
@ -1,766 +0,0 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
|
||||
<c:set var="prefixName" scope="request">부과제외 관리</c:set>
|
||||
|
||||
<!-- inner page html -->
|
||||
<div class="content-wrapper">
|
||||
<!-- Content -->
|
||||
<div class="container-xxl flex-grow-1 px-0">
|
||||
<div class="card wrapper-list">
|
||||
<!-- 상단 버튼 -->
|
||||
<div class="container-page-btn">
|
||||
<button type="button" class="btn btn-outline-dark w-px-120" id="btnReset--${pageName}" title="초기화">
|
||||
초기화
|
||||
</button>
|
||||
<span class="container-window-btn-right">
|
||||
<button type="button" class="btn btn-search w-px-120" id="btnSearch--${pageName}" title="검색">
|
||||
검색
|
||||
</button>
|
||||
<button type="button" class="btn btn-excel w-px-120" id="btnExcel--${pageName}" title="엑셀">
|
||||
엑셀
|
||||
</button>
|
||||
</span>
|
||||
</div>
|
||||
<!-- 상단 버튼 -->
|
||||
|
||||
<!-- 검색 조건 영역 -->
|
||||
<form id="frmSearch--${pageName}" name="frmSearch">
|
||||
<!-- hidden -->
|
||||
<input type="hidden" id="sggCd--${pageName}" name="sggCd" />
|
||||
|
||||
<!-- 메인 조건 -->
|
||||
<div class="container-search">
|
||||
<div class="row g-1">
|
||||
<!-- 업무 구분 -->
|
||||
<div class="col-12">
|
||||
<span class="form-label fw-bold form-search-title w-px-120 text-end">업무구분</span>
|
||||
<span class="form-search-linebox">
|
||||
<c:forEach items="${taskListForSgg}" var="item">
|
||||
<label>
|
||||
<input type="radio" class="form-check-input" name="taskSeCd" alt="업무구분"
|
||||
value="${item.code}" onchange="pageObject['${pageName}'].fnResetAndChangeBiz(this.value);">
|
||||
${item.value}
|
||||
</label>
|
||||
</c:forEach>
|
||||
</span>
|
||||
</div>
|
||||
<!-- 부과 제외 일자 -->
|
||||
<div class="col-6">
|
||||
<label class="form-label fw-bold form-search-title w-px-120 text-end" for="schLevyExclYmdFrom--${pageName}">부과제외일자</label>
|
||||
<span class="form-search-linebox">
|
||||
<input type="text" class="form-control form-date" id="schLevyExclYmdFrom--${pageName}" name="schLevyExclYmdFrom"
|
||||
data-fmt-type="day" autocomplete="off" title="시작 날짜 선택" />
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
~
|
||||
<input type="text" class="form-control form-date" id="schLevyExclYmdTo--${pageName}" name="schLevyExclYmdTo"
|
||||
data-fmt-type="day" autocomplete="off" title="종료 날짜 선택" />
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
</span>
|
||||
</div>
|
||||
<!-- 부과 제외 구분 -->
|
||||
<div class="col-6">
|
||||
<label class="form-label fw-bold form-search-title w-px-120 text-end" for="schLevyExclSeCd--${pageName}">부과제외구분</label>
|
||||
<select class="form-select w-px-120" id="schLevyExclSeCd--${pageName}" name="schLevyExclSeCd">
|
||||
<option value="">전체</option>
|
||||
<c:forEach items="${FIM021List}" var="item">
|
||||
<option value="${item.code}">${item.value}</option>
|
||||
</c:forEach>
|
||||
</select>
|
||||
</div>
|
||||
<!-- 부과 제외 사유 -->
|
||||
<div class="col-6">
|
||||
<label class="form-label fw-bold form-search-title w-px-120 text-end" for="schLevyExclRsnCd--${pageName}">부과제외사유</label>
|
||||
<select class="form-select w-px-120" id="schLevyExclRsnCd--${pageName}" name="schLevyExclRsnCd">
|
||||
<option value="">전체</option>
|
||||
<c:forEach items="${FIM022List}" var="item">
|
||||
<option value="${item.code}">${item.value}</option>
|
||||
</c:forEach>
|
||||
</select>
|
||||
</div>
|
||||
<!-- 동적검색 -->
|
||||
<div class="col-6">
|
||||
<input type="hidden" id="by--${pageName}" name="by" />
|
||||
<input type="text" class="form-control fw-bold w-px-120 text-end" id="byOutput--${pageName}" value="동적 검색" readonly />
|
||||
<input type="hidden" id="mainOption--${pageName}" name="mainOption" />
|
||||
<input type="hidden" id="subOption--${pageName}" name="subOption" />
|
||||
<input type="text" class="form-control w-px-400" id="term--${pageName}" name="term" autocomplete="off" />
|
||||
<!-- 상세 검색조건 버튼 -->
|
||||
<span class="flr">
|
||||
<button type="button" class="btn btn-open-detail" data-bs-toggle="collapse" data-bs-target="#searchDetail--${pageName}">
|
||||
<i class="bx bx-chevron-down"></i>
|
||||
상세검색
|
||||
</button>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div> <!-- 메인 조건 -->
|
||||
|
||||
<!-- 상세 조건 -->
|
||||
<div id="searchDetail--${pageName}" class="container-search container-search-detail collapse">
|
||||
<div class="row g-1">
|
||||
<!-- 단속일자 -->
|
||||
<div class="col-4">
|
||||
<label class="form-label fw-bold form-search-title w-px-120 text-end" for="schCrdnYmdFrom--${pageName}">단속일자</label>
|
||||
<span class="form-search-linebox">
|
||||
<input type="text" class="form-control form-date" id="schCrdnYmdFrom--${pageName}" name="schCrdnYmdFrom"
|
||||
data-fmt-type="day" autocomplete="off" title="시작 날짜 선택" />
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
~
|
||||
<input type="text" class="form-control form-date" id="schCrdnYmdTo--${pageName}" name="schCrdnYmdTo"
|
||||
data-fmt-type="day" autocomplete="off" title="종료 날짜 선택" />
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
</span>
|
||||
</div>
|
||||
<!-- 차량번호 -->
|
||||
<div class="col-4">
|
||||
<label class="form-label fw-bold form-search-title w-px-120 text-end" for="schVhrno--${pageName}">차량번호</label>
|
||||
<input type="text" class="form-control w-px-160" id="schVhrno--${pageName}" name="schVhrno" autocomplete="off" />
|
||||
</div>
|
||||
<!-- 납부자번호 -->
|
||||
<div class="col-4">
|
||||
<label class="form-label fw-bold form-search-title w-px-120 text-end" for="schRtpyrNm--${pageName}">납부자번호</label>
|
||||
<input type="text" class="form-control w-px-160" id="schRtpyrNm--${pageName}" name="schRtpyrNm" autocomplete="off" />
|
||||
</div>
|
||||
<!-- 납부자명 -->
|
||||
<div class="col-4">
|
||||
<label class="form-label fw-bold form-search-title w-px-120 text-end" for="schRtpyrNo--${pageName}">납부자명</label>
|
||||
<input type="text" class="form-control w-px-160" id="schRtpyrNo--${pageName}" name="schRtpyrNo" autocomplete="off" />
|
||||
</div>
|
||||
<!-- 등록일자, 수정일자 -->
|
||||
<div class="col-4">
|
||||
<select class="form-select w-px-120 text-center" id="schRegDateOpt--${pageName}" name="schRegDateOpt">
|
||||
<option value="regDt">등록일자</option>
|
||||
<option value="mdfcnDt">수정일자</option>
|
||||
</select>
|
||||
<span class="form-search-linebox">
|
||||
<input type="text" class="form-control form-date" id="schRegDateFrom--${pageName}" name="schRegDateFrom"
|
||||
data-fmt-type="day" title="시작 날짜 선택" />
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
~
|
||||
<input type="text" class="form-control form-date" id="schRegDateTo--${pageName}" name="schRegDateTo"
|
||||
data-fmt-type="day" title="종료 날짜 선택">
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
</span>
|
||||
</div>
|
||||
<!-- 등록자명, 수정자명 -->
|
||||
<div class="col-4">
|
||||
<select class="form-select w-px-120 text-center" id="schRgtrOpt--${pageName}" name="schRgtrOpt">
|
||||
<option value="rgtr">등록자</option>
|
||||
<option value="mdfr">수정자</option>
|
||||
</select>
|
||||
<input type="hidden" id="schRgtrCd--${pageName}" name="schRgtrCd" />
|
||||
<input type="text" class="form-control w-px-160" id="schRgtrNm--${pageName}" name="schRgtrNm" />
|
||||
<button type="button" class="btn btn-sm btn-outline-dark" id="btnFindUser--${pageName}" title="사용자 검색">검색</button>
|
||||
</div>
|
||||
</div>
|
||||
</div> <!-- 상세 조건 -->
|
||||
</form>
|
||||
<!-- 검색 조건 영역 -->
|
||||
|
||||
<!-- 업무 버튼 및 건수 표시 -->
|
||||
<div>
|
||||
<span class="container-page-btn">
|
||||
<!-- 건수, 페이지 표시 -->
|
||||
<div class="d-flex flex-row justify-content-between">
|
||||
<span class="dataTables_info" id="paging--${pageName}PagingInfo" role="status" aria-live="polite"></span>
|
||||
<ul class="pagination pagination-primary" id="paging--${pageName}">
|
||||
</ul>
|
||||
</div>
|
||||
<!-- 업무 버튼 -->
|
||||
<span class="container-window-btn-right">
|
||||
<button type="button" class="btn btn-primary w-px-120" id="btnUpdate--${pageName}" title="부과제외 수정">
|
||||
부과제외 수정
|
||||
</button>
|
||||
<button type="button" class="btn btn-primary w-px-120" id="btnRemove--${pageName}" title="부과제외 삭제">
|
||||
부과제외 삭제
|
||||
</button>
|
||||
</span>
|
||||
</span>
|
||||
</div>
|
||||
<!-- 업무 버튼 및 건수 표시 -->
|
||||
|
||||
<!-- DataTables(그리드) -->
|
||||
<div class="card-datatable text-nowrap">
|
||||
<div class="dataTables_wrapper dt-bootstrap5 no-footer" id="DataTables_Table_0_wrapper--${pageName}">
|
||||
<div class="table-responsive ox-scroll oy-scroll h-px-500" id="table-responsive--${pageName}">
|
||||
<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">
|
||||
<tr id="theadTr--${pageName}"
|
||||
data-by="by--${pageName}" data-by-output="byOutput--${pageName}" data-main-option="mainOption--${pageName}" data-sub-option="subOption--${pageName}">
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="tbody--${pageName}">
|
||||
</tbody>
|
||||
|
||||
<template id="${infoPrefix}Col--${pageName}">
|
||||
<th class="cmn" style="width: 72px;">No.</th>
|
||||
<th class="cmn" style="width: 56px;"><input type="checkbox" class="form-check-input" id="gridAllCheckbox--${pageName}" onchange="pageObject['${pageName}'].control.select(this.checked);" /></th>
|
||||
<th class="cmn" style="width: 160px;">업무구분</th>
|
||||
<th class="cmn" style="width: 120px;" onclick="searchFromGridTitle('LEVY_EXCL_YMD', this.innerText, 'ymd', '');">부과제외일자</th>
|
||||
<th class="cmn" style="width: 120px;" onclick="searchFromGridTitle('LEVY_EXCL_SE_CD', this.innerText, 'codeValue', 'FIM021');">부과제외구분</th>
|
||||
<th class="cmn" style="width: 200px;" onclick="searchFromGridTitle('LEVY_EXCL_RSN_CD', this.innerText, 'codeValue', 'FIM022');">부과제외사유</th>
|
||||
<th class="cmn" style="width: 280px;" onclick="searchFromGridTitle('ETC_CN', this.innerText, 'match', 'part');">기타내용</th>
|
||||
<th class="cmn" style="width: 180px;" onclick="searchFromGridTitle('CVLCPT_APLY_NO', this.innerText, 'match', 'part');">민원신청번호</th>
|
||||
<th class="cmn" style="width: 180px;" onclick="searchFromGridTitle('CVLCPT_RCPT_NO', this.innerText, 'match', 'part');">민원접수번호</th>
|
||||
<th class="cmn" style="width: 120px;" onclick="searchFromGridTitle('CVLCPT_RCPT_YMD', this.innerText, 'ymd', '');">민원접수일자</th>
|
||||
<th class="cmn" style="width: 180px;" onclick="searchFromGridTitle('CRDN_YMD', this.innerText, 'ymd', '');">단속일시</th>
|
||||
<th class="cmn" style="width: 160px;" onclick="searchFromGridTitle('VHRNO', this.innerText, 'match', 'part');">차량번호</th>
|
||||
<th class="cmn" style="width: 120px;" onclick="searchFromGridTitle('RTPYR_SE_CD', this.innerText, 'codeValue', 'FIM011');">납부자구분</th>
|
||||
<th class="cmn" style="width: 160px;" onclick="searchFromGridTitle('RTPYR_NO', this.innerText, 'ymd', '');">납부자번호</th>
|
||||
<th class="cmn" style="width: 200px;" onclick="searchFromGridTitle('RTPYR_NM', this.innerText, 'match', 'part');">납부자명</th>
|
||||
<th class="cmn" style="width: 160px;" onclick="searchFromGridTitle('VLTN_ARTCL', this.innerText, 'match', 'part');">위반항목</th>
|
||||
<th class="cmn" style="width: 120px;" onclick="searchFromGridTitle('CRDN_STDG_NM', this.innerText, 'match', 'part');">단속법정동</th>
|
||||
<th class="cmn" style="width: 280px;" onclick="searchFromGridTitle('CRDN_PLC', this.innerText, 'match', 'part');">단속장소</th>
|
||||
<th class="bpv" style="width: 280px;" onclick="searchFromGridTitle('DTL_CRDN_PLC', this.innerText, 'match', 'part');">상세단속장소</th>
|
||||
<th class="cmn" style="width: 120px;" onclick="searchFromGridTitle('FFNLG_CRDN_AMT', this.innerText, 'match', 'part');">단속원금</th>
|
||||
<th class="cmn" style="width: 160px;" onclick="searchFromGridTitle('CRDN_STTS_CD', this.innerText, 'codeValue', 'FIM010');">처리상태</th>
|
||||
<th class="pvs" style="width: 140px;" onclick="searchFromGridTitle('CRDN_SPAREA_CD', this.innerText, 'codeValue', 'FIM007');">단속특별구역</th>
|
||||
<th class="eca" style="width: 140px;" onclick="searchFromGridTitle('USE_FUEL_CD', this.innerText, 'codeValue', 'LVS005');">사용연료</th>
|
||||
<th class="dpv" style="width: 140px;" onclick="searchFromGridTitle('PRK_PSBLTY_RSLT_CD', this.innerText, 'codeValue', 'FIM034');">주차가능여부</th>
|
||||
<th class="cmn" style="width: 100px;" onclick="searchFromGridTitle('ZIP', this.innerText, 'match', 'part');">우편번호</th>
|
||||
<th class="cmn" style="width: 280px;" onclick="searchFromGridTitle('ADDR', this.innerText, 'match', 'part');">주소</th>
|
||||
<th class="cmn" style="width: 320px;" onclick="searchFromGridTitle('DTL_ADDR', this.innerText, 'match', 'part');">상세주소</th>
|
||||
<th class="cmn" style="width: 180px;">등록일시</th>
|
||||
<th class="cmn" style="width: 140px;">등록사용자</th>
|
||||
<th class="cmn" style="width: 180px;">수정일시</th>
|
||||
<th class="cmn" style="width: 140px;">수정사용자</th>
|
||||
<th class="cmn dummy-th"></th>
|
||||
</template>
|
||||
<template id="${infoPrefix}Row--${pageName}">
|
||||
<tr data-key="{LEVY_EXCL_ID}">
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{ROW_NUM}</td>
|
||||
<td class="cmn text-center"><input type="checkbox" class="form-check-input" name="gridCheckbox" value="{LEVY_EXCL_ID}" onchange="pageObject['${pageName}'].control.select('{LEVY_EXCL_ID}', this.checked);" /></td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{TASK_SE_NM}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{LEVY_EXCL_YMD}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{LEVY_EXCL_SE_NM}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{LEVY_EXCL_RSN_NM}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{ETC_CN}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{CVLCPT_APLY_NO}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{CVLCPT_RCPT_NO}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{CVLCPT_RCPT_YMD}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{CRDN_YMD_TM}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{VHRNO}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{RTPYR_SE_NM}</td>
|
||||
<td class="cmn text-center privacy-cell" onclick="{onclick}" ondblclick="{ondblclick}">
|
||||
<span>{RTPYR_NO}</span>
|
||||
<span>*************</span>
|
||||
</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{RTPYR_NM}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{VLTN_ARTCL}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{CRDN_STDG_NM}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{CRDN_PLC}</td>
|
||||
<td class="bpv text-start" onclick="{onclick}" ondblclick="{ondblclick}">{DTL_CRDN_PLC}</td>
|
||||
<td class="cmn text-end" onclick="{onclick}" ondblclick="{ondblclick}">{FFNLG_CRDN_AMT}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{CRDN_STTS_NM}</td>
|
||||
<td class="pvs text-center" onclick="{onclick}" ondblclick="{ondblclick}">{CRDN_SPAREA_NM}</td>
|
||||
<td class="eca text-center" onclick="{onclick}" ondblclick="{ondblclick}">{USE_FUEL_NM}</td>
|
||||
<td class="dpv text-center" onclick="{onclick}" ondblclick="{ondblclick}">{PRK_PSBLTY_RSLT_NM}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{ZIP}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{ADDR}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{DTL_ADDR}</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}">{MDFCN_DT}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{MDFR_NM}</td>
|
||||
<td class="cmn dummy-td"></td>
|
||||
</tr>
|
||||
</template>
|
||||
<template id="${infoPrefix}NotFound--${pageName}">
|
||||
<tr class="bpv">
|
||||
<td valign="top" colspan="29" class="dataTables_empty text-center">${prefixName} 정보를 찾지 못했습니다.</td>
|
||||
</tr>
|
||||
<tr class="dpv">
|
||||
<td valign="top" colspan="29" class="dataTables_empty text-center">${prefixName} 정보를 찾지 못했습니다.</td>
|
||||
</tr>
|
||||
<tr class="eca">
|
||||
<td valign="top" colspan="29" class="dataTables_empty text-center">${prefixName} 정보를 찾지 못했습니다.</td>
|
||||
</tr>
|
||||
<tr class="pvs">
|
||||
<td valign="top" colspan="29" class="dataTables_empty text-center">${prefixName} 정보를 찾지 못했습니다.</td>
|
||||
</tr>
|
||||
<tr class="pes">
|
||||
<td valign="top" colspan="29" class="dataTables_empty text-center">${prefixName} 정보를 찾지 못했습니다.</td>
|
||||
</tr>
|
||||
</template>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- DataTables(그리드) -->
|
||||
</div> <!-- <div class="card wrapper-list"> -->
|
||||
</div> <!-- <div class="container-xxl flex-grow-1 px-0"> -->
|
||||
<!-- Content -->
|
||||
|
||||
<div class="content-backdrop fade"></div>
|
||||
</div>
|
||||
<!-- / inner page html <div class="content-wrapper"> -->
|
||||
|
||||
<script>
|
||||
/**************************************************************************
|
||||
* Global Variable
|
||||
**************************************************************************/
|
||||
pageObject["${pageName}"] = {};
|
||||
|
||||
/**************************************************************************
|
||||
* script 진입
|
||||
**************************************************************************/
|
||||
$(document).ready(function() {
|
||||
// pageObject
|
||||
let $P = pageObject["${pageName}"];
|
||||
|
||||
// FormFields
|
||||
$P.formFields = new FimsFormFields("#frmSearch--${pageName}");
|
||||
|
||||
/**************************************************************************
|
||||
* DatasetControl
|
||||
**************************************************************************/
|
||||
$P.control = new DatasetControl({
|
||||
prefix: "levyExcl"
|
||||
, prefixName: "부과제외"
|
||||
, keymapper: info => info ? info.LEVY_EXCL_ID : ""
|
||||
, dataGetter: obj => obj.${infoPrefix}List
|
||||
, appendData: true
|
||||
, infoSize: "md"
|
||||
, formats: {
|
||||
LEVY_EXCL_YMD: dateFormat
|
||||
, CRDN_YMD_TM: datetimeFormat
|
||||
, CVLCPT_RCPT_YMD: dateFormat
|
||||
, FFNLG_CRDN_AMT: numberFormat
|
||||
, REG_DT: datetimeFormat
|
||||
, MDFCN_DT: datetimeFormat
|
||||
}
|
||||
});
|
||||
// $P.control 설정
|
||||
$P.control.defaultFetchSize = FETCH_XS; // 1 페이지당 조회되는 자료 건수 index.jsp에서 확인 FETCH_XS = 30
|
||||
$P.control.query = { pageNum : 1, fetchSize : $P.control.defaultFetchSize };
|
||||
$P.control.beforeCurrent = null;
|
||||
|
||||
/**************************************************************************
|
||||
* DatasetControl 이벤트
|
||||
**************************************************************************/
|
||||
// Dataset 변경 이벤트
|
||||
$P.control.onDatasetChange = (obj, option) => {
|
||||
$P.renderList(obj.${infoPrefix}Total, option);
|
||||
|
||||
$("#paging--${pageName}").setPagingInfo({
|
||||
list: $P.control.dataset
|
||||
, prefix: "paging--${pageName}"
|
||||
, start: obj.${infoPrefix}Start
|
||||
, totalSize: obj.${infoPrefix}Total
|
||||
, fetchSize: obj.${infoPrefix}Fetch
|
||||
, func: "pageObject['${pageName}'].control.load({index})"
|
||||
});
|
||||
};
|
||||
|
||||
// 현재 선택 자료 변경 이벤트
|
||||
$P.control.onCurrentChange = (item) => {
|
||||
if (!item) return;
|
||||
|
||||
let key = item.data.LEVY_EXCL_ID;
|
||||
|
||||
$("#tbody--${pageName}").setCurrentRow(key);
|
||||
};
|
||||
|
||||
// 선택(체크) 변경 이벤트
|
||||
$P.control.onSelectionChange = (selected) => {
|
||||
let ${infoPrefix}List = $P.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()));
|
||||
});
|
||||
|
||||
// 삭제 버튼
|
||||
$("#btnRemove--${pageName}").prop("disabled", keys.length < 1);
|
||||
|
||||
// DataTables(그리드) 전체 선택(checkbox)
|
||||
if (keys.length < 1) {
|
||||
$("#DataTables_Table_0--${pageName} th input[type='checkbox']").prop("checked", false); // 체크 해제
|
||||
} else if (keys.length == ${infoPrefix}List.length) {
|
||||
$("#DataTables_Table_0--${pageName} th input[type='checkbox']").prop("checked", true); // 체크 설정
|
||||
} else {
|
||||
$("#DataTables_Table_0--${pageName} th input[type='checkbox']").prop("checked", false); // 체크 해제
|
||||
}
|
||||
};
|
||||
|
||||
// 상세정보 dialog
|
||||
$P.control.getInfo = (params) => {
|
||||
if (!params) return;
|
||||
|
||||
ajax.get({
|
||||
url: wctx.url("/" + params.taskSeCd + "${infoPrefixUrl}" + "/020/info.do") + "?openerPageName=${pageName}"
|
||||
, data: params || {}
|
||||
, success: resp => {
|
||||
dialog.open({
|
||||
id: $P.control.prefixed("Dialog--${pageName}")
|
||||
, title: params.title
|
||||
, content: resp
|
||||
, size: $P.control.infoSize
|
||||
, init: () => { }
|
||||
, onClose: () => { $P.fnRefreshList(); } // 자료 재조회
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// 삭제 callback
|
||||
$P.control.onRemove = (resp) => {
|
||||
let btnTitle = $("#btnRemove--${pageName}").attr("title");
|
||||
let showMessage = resp.rtnMsg.replace(/[S]|[F]/g, btnTitle);
|
||||
|
||||
// 메시지 출력
|
||||
dialog.alert({
|
||||
content: showMessage
|
||||
, init: () => { setDialogZindex(); }
|
||||
, onOK: () => { }
|
||||
});
|
||||
|
||||
if (resp.saved) { $P.fnRefreshList(); } // 자료 재조회
|
||||
}
|
||||
|
||||
// 삭제
|
||||
$P.control.remove = (params) => {
|
||||
if (!params) return;
|
||||
|
||||
ajax.post({
|
||||
url: wctx.url("/" + params.taskSeCd + "${infoPrefixUrl}" + "/010/remove.do")
|
||||
, data: params || {}
|
||||
, success: resp => $P.control.onRemove(resp)
|
||||
});
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* DataTables 이벤트
|
||||
**************************************************************************/
|
||||
// DataTables에 click, dbclick 이벤트
|
||||
$P.renderList = (totalSize, option) => {
|
||||
let ${infoPrefix}List = $P.control.dataset;
|
||||
let empty = ${infoPrefix}List.empty;
|
||||
let clsForTask = $("#frmSearch--${pageName} input[name='taskSeCd']:checked").val().toLowerCase(); // 소문자
|
||||
|
||||
// 업무별 DataTables(그리드) tr, td
|
||||
let foundContent = document.getElementById("${infoPrefix}Row--${pageName}").content;
|
||||
let foundTr = $(foundContent).find("tr")[0].cloneNode(false);
|
||||
let foundTds = $(foundContent).find("." + clsForTask + ",.cmn");
|
||||
|
||||
foundTds.each(function() {
|
||||
foundTr.appendChild(this.cloneNode(true));
|
||||
});
|
||||
|
||||
let replacer = (str, dataItem) => str
|
||||
.replace(/{onclick}/gi, "pageObject['${pageName}'].control.setCurrent('" + dataItem.getValue("LEVY_EXCL_ID") + "');")
|
||||
.replace(/{ondblclick}/gi, "pageObject['${pageName}'].getTotalInfo('" + dataItem.getValue("CRDN_ID") + "');");
|
||||
|
||||
let trs = empty ? [document.getElementById("${infoPrefix}NotFound--${pageName}").content.querySelector("." + clsForTask + ",.cmn").outerHTML]
|
||||
: ${infoPrefix}List.inStrings(foundTr.outerHTML, replacer);
|
||||
|
||||
let noMore = (${infoPrefix}List.length >= totalSize);
|
||||
let initScroll = ($P.control.query.pageNum < 2);
|
||||
if (option != null && option.reloaded) {
|
||||
initScroll = false;
|
||||
}
|
||||
|
||||
$("#table-responsive--${pageName}")[0].changeContent(trs.join(), initScroll, noMore);
|
||||
|
||||
// checkbox 체크 해제
|
||||
$("#DataTables_Table_0--${pageName} th input[type='checkbox']").prop("checked", false);
|
||||
|
||||
// 보안모드
|
||||
fn_securityModeToggle($("#securityMode--top").is(":checked"));
|
||||
}
|
||||
|
||||
// DataTables에 스크롤이 맨 밑으로 이동했을 때 이벤트
|
||||
$P.scrollDataList = () => {
|
||||
$P.control.load($P.control.query.pageNum + 1);
|
||||
}
|
||||
|
||||
// DataTables에 더블 클릭시 개별총정보 dialog
|
||||
$P.getTotalInfo = (crdnId) => {
|
||||
if (typeof crdnId == "undefined" || crdnId == null || crdnId == "") return;
|
||||
|
||||
let params = {
|
||||
callControlName: "pageObject['${pageName}'].control"
|
||||
, sggCd: $P.control.dataset.getValue("SGG_CD")
|
||||
, taskSeCd: $P.control.dataset.getValue("TASK_SE_CD")
|
||||
, crdnId: crdnId
|
||||
}
|
||||
|
||||
ajax.get({
|
||||
url: wctx.url("/sprt/sprt02/010/main.do")
|
||||
, data: params
|
||||
, success: resp => {
|
||||
dialog.open({
|
||||
id: "totalInfoMainDialog"
|
||||
, title: "개별총정보"
|
||||
, content: resp
|
||||
, size: "xxl"
|
||||
, init: () => { }
|
||||
, onClose: () => { }
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 사용자 함수(function)
|
||||
**************************************************************************/
|
||||
// 검색 자료 재조회
|
||||
$P.fnRefreshList = () => {
|
||||
$P.control.reload({all : true});
|
||||
}
|
||||
|
||||
// 사용자검색 callback
|
||||
$P.callbackFindUser = (userId, userNm) => {
|
||||
$("#schRgtrCd--${pageName}").val(userId); // 사용자 ID
|
||||
$("#schRgtrNm--${pageName}").val(userNm); // 사용자 명
|
||||
}
|
||||
|
||||
// 삭제사유 callback
|
||||
$P.callbackRsn = (obj) => {
|
||||
// 서버에 전송할 data(파라미터) 생성
|
||||
let params = {};
|
||||
let selected = $P.control.dataset.getKeys("selected");
|
||||
|
||||
params.sggCd = $("#sggCd--${pageName}").val(); // 시군구 코드
|
||||
params.taskSeCd = $("#frmSearch--${pageName} input[name='taskSeCd']:checked").val(); // 업무 구분 코드
|
||||
params[$P.control.prefixed("Ids")] = selected.join(","); // 부과 제외 IDs
|
||||
params.delRsn = obj.reason; // 삭제 사유
|
||||
|
||||
$P.control.remove(params);
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 버튼 clickEvent
|
||||
**************************************************************************/
|
||||
// 업무 구분 변경 이벤트
|
||||
$P.fnResetAndChangeBiz = (taskSeCd) => {
|
||||
// 업무 구분 코드
|
||||
if (typeof taskSeCd == "undefined" || taskSeCd == null || taskSeCd == "") {
|
||||
taskSeCd = $("#layout-navbar input[name='taskSeCd']:checked").val();
|
||||
}
|
||||
|
||||
// 초기 기본 설정
|
||||
$P.initForm(taskSeCd);
|
||||
// 업무 구분별 설정
|
||||
$P.setTask(taskSeCd);
|
||||
|
||||
// dataset 초기화
|
||||
$P.control.dataset.clear();
|
||||
}
|
||||
|
||||
// 사용자검색 버튼 클릭 이벤트
|
||||
$P.fnGetFindUser = () => {
|
||||
let params = {
|
||||
openerPageName: "${pageName}"
|
||||
, callbackFuncName: "pageObject['${pageName}']['callbackFindUser']"
|
||||
}
|
||||
|
||||
ajax.get({
|
||||
url: wctx.url("/user/user02/010/main.do") + "?openerPageName=${pageName}"
|
||||
, data: params || {}
|
||||
, success: resp => {
|
||||
dialog.open({
|
||||
id: "userDialog--${pageName}"
|
||||
, title: "사용자 검색"
|
||||
, content: resp
|
||||
, size: "lg"
|
||||
, init: () => { setDialogZindex(); }
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// 검색 버튼 클릭 이벤트
|
||||
$P.fnSearchList = () => {
|
||||
// 검색조건
|
||||
$P.control.query = $P.formFields.get(); // 검색 조건
|
||||
$P.control.query.fetchSize = $P.control.defaultFetchSize; // 한번에 조회되는 자료 건수
|
||||
$P.control.query.delYn = "N"; // 삭제 여부
|
||||
|
||||
$P.control.load(1);
|
||||
}
|
||||
|
||||
// 엑셀 버튼 클릭 이벤트
|
||||
$P.fnExcel = () => {
|
||||
if ($P.control.dataset.empty) {
|
||||
dialog.alert({
|
||||
content: "검색된 자료가 없습니다."
|
||||
, init: () => { setDialogZindex(); }
|
||||
, 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)")
|
||||
, getCellDefsForPrivacyCell);
|
||||
|
||||
$P.control.query.cellDefs = cellDefs;
|
||||
|
||||
$P.control.download();
|
||||
}
|
||||
|
||||
// 부과제외 수정 버튼 클릭 이벤트
|
||||
$P.fnUpdate = (title) => {
|
||||
// 부과제외 ID
|
||||
let levyExclId = $P.control.dataset.getValue("LEVY_EXCL_ID");
|
||||
// 부과제외 ID 가 없다면.. return
|
||||
if (typeof levyExclId == "undefined" || levyExclId == null || levyExclId == "") return;
|
||||
|
||||
let params = {
|
||||
title: title
|
||||
, callPurpose: "update" // 호출용도: 수정
|
||||
, sggCd: $P.control.dataset.getValue("SGG_CD") // 시군구 코드
|
||||
, taskSeCd: $P.control.dataset.getValue("TASK_SE_CD") // 업무 구분 코드
|
||||
, levyExclId: levyExclId // 부과제외 ID
|
||||
, levyExclSeCd: $P.control.dataset.getValue("LEVY_EXCL_SE_CD") // 부과제외 구분 코드
|
||||
};
|
||||
|
||||
$P.control.getInfo(params);
|
||||
}
|
||||
|
||||
// 부과제외 삭제 버튼 클릭 이벤트
|
||||
$P.fnRemove = (title) => {
|
||||
// 선택 자료
|
||||
let selected = $P.control.dataset.getKeys("selected");
|
||||
|
||||
if (selected.length < 1) {
|
||||
dialog.alert({
|
||||
content: "선택하신 " + $P.control.prefixName + " 정보가 없습니다."
|
||||
, init: () => { setDialogZindex(); }
|
||||
, onOK: () => { }
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
// 삭제 메세지 확인
|
||||
dialog.alert({
|
||||
content: "선택하신 " + selected.length + "건의 " + $P.control.prefixName + " 정보를 삭제하시겠습니까?"
|
||||
, onOK: () => {
|
||||
// 삭제 사유 입력
|
||||
fetch(wctx.url("/resources/html/inputRsnDialog.html"))
|
||||
.then(function(resp) { return resp.text(); })
|
||||
.then(function(template) {
|
||||
dialog.open({
|
||||
id: "inputDelRsnDialog"
|
||||
, title: title
|
||||
, size: "lg"
|
||||
, content: template
|
||||
, init: () => { setDialogZindex(); }
|
||||
, onOK: () => {
|
||||
$P.callbackRsn({ reason: $("#reason").val() });
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 초기 설정
|
||||
**************************************************************************/
|
||||
// 이벤트 설정
|
||||
$P.setEvent = () => {
|
||||
// 기본 버튼 이벤트
|
||||
$("#btnReset--${pageName}").on("click", () => $P.fnResetAndChangeBiz()); // 초기화
|
||||
$("#btnSearch--${pageName}").on("click", () => $P.fnSearchList()); // 검색
|
||||
$("#btnExcel--${pageName}").on("click", () => $P.fnExcel()); // 엑셀
|
||||
$("#btnFindUser--${pageName}").on("click", () => $P.fnGetFindUser()); // 사용자 검색
|
||||
|
||||
// 동적검색에서 엔터(Enter) 키를 누르면 검색한다.
|
||||
$("#term--${pageName}").onEnterPress(function() {
|
||||
$P.fnSearchList();
|
||||
});
|
||||
|
||||
// form-date 항목에서 키보드로 입력시 날짜 포맷팅 적용
|
||||
$("#frmSearch--${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);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// 버튼 이벤트
|
||||
$("#btnUpdate--${pageName}").on("click", function() {
|
||||
$P.fnUpdate($(this).attr("title")); // 부과제외 수정
|
||||
});
|
||||
$("#btnRemove--${pageName}").on("click", function() {
|
||||
$P.fnRemove($(this).attr("title")); // 부과제외 삭제
|
||||
});
|
||||
|
||||
// DataTables width 변경 조정 (업무별 그리드가 존재 한다면.. crdn06010-main.jsp 참고)
|
||||
fnMakeResizableTable($("#table-responsive--${pageName}")[0]);
|
||||
|
||||
// DataTables 스크롤 이벤트 생성
|
||||
fnMakeScrollableTable($("#table-responsive--${pageName}")[0], $P.scrollDataList);
|
||||
}
|
||||
|
||||
// 초기 화면 설정
|
||||
$P.initForm = (taskSeCd) => {
|
||||
// 화면 초기화
|
||||
$("#frmSearch--${pageName}")[0].reset();
|
||||
|
||||
// input, select 초기화
|
||||
let searchForm = $("#frmSearch--${pageName}");
|
||||
searchForm.find("input[type='radio']").not("[name='taskSeCd']").prop("checked", false);
|
||||
searchForm.find("input[type='checkbox']").prop("checked", false);
|
||||
searchForm.find("input[type='text']").val("");
|
||||
searchForm.find("input[type='hidden']").val("");
|
||||
searchForm.find("select").each(function() { $(this).find("option:eq(0)").prop("selected", true); });
|
||||
|
||||
// 최고 관리자 경우 업무구분을 선택할 수 있도록 하자.
|
||||
$("#frmSearch--${pageName} input[name='taskSeCd']").each(function(i) {
|
||||
$(this).prop("disabled", "true");
|
||||
});
|
||||
|
||||
// 기본 데이터 설정
|
||||
$("#sggCd--${pageName}").val("${sggCd}"); // 시군구 코드
|
||||
$("#frmSearch--${pageName} input[name='taskSeCd'][value='" + taskSeCd + "']").prop("checked", true); // 업무 구분 코드
|
||||
initDatepicker("frmSearch--${pageName}"); // 달력 초기화
|
||||
$("#schLevyExclYmdFrom--${pageName}").datepicker("setDate", DateUtil.getDateDay(-7).date); // 부과 제외 일자 시작
|
||||
$("#schLevyExclYmdTo--${pageName}").datepicker("setDate", new Date()); // 부과 제외 일자 종료
|
||||
$("#byOutput--${pageName}").val("동적 검색"); // 동적 검색
|
||||
$("#schRgtrNm--${pageName}").prop("readonly", true); // 사용자 이름
|
||||
}
|
||||
|
||||
// 업무 구분별 설정
|
||||
$P.setTask = (taskSeCd) => {
|
||||
// 업무구분에 따른 URL 설정
|
||||
$P.control.urls.load = wctx.url("/" + taskSeCd + "${infoPrefixUrl}" + "/010/list.do"); // 검색
|
||||
|
||||
// 업무별 조회조건
|
||||
renderForTask("frmSearch--${pageName}", taskSeCd.toLowerCase());
|
||||
|
||||
// 업무별 그리드 th
|
||||
let colContent = document.getElementById("${infoPrefix}Col--${pageName}").content;
|
||||
let cols = $(colContent).find("." + taskSeCd.toLowerCase() + ",.cmn");
|
||||
let colsOuterHTML = "";
|
||||
|
||||
cols.each(function() {
|
||||
colsOuterHTML += this.outerHTML;
|
||||
});
|
||||
$("#table-responsive--${pageName}")[0].changeColumn(colsOuterHTML);
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 최초 실행 함수
|
||||
**************************************************************************/
|
||||
// 1. 이벤트 설정
|
||||
$P.setEvent();
|
||||
|
||||
// 2. 초기 설정 및 업무 구분 변경
|
||||
$P.fnResetAndChangeBiz($("#layout-navbar input[name='taskSeCd']:checked").val());
|
||||
|
||||
// 3. 보안모드
|
||||
fn_securityModeToggle($("#securityMode--top").is(":checked"));
|
||||
});
|
||||
//# sourceURL=excl01010-main.jsp
|
||||
</script>
|
||||
@ -1,269 +0,0 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
|
||||
<c:set var="prefixName" scope="request">부과제외 상세 정보</c:set>
|
||||
|
||||
<!-- inner page html -->
|
||||
<div class="content-pop">
|
||||
<!-- Content -->
|
||||
<div class="container flex-grow-1 px-0">
|
||||
<div class="card">
|
||||
<!-- 입력 영역 -->
|
||||
<form id="frmEdit--${pageName}" name="frmEdit">
|
||||
<!-- hidden -->
|
||||
<input type="hidden" id="sggCd--${pageName}" name="sggCd" data-map="SGG_CD" />
|
||||
<input type="hidden" id="taskSeCd--${pageName}" name="taskSeCd" data-map="TASK_SE_CD" />
|
||||
<input type="hidden" id="crdnId--${pageName}" name="crdnId" data-map="CRDN_ID" />
|
||||
<input type="hidden" id="levyExclId--${pageName}" name="levyExclId" data-map="LEVY_EXCL_ID" />
|
||||
|
||||
<div class="row g-1">
|
||||
<!-- 단속일시 -->
|
||||
<div class="col-md-12">
|
||||
<label for="crdnYmdTm--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">단속일시</label>
|
||||
<input type="text" class="form-control w-35" id="crdnYmdTm--${pageName}" name="crdnYmdTm" data-map="CRDN_YMD_TM" data-fmt-type="dt" />
|
||||
</div>
|
||||
<!-- 차량번호 -->
|
||||
<div class="col-md-12">
|
||||
<label for="vhrno--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">차량번호</label>
|
||||
<input type="text" class="form-control w-px-120" id="vhrno--${pageName}" name="vhrno" data-map="VHRNO" autocomplete="off" />
|
||||
</div>
|
||||
<!-- 부과 제외 구분 -->
|
||||
<div class="col-md-12">
|
||||
<label for="levyExclSeNm--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end required">부과제외구분</label>
|
||||
<input type="text" class="form-control w-px-120" id="levyExclSeNm--${pageName}" autocomplete="off" />
|
||||
<input type="hidden" id="levyExclSeCd--${pageName}" name="levyExclSeCd" data-map="LEVY_EXCL_SE_CD" />
|
||||
</div>
|
||||
<!-- 부과 제외 일자 -->
|
||||
<div class="col-md-12">
|
||||
<label for="levyExclYmd--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end required">부과제외일자</label>
|
||||
<input type="text" class="form-control form-date" id="levyExclYmd--${pageName}" name="levyExclYmd" data-map="LEVY_EXCL_YMD"
|
||||
data-fmt-type="day" autocomplete="off" title="날짜 선택" maxlength="10" required />
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white" id="btnLevyExclYmd--${pageName}"></button>
|
||||
</div>
|
||||
<!-- 부과 제외 사유 -->
|
||||
<div class="col-md-12">
|
||||
<label for="levyExclRsnCd--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end required">부과제외사유</label>
|
||||
<select class="form-select" id="levyExclRsnCd--${pageName}" name="levyExclRsnCd" data-map="LEVY_EXCL_RSN_CD" required>
|
||||
<option value="">선택하세요</option>
|
||||
<c:forEach items="${FIM022List}" var="item">
|
||||
<option value="${item.code}">${item.value}</option>
|
||||
</c:forEach>
|
||||
</select>
|
||||
</div>
|
||||
<!-- 기타 내용 -->
|
||||
<div class="col-md-12">
|
||||
<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-70" id="etcCn--${pageName}" name="etcCn" data-map="ETC_CN" autocomplete="off" rows="3" data-maxlengthb="1000"></textarea>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<!-- 입력 영역 -->
|
||||
|
||||
<!-- 업무 버튼 및 건수 표시 -->
|
||||
<div>
|
||||
<span class="container-page-btn">
|
||||
<!-- 업무 버튼 -->
|
||||
<span class="container-window-btn-right">
|
||||
<button type="button" class="btn btn-primary w-px-80" id="btnSave--${pageName}" title="저장">
|
||||
저장
|
||||
</button>
|
||||
</span>
|
||||
</span>
|
||||
</div>
|
||||
<!-- 업무 버튼 및 건수 표시 -->
|
||||
</div> <!-- <div class="card"> -->
|
||||
</div> <!-- <div class="container flex-grow-1 px-0"> -->
|
||||
<!-- Content -->
|
||||
</div>
|
||||
<!-- / inner page html <div class="content-pop"> -->
|
||||
|
||||
<script>
|
||||
/**************************************************************************
|
||||
* Global Variable
|
||||
**************************************************************************/
|
||||
pageObject["${pageName}"] = {};
|
||||
|
||||
// 공통 코드
|
||||
var FIM021 = new CommonCodes(${FIM021}, true);
|
||||
var FIM022 = new CommonCodes(${FIM022}, true);
|
||||
|
||||
/**************************************************************************
|
||||
* script 진입
|
||||
**************************************************************************/
|
||||
$(document).ready(function() {
|
||||
// pageObject
|
||||
let $P = pageObject["${pageName}"];
|
||||
|
||||
// infoDialog 호출 용도(view 조회(편집불가), create 등록, update 수정)
|
||||
$P.callPurpose = "${callPurpose}";
|
||||
// FormFields
|
||||
$P.formFields = new FimsFormFields("#frmEdit--${pageName}");
|
||||
|
||||
/**************************************************************************
|
||||
* DatasetControl
|
||||
**************************************************************************/
|
||||
$P.control = new DatasetControl({
|
||||
prefix: "levyExcl"
|
||||
, prefixName: "부과제외"
|
||||
, keymapper: info => info ? info.LEVY_EXCL_ID : ""
|
||||
, dataGetter: obj => obj.${infoPrefix}Info
|
||||
});
|
||||
|
||||
/**************************************************************************
|
||||
* DatasetControl 이벤트
|
||||
**************************************************************************/
|
||||
// 현재 선택 자료 변경 이벤트
|
||||
$P.control.onCurrentChange = (item) => {
|
||||
if (!item) return;
|
||||
|
||||
// Dataset 셋팅
|
||||
$P.formFields.set($P.control, item);
|
||||
|
||||
// 업무구분에 따른 URL 변경
|
||||
$P.fnSetURL(item.data.TASK_SE_CD);
|
||||
// 부과제외구분에 따른 부과제외사유 설정
|
||||
$P.fnSetFim021(item.data.LEVY_EXCL_SE_CD, item.data.LEVY_EXCL_RSN_CD);
|
||||
|
||||
// 호출용도가 등록 이라면..
|
||||
if ($P.callPurpose == "create") {
|
||||
$("#levyExclYmd--${pageName}").datepicker("setDate", new Date());
|
||||
}
|
||||
}
|
||||
|
||||
// 저장 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
|
||||
, init: () => { setDialogZindex(); }
|
||||
, onOK: () => { }
|
||||
});
|
||||
|
||||
if (resp.saved) {
|
||||
dialog.close($P.control.prefix + "Dialog--${openerPageName}");
|
||||
|
||||
if ("${savedCallbackFuncName}" != "") {
|
||||
${savedCallbackFuncName}(resp.saved);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 저장
|
||||
$P.control.save = (info) => {
|
||||
if (!info) return;
|
||||
|
||||
let create = ($P.callPurpose == "create");
|
||||
|
||||
// 민원 접수 관리에서 호출했다면..
|
||||
if (create && "${saveCallbackFuncName}" != "") {
|
||||
${saveCallbackFuncName}(info);
|
||||
} else {
|
||||
ajax.post({
|
||||
url: !create ? $P.control.urls.update : $P.control.urls.create
|
||||
, data: info || {}
|
||||
, success: resp => $P.control.onSave(resp)
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 사용자 함수(function)
|
||||
**************************************************************************/
|
||||
// 업무구분에 따른 URL 설정
|
||||
$P.fnSetURL = (taskSeCd) => {
|
||||
$P.control.urls.create = wctx.url("/" + taskSeCd + "${infoPrefixUrl}" + "/020/create.do"); // 등록
|
||||
$P.control.urls.update = wctx.url("/" + taskSeCd + "${infoPrefixUrl}" + "/020/update.do"); // 수정
|
||||
}
|
||||
|
||||
// 부과제외 구분에 따른 부과제외 사유 코드 설정
|
||||
$P.fnSetFim021 = (seCode, rsnCode) => {
|
||||
let cmnCode = FIM021[seCode];
|
||||
|
||||
$("#levyExclSeCd--${pageName}").val(cmnCode.code);
|
||||
$("#levyExclSeNm--${pageName}").val(cmnCode.value);
|
||||
|
||||
let reasons = FIM022.list().filter(reason => "2" == seCode ? reason.code > "200" : reason.code < "200");
|
||||
$("#levyExclRsnCd--${pageName}").html(reasons.map(reason => "<option value='" + reason.code + "'>" + reason.value + "</option>").join());
|
||||
|
||||
if (typeof rsnCode != "undefined" && rsnCode != "") {
|
||||
$("#levyExclRsnCd--${pageName}").val(rsnCode);
|
||||
}
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 버튼 clickEvent
|
||||
**************************************************************************/
|
||||
// 저장 버튼 클릭 이벤트
|
||||
$P.fnSave = () => {
|
||||
// validate 확인
|
||||
if (!customValidate($("#frmEdit--${pageName}").find("input, select, textarea"))) return;
|
||||
|
||||
dialog.alert({
|
||||
content: "현재 " + $P.control.prefixName + " 정보를 저장하시겠습니까?"
|
||||
, init: () => { 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 = () => {
|
||||
// 달력 초기화
|
||||
initDatepicker("frmEdit--${pageName}");
|
||||
$("#levyExclYmd--${pageName}").datepicker("setDate", new Date());
|
||||
|
||||
// 화면 활성화 설정
|
||||
$("#crdnYmdTm--${pageName}").prop("readonly", true); // 단속 일시
|
||||
$("#vhrno--${pageName}").prop("readonly", true); // 차량번호
|
||||
$("#levyExclSeNm--${pageName}").prop("readonly", true); // 부과 제외 구분
|
||||
|
||||
// View로 호출
|
||||
if ($P.callPurpose == "view") {
|
||||
// input 요소들을 disabled
|
||||
$("#frmEdit--${pageName}").find("input,textarea,select").prop("disabled", true);
|
||||
// button 요소들을 disabled
|
||||
$("#btnLevyExclYmd--${pageName}").prop("disabled", true); // 부과제외 일자 달력 버튼
|
||||
$("#btnSave--${pageName}").prop("disabled", true); // 저장 버튼
|
||||
}
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 최초 실행 함수
|
||||
**************************************************************************/
|
||||
// 1. 이벤트 설정
|
||||
$P.setEvent();
|
||||
|
||||
// 2. 초기 화면 설정
|
||||
$P.initForm();
|
||||
|
||||
// 3. Dataset 설정
|
||||
$P.control.setData([${levyExclInfo}]);
|
||||
});
|
||||
|
||||
</script>
|
||||
@ -1,521 +0,0 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
|
||||
<c:set var="prefixName" scope="request">의견제출 상세 정보</c:set>
|
||||
|
||||
<!-- inner page html -->
|
||||
<div class="content-pop">
|
||||
<!-- Content -->
|
||||
<div class="container flex-grow-1 px-0">
|
||||
<div class="card">
|
||||
<!-- 입력 영역 -->
|
||||
<form id="frmEdit--${pageName}" name="frmEdit">
|
||||
<!-- hidden -->
|
||||
<input type="hidden" id="sggCd--${pageName}" name="sggCd" data-map="SGG_CD" />
|
||||
<input type="hidden" id="taskSeCd--${pageName}" name="taskSeCd" data-map="TASK_SE_CD" />
|
||||
<input type="hidden" id="crdnId--${pageName}" name="crdnId" data-map="CRDN_ID" />
|
||||
<input type="hidden" id="opnnId--${pageName}" name="opnnId" data-map="OPNN_ID" />
|
||||
|
||||
<div class="row g-1">
|
||||
<!-- 단속일시 -->
|
||||
<div class="col-md-4">
|
||||
<label for="crdnYmdTm--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">단속일시</label>
|
||||
<input type="text" class="form-control w-50" id="crdnYmdTm--${pageName}" name="crdnYmdTm" data-map="CRDN_YMD_TM" data-fmt-type="dt" />
|
||||
</div>
|
||||
<!-- 차량번호 -->
|
||||
<div class="col-md-4">
|
||||
<label for="vhrno--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">차량번호</label>
|
||||
<input type="text" class="form-control w-40" id="vhrno--${pageName}" name="vhrno" data-map="VHRNO" />
|
||||
</div>
|
||||
<!-- 납부자 명 -->
|
||||
<div class="col-md-4">
|
||||
<label for="rtpyrNm--${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="rtpyrNm--${pageName}" name="rtpyrNm" data-map="RTPYR_NM" />
|
||||
</div>
|
||||
<!-- 접수 번호 -->
|
||||
<div class="col-md-4">
|
||||
<label for="rcptNo--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">접수번호</label>
|
||||
<input type="text" class="form-control w-40" id="rcptNo--${pageName}" name="rcptNo" data-map="RCPT_NO" />
|
||||
</div>
|
||||
<!-- 접수 일자 -->
|
||||
<div class="col-md-4">
|
||||
<label for="rcptYmd--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end required">접수일자</label>
|
||||
<input type="text" class="form-control form-date" id="rcptYmd--${pageName}" name="rcptYmd" data-map="RCPT_YMD"
|
||||
data-fmt-type="day" title="날짜 선택" maxlength="10" required />
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white" id="btnRcptYmd--${pageName}"></button>
|
||||
</div>
|
||||
<!-- 접수 구분 -->
|
||||
<div class="col-md-4">
|
||||
<label for="rcptSeCd--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end required">접수구분</label>
|
||||
<select class="form-select" id="rcptSeCd--${pageName}" name="rcptSeCd" data-map="RCPT_SE_CD" required>
|
||||
<option value="">선택하세요</option>
|
||||
<c:forEach items="${FIM029List}" var="item">
|
||||
<option value="${item.code}">${item.value}</option>
|
||||
</c:forEach>
|
||||
</select>
|
||||
</div>
|
||||
<!-- 진술자 이름 -->
|
||||
<div class="col-md-4">
|
||||
<label for="sttrNm--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end required">성명</label>
|
||||
<input type="text" class="form-control w-35" id="sttrNm--${pageName}" name="sttrNm" data-map="STTR_NM" required />
|
||||
<button type="button" class="btn btn-sm btn-outline-dark" id="btnSearchPayer--${pageName}" title="납부자 정보 적용">
|
||||
납부자
|
||||
</button>
|
||||
</div>
|
||||
<!-- 진술자 생년월일 -->
|
||||
<div class="col-md-4">
|
||||
<label for="sttrBrdt--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">생년월일</label>
|
||||
<input type="text" class="form-control w-30" id="sttrBrdt--${pageName}" name="sttrBrdt" data-map="STTR_BRDT" placeholder="YYMMDD" />
|
||||
</div>
|
||||
<!-- 소유주 관계 구분 코드 -->
|
||||
<div class="col-md-4">
|
||||
<label for="ownrRelCd--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">소유주관계</label>
|
||||
<select class="form-select" id="ownrRelCd--${pageName}" name="ownrRelCd" data-map="OWNR_REL_CD">
|
||||
<option value="">선택하세요</option>
|
||||
<c:forEach items="${FIM032List}" var="item">
|
||||
<option value="${item.code}">${item.value}</option>
|
||||
</c:forEach>
|
||||
</select>
|
||||
</div>
|
||||
<!-- 진술자 주소 --><!-- 진술자 우편번호 -->
|
||||
<div class="col-md-12">
|
||||
<label for="sttrAddr--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">주소</label>
|
||||
<input type="text" class="form-control w-70" id="sttrAddr--${pageName}" name="sttrAddr" data-map="STTR_ADDR" />
|
||||
<input type="text" class="form-control w-px-75" id="sttrZip--${pageName}" name="sttrZip" data-map="STTR_ZIP" />
|
||||
<button type="button" class="btn btn-sm btn-outline-dark" id="btnSearchAddr--${pageName}" title="주소 검색">
|
||||
검색
|
||||
</button>
|
||||
</div>
|
||||
<!-- 진술자 상세주소 -->
|
||||
<div class="col-md-12">
|
||||
<label for="sttrDaddr--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">상세주소</label>
|
||||
<input type="text" class="form-control w-85" id="sttrDaddr--${pageName}" name="sttrDaddr" data-map="STTR_DADDR" />
|
||||
</div>
|
||||
<!-- 진술자 연락처 -->
|
||||
<div class="col-md-4">
|
||||
<label for="sttrCttpc--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">연락처</label>
|
||||
<input type="text" class="form-control w-45" id="sttrCttpc--${pageName}" name="sttrCttpc" data-map="STTR_CTTPC" />
|
||||
</div>
|
||||
<!-- 진술자 이메일 -->
|
||||
<div class="col-md-8">
|
||||
<label for="sttrEml--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">이메일</label>
|
||||
<input type="text" class="form-control w-40" id="sttrEml--${pageName}" name="sttrEml" data-map="STTR_EML" />
|
||||
</div>
|
||||
<!-- 의견 제출 내용 -->
|
||||
<div class="col-md-12">
|
||||
<label for="opnnSbmsnCn--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">의견제출내용</label>
|
||||
<textarea type="text" class="form-control w-85" id="opnnSbmsnCn--${pageName}" name="opnnSbmsnCn" data-map="OPNN_SBMSN_CN" rows="5" data-maxlengthb="4000"></textarea>
|
||||
</div>
|
||||
<!-- 의견 제출 구분 코드 -->
|
||||
<div class="col-md-12">
|
||||
<label for="opnnSbmsnSeCd--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end required">의견제출구분</label>
|
||||
<select class="form-select" id="opnnSbmsnSeCd--${pageName}" name="opnnSbmsnSeCd" data-map="OPNN_SBMSN_SE_CD" required>
|
||||
<option value="">선택하세요</option>
|
||||
<c:forEach items="${FIM033List}" var="item">
|
||||
<option value="${item.code}">${item.value}</option>
|
||||
</c:forEach>
|
||||
</select>
|
||||
</div>
|
||||
<!-- 의견 제출 요지 -->
|
||||
<div class="col-md-12">
|
||||
<label for="opnnSbmsnGist--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">의견제출요지</label>
|
||||
<input type="text" class="form-control w-85" id="opnnSbmsnGist--${pageName}" name="opnnSbmsnGist" data-map="OPNN_SBMSN_GIST" data-maxlengthb="300" />
|
||||
</div>
|
||||
<!-- 담당자 검토 의견 -->
|
||||
<div class="col-md-12">
|
||||
<label for="picRvwOpnn--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">검토의견</label>
|
||||
<textarea class="form-control w-85" id="picRvwOpnn--${pageName}" name="picRvwOpnn" data-map="PIC_RVW_OPNN" rows="3" data-maxlengthb="1000">
|
||||
</textarea>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<!-- 입력 영역 -->
|
||||
|
||||
<!-- 첨부 파일 -->
|
||||
<div class="card">
|
||||
<form id="frmFile--${pageName}" method="post" enctype="multipart/form-data" >
|
||||
<input type="file" id="uploadFiles--${pageName}" name="uploadFiles" multiple="multiple" onchange="pageObject['${pageName}'].fnAddFiles(this);" hidden />
|
||||
</form>
|
||||
<div class="row g-1">
|
||||
<div class="col-md-12">
|
||||
<button type="button" class="btn btn-blue w-px-120" id="btnAddFile--${pageName}" title="첨부파일 추가">파일추가</button>
|
||||
</div>
|
||||
</div>
|
||||
<!-- 첨부 파일 테이블 -->
|
||||
<div class="table-responsive">
|
||||
<table class="table table-bordered table-hover table-striped" id="fileList--${pageName}">
|
||||
<thead>
|
||||
<th class="text-center" style="width: 24px">No.</th>
|
||||
<th class="text-center" style="width: 200px">파일번호</th>
|
||||
<th class="text-center">파일이름</th>
|
||||
<th class="text-center" style="width: 200px">파일크기</th>
|
||||
<th class="text-center" style="width: 120px">다운로드</th>
|
||||
<th class="text-center" style="width: 120px">삭제</th>
|
||||
</thead>
|
||||
<tbody>
|
||||
</tbody>
|
||||
</table>
|
||||
</div> <!-- 첨부 파일 테이블 <div class="table-responsive"> -->
|
||||
</div> <!-- <div class="card"> -->
|
||||
<!-- 첨부 파일 -->
|
||||
|
||||
<!-- 업무 버튼 및 건수 표시 -->
|
||||
<div>
|
||||
<span class="container-page-btn">
|
||||
<!-- 업무 버튼 -->
|
||||
<span class="container-window-btn-right">
|
||||
<button type="button" class="btn btn-primary w-px-120" id="btnSave--${pageName}" title="저장">저장</button>
|
||||
</span>
|
||||
</span>
|
||||
</div>
|
||||
<!-- 업무 버튼 및 건수 표시 -->
|
||||
</div> <!-- <div class="card"> -->
|
||||
</div> <!-- <div class="container flex-grow-1 px-0"> -->
|
||||
<!-- Content -->
|
||||
</div>
|
||||
<!-- / inner page html <div class="content-pop"> -->
|
||||
|
||||
<script>
|
||||
/**************************************************************************
|
||||
* Global Variable
|
||||
**************************************************************************/
|
||||
pageObject["${pageName}"] = {};
|
||||
|
||||
/**************************************************************************
|
||||
* script 진입
|
||||
**************************************************************************/
|
||||
$(document).ready(function() {
|
||||
// pageObject
|
||||
let $P = pageObject["${pageName}"];
|
||||
|
||||
// infoDialog 호출 용도(view 조회(편집불가), create 등록, update 수정)
|
||||
$P.callPurpose = "${callPurpose}";
|
||||
// FormFields
|
||||
$P.formFields = new FimsFormFields("#frmEdit--${pageName}");
|
||||
// 파일 리스트
|
||||
$P.fileListArr = new Array();
|
||||
|
||||
/**************************************************************************
|
||||
* DatasetControl
|
||||
**************************************************************************/
|
||||
$P.control = new DatasetControl({
|
||||
prefix: "opnn"
|
||||
, prefixName: "의견제출"
|
||||
, keymapper: info => info ? info.OPNN_ID : ""
|
||||
, dataGetter: obj => obj.${infoPrefix}Info
|
||||
});
|
||||
|
||||
/**************************************************************************
|
||||
* DatasetControl 이벤트
|
||||
**************************************************************************/
|
||||
// 현재 선택 자료 변경 이벤트
|
||||
$P.control.onCurrentChange = (item) => {
|
||||
if (!item) return;
|
||||
|
||||
// Dataset 셋팅
|
||||
$P.formFields.set($P.control, item);
|
||||
// 업무구분에 따른 URL 변경
|
||||
$P.fnSetURL(item.data.TASK_SE_CD);
|
||||
|
||||
// 호출용도가 등록..
|
||||
if ($P.callPurpose == "create") {
|
||||
$("#rcptYmd--${pageName}").datepicker("setDate", new Date());
|
||||
} else {
|
||||
$P.fnSearchFileList(item.data.OPNN_ID); // 첨부파일 조회
|
||||
}
|
||||
}
|
||||
|
||||
// 저장 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
|
||||
, init: () => { setDialogZindex(); }
|
||||
, onOK: () => { }
|
||||
});
|
||||
|
||||
if (resp.saved) {
|
||||
// 폼을 리셋해서 uploadFiles에 출력된 선택 파일을 초기화시킨다.
|
||||
document.getElementById("frmFile--${pageName}").reset();
|
||||
|
||||
dialog.close($P.control.prefix + "Dialog--${openerPageName}");
|
||||
}
|
||||
}
|
||||
|
||||
// 저장
|
||||
$P.control.save = (info) => {
|
||||
if (!info) return;
|
||||
|
||||
let create = ($P.callPurpose == "create");
|
||||
let formData = new FormData();
|
||||
|
||||
// 첨부파일 배열에 있는 내용을 등록
|
||||
for (let iLoop = 0; iLoop < $P.fileListArr.length; iLoop++) {
|
||||
formData.append("uploadFiles" , $P.fileListArr[iLoop]);
|
||||
}
|
||||
for (let key in info) {
|
||||
let value = info[key];
|
||||
formData.append(key, value);
|
||||
}
|
||||
|
||||
ajax.post({
|
||||
url: !create ? $P.control.urls.update : $P.control.urls.create
|
||||
, data: formData
|
||||
, contentType: false
|
||||
, processData: false
|
||||
, success: resp => $P.control.onSave(resp)
|
||||
});
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 사용자 함수(function)
|
||||
**************************************************************************/
|
||||
// 업무구분에 따른 url 변경
|
||||
$P.fnSetURL = (taskSeCd) => {
|
||||
$P.control.urls.create = wctx.url("/" + taskSeCd + "${infoPrefixUrl}" + "/020/create.do"); // 등록
|
||||
$P.control.urls.update = wctx.url("/" + taskSeCd + "${infoPrefixUrl}" + "/020/update.do"); // 수정
|
||||
}
|
||||
|
||||
// 주소 검색 결과 callback
|
||||
$P.callbackSearchAddr = (obj) => {
|
||||
$("#sttrAddr--${pageName}").val(obj.ADDR); // 주소
|
||||
$("#sttrZip--${pageName}").val(obj.ZIP); // 우편번호
|
||||
$("#sttrDaddr--${pageName}").val(obj.DTL_ADDR); // 상세 주소
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 버튼 clickEvent
|
||||
**************************************************************************/
|
||||
// 납부자 정보를 진술자 정보로 입력한다.
|
||||
$P.fnSearchPayer = (title) => {
|
||||
$("select[name='ownrRelCd'] option:contains('본인')").attr("selected", "selected");
|
||||
$("#sttrNm--${pageName}").val($P.control.getValue("RTPYR_NM"));
|
||||
$("#sttrBrdt--${pageName}").val($P.control.getValue("RTPYR_BRDT"));
|
||||
$("#sttrAddr--${pageName}").val($P.control.getValue("ADDR"));
|
||||
$("#sttrZip--${pageName}").val($P.control.getValue("ZIP"));
|
||||
$("#sttrDaddr--${pageName}").val($P.control.getValue("DTL_ADDR"));
|
||||
|
||||
if ($P.control.getValue("RTPYR_MBL_TELNO") != "")
|
||||
$("#sttrCttpc--${pageName}").val($P.control.getValue("RTPYR_MBL_TELNO"));
|
||||
else
|
||||
$("#sttrCttpc--${pageName}").val($P.control.getValue("RTPYR_TELNO"));
|
||||
|
||||
$("#sttrEml--${pageName}").val($P.control.getValue("RTPYR_EML"));
|
||||
}
|
||||
|
||||
// 주소 검색
|
||||
$P.fnSearchAddr = async(title) => {
|
||||
let resp = await fetch(wctx.url("/resources/html/searchAddr.html"));
|
||||
let template = await resp.text();
|
||||
|
||||
dialog.open({
|
||||
id: "searchAddrDialog"
|
||||
, title: title
|
||||
, size: "lg"
|
||||
, content: template
|
||||
, init: () => {
|
||||
$("#searchAddrCallback").val("pageObject['${pageName}'].callbackSearchAddr");
|
||||
|
||||
setDialogZindex();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// 첨부파일 조회
|
||||
$P.fnSearchFileList = (opnnId) => {
|
||||
// 의견제출 등록일 경우에는 첨부파일을 조회하지 안는다..
|
||||
if (opnnId == null || opnnId == "") return;
|
||||
|
||||
// 첨부파일 리스트
|
||||
ajax.get({
|
||||
url: "file/list.do"
|
||||
, data: {
|
||||
infoType: "110"
|
||||
, infoKeys: opnnId
|
||||
, fetchSize: 0
|
||||
}
|
||||
, success: resp => {
|
||||
let fileNo = 0;
|
||||
let fileList = resp.fileList;
|
||||
|
||||
fileList.forEach(function (item, index, array) {
|
||||
fileNo = index + 1;
|
||||
|
||||
let innerHtml = "";
|
||||
innerHtml += "<tr>";
|
||||
innerHtml += "<td class='text-center'>" + fileNo + "</td>";
|
||||
innerHtml += "<td class='text-center'>" + item.FILE_ID + "</td>";
|
||||
innerHtml += "<td class='text-center'>" + item.FILE_NM + "</td>";
|
||||
innerHtml += "<td class='text-center'>" + item.FILE_SIZE + " byte</td>";
|
||||
innerHtml += "<td class='text-center'>" + "<button type='button' class='btn' onclick=";
|
||||
innerHtml += "pageObject['${pageName}'].fnFileDownload(" + item.FILE_ID + ");" + "><i class='bx bx-download me-1'></i></button>" + "</td>";
|
||||
innerHtml += "<td class='text-center'>" + "<button type='button' class='btn' onclick=";
|
||||
innerHtml += "pageObject['${pageName}'].fnFileRemove(this);" + "><i class='bx bx-trash me-1'></i></button>" + "</td>";
|
||||
innerHtml += "</tr>";
|
||||
|
||||
$("#fileList--${pageName} > tbody:last").append(innerHtml);
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// 첨부파일 등록
|
||||
$P.fnAddFiles = (obj) => {
|
||||
let fileNo = $("#fileList--${pageName} > tbody tr").length; // table의 tr 개수
|
||||
|
||||
let maxFileCnt = 3; // 첨부파일 최대 개수
|
||||
let attFileCnt = obj.files.length; // 선택한 파일 개수 + 기존 파일 개수
|
||||
let fileArr = new Array(); // 파일 배열
|
||||
|
||||
fileArr = $P.fileListArr;
|
||||
|
||||
// 등록할 파일 개수 확인
|
||||
if (attFileCnt + fileNo > maxFileCnt) {
|
||||
dialog.alert({
|
||||
content : "첨부파일은 최대 " + maxFileCnt + "개 까지 첨부 가능합니다."
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
// 첨부파일을 table에 추가.
|
||||
for (let iLoop = 0; iLoop < attFileCnt; iLoop++) {
|
||||
let selectedFile = obj.files[iLoop];
|
||||
let innerHtml = "";
|
||||
|
||||
fileNo += 1;
|
||||
|
||||
innerHtml += "<tr>";
|
||||
innerHtml += "<td class='text-center'>" + fileNo + "</td>";
|
||||
innerHtml += "<td class='text-center'>" + "</td>";
|
||||
innerHtml += "<td class='text-center'>" + selectedFile.name + "</td>";
|
||||
innerHtml += "<td class='text-center'>" + selectedFile.size + " byte</td>";
|
||||
innerHtml += "<td class='text-center'>" + "</td>";
|
||||
innerHtml += "<td class='text-center'>" + "<button type='button' class='btn' onclick=";
|
||||
innerHtml += "pageObject['${pageName}'].fnFileRemove(this);" + "><i class='bx bx-trash me-1'></i></button>" + "</td>";
|
||||
innerHtml += "</tr>";
|
||||
|
||||
$("#fileList--${pageName} > tbody:last").append(innerHtml);
|
||||
|
||||
fileArr.push(obj.files[iLoop]);
|
||||
}
|
||||
}
|
||||
|
||||
// 첨부파일 삭제 아이콘 클릭 이벤트
|
||||
$P.fnFileRemove = (obj) => {
|
||||
dialog.alert({
|
||||
content: "선택한 파일을 삭제하시겠습니까?"
|
||||
, onOK: () => {
|
||||
let tr = $(obj).parent().parent(); // 클릭한 버튼이 속한 tr 요소
|
||||
let td = tr.children();
|
||||
let fileNo = td.eq(0).text(); // 삭제할 파일 번호
|
||||
let fileId = td.eq(1).text();
|
||||
|
||||
if (fileId != null && fileId != "") {
|
||||
ajax.post({
|
||||
url: "file/remove.do"
|
||||
, data: { fileIDs : fileId }
|
||||
, success: resp => { // 성공
|
||||
}
|
||||
});
|
||||
} else {
|
||||
// 배열에서 삭제한다. 배열은 0부터 시작하기 때문에 -1 해준다.
|
||||
$P.fileListArr.splice(fileNo - 1);
|
||||
}
|
||||
|
||||
$(obj).closest("tr").remove(); // table 에서 제거
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// 첨부파일 다운로드 아이콘 클릭 이벤트
|
||||
$P.fnFileDownload = (fileID) => {
|
||||
top.location.href = "/file/download.do?fileID=" + fileID;
|
||||
}
|
||||
|
||||
// 저장
|
||||
$P.fnSave = () => {
|
||||
// validate 확인
|
||||
if (!customValidate($("#frmEdit--${pageName}").find("input, select, textarea"))) return;
|
||||
|
||||
dialog.alert({
|
||||
content: "현재 " + $P.control.prefixName + " 정보를 저장하시겠습니까?"
|
||||
, init: () => { 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);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// 버튼 이벤트
|
||||
$("#btnSearchPayer--${pageName}").on("click", function() { // 납부자 정보 조회 버튼 이벤트
|
||||
$P.fnSearchPayer($(this).attr("title"));
|
||||
});
|
||||
$("#btnSearchAddr--${pageName}").on("click", function() { // 주소 검색 버튼 이벤트
|
||||
$P.fnSearchAddr($(this).attr("title"));
|
||||
});
|
||||
$("#btnAddFile--${pageName}").on('click', () => $("#uploadFiles--${pageName}").trigger("click")); // 파일 등록 버튼 이벤트
|
||||
$("#btnSave--${pageName}").on("click", () => $P.fnSave()); // 저장 버튼 이벤트
|
||||
}
|
||||
|
||||
// 초기 화면 설정
|
||||
$P.initForm = () => {
|
||||
// 달력 초기화
|
||||
initDatepicker("frmEdit--${pageName}");
|
||||
$("#rcptYmd--${pageName}").datepicker("setDate", new Date());
|
||||
|
||||
// 화면 활성화 설정
|
||||
$("#vhrno--${pageName}").prop("readonly", true); // 차량번호
|
||||
$("#crdnYmdTm--${pageName}").prop("readonly", true); // 단속 일자
|
||||
$("#rtpyrNm--${pageName}").prop("readonly", true); // 납부자 명
|
||||
|
||||
// View로 호출
|
||||
if ($P.callPurpose == "view") {
|
||||
// input 요소들을 disabled
|
||||
$("#frmEdit--${pageName}").find("input,textarea,select").prop("disabled", true);
|
||||
// button 요소들을 disabled
|
||||
$("#btnRcptYmd--${pageName}").prop("disabled", true); // 접수 일자 달력 버튼
|
||||
$("#btnSearchPayer--${pageName}").prop("disabled", true); // 납부자 버튼
|
||||
$("#btnSearchAddr--${pageName}").prop("disabled", true); // 우편번호 버튼
|
||||
$("#btnAddFile--${pageName}").prop("disabled", true); // 파일 추가 버튼
|
||||
$("#btnSave--${pageName}").prop("disabled", true); // 저장 버튼
|
||||
} else if ($P.callPurpose == "create") {
|
||||
$("#rcptNo--${pageName}").prop("readonly", true); // 접수 번호
|
||||
$("#rcptYmd--${pageName}").datepicker("setDate", new Date()); // 접수 일자
|
||||
}
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 최초 실행 함수
|
||||
**************************************************************************/
|
||||
// 1. 이벤트 설정
|
||||
$P.setEvent();
|
||||
|
||||
// 2. 초기 화면 설정
|
||||
$P.initForm();
|
||||
|
||||
// 3. Dataset 설정
|
||||
$P.control.setData([${opnnSbmsnInfo}]);
|
||||
});
|
||||
|
||||
</script>
|
||||
@ -1,240 +0,0 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
|
||||
<c:set var="prefixName" scope="request">의견제출 심의위원 상세 정보</c:set>
|
||||
|
||||
<!-- inner page html -->
|
||||
<div class="content-pop">
|
||||
<!-- Content -->
|
||||
<div class="container flex-grow-1 px-0">
|
||||
<div class="card">
|
||||
<!-- 입력 영역 -->
|
||||
<form id="frmEdit--${pageName}" name="frmEdit">
|
||||
<!-- hidden -->
|
||||
<input type="hidden" id="sggCd--${pageName}" name="sggCd" data-map="SGG_CD" />
|
||||
<input type="hidden" id="taskSeCd--${pageName}" name="taskSeCd" data-map="TASK_SE_CD" />
|
||||
<input type="hidden" id="mngId--${pageName}" name="mngId" data-map="MNG_ID" />
|
||||
|
||||
<div class="row g-1">
|
||||
<!-- 1 직급 -->
|
||||
<div class="col-md-7">
|
||||
<label for="dlbrMbrJbgd1--${pageName}" class="w-px-70 bg-lighter pe-2 col-form-label text-sm-end">심의위원1</label>
|
||||
<label for="dlbrMbrJbgd1--${pageName}" class="w-px-40 bg-lighter pe-2 col-form-label text-sm-end">직급</label>
|
||||
<input type="text" class="form-control w-50" id="dlbrMbrJbgd1--${pageName}" name="dlbrMbrJbgd1" data-map="DLBR_MBR_JBGD1" />
|
||||
</div>
|
||||
<!-- 1 회원명 -->
|
||||
<div class="col-md-5">
|
||||
<label for="dlbrMbrNm1--${pageName}" class="w-px-60 bg-lighter pe-2 col-form-label text-sm-end">성명</label>
|
||||
<input type="text" class="form-control w-60" id="dlbrMbrNm1--${pageName}" name="dlbrMbrNm1" data-map="DLBR_MBR_NM1" />
|
||||
</div>
|
||||
<!-- 2 직급 -->
|
||||
<div class="col-md-7">
|
||||
<label for="dlbrMbrJbgd2--${pageName}" class="w-px-70 bg-lighter pe-2 col-form-label text-sm-end">심의위원2</label>
|
||||
<label for="dlbrMbrJbgd2--${pageName}" class="w-px-40 bg-lighter pe-2 col-form-label text-sm-end">직급</label>
|
||||
<input type="text" class="form-control w-50" id="dlbrMbrJbgd2--${pageName}" name="dlbrMbrJbgd2" data-map="DLBR_MBR_JBGD2" />
|
||||
</div>
|
||||
<!-- 2 회원명 -->
|
||||
<div class="col-md-5">
|
||||
<label for="dlbrMbrNm2--${pageName}" class="w-px-60 bg-lighter pe-2 col-form-label text-sm-end">성명</label>
|
||||
<input type="text" class="form-control w-60" id="dlbrMbrNm2--${pageName}" name="dlbrMbrNm2" data-map="DLBR_MBR_NM2" />
|
||||
</div>
|
||||
<!-- 3 직급 -->
|
||||
<div class="col-md-7">
|
||||
<label for="dlbrMbrJbgd3--${pageName}" class="w-px-70 bg-lighter pe-2 col-form-label text-sm-end">심의위원3</label>
|
||||
<label for="dlbrMbrJbgd3--${pageName}" class="w-px-40 bg-lighter pe-2 col-form-label text-sm-end">직급</label>
|
||||
<input type="text" class="form-control w-50" id="dlbrMbrJbgd3--${pageName}" name="dlbrMbrJbgd3" data-map="DLBR_MBR_JBGD3" />
|
||||
</div>
|
||||
<!-- 3 회원명 -->
|
||||
<div class="col-md-5">
|
||||
<label for="dlbrMbrNm3--${pageName}" class="w-px-60 bg-lighter pe-2 col-form-label text-sm-end">성명</label>
|
||||
<input type="text" class="form-control w-60" id="dlbrMbrNm3--${pageName}" name="dlbrMbrNm3" data-map="DLBR_MBR_NM3" />
|
||||
</div>
|
||||
<!-- 4 직급 -->
|
||||
<div class="col-md-7">
|
||||
<label for="dlbrMbrJbgd4--${pageName}" class="w-px-70 bg-lighter pe-2 col-form-label text-sm-end">심의위원4</label>
|
||||
<label for="dlbrMbrJbgd4--${pageName}" class="w-px-40 bg-lighter pe-2 col-form-label text-sm-end">직급</label>
|
||||
<input type="text" class="form-control w-50" id="dlbrMbrJbgd4--${pageName}" name="dlbrMbrJbgd4" data-map="DLBR_MBR_JBGD4" />
|
||||
</div>
|
||||
<!-- 4 회원명 -->
|
||||
<div class="col-md-5">
|
||||
<label for="dlbrMbrNm4--${pageName}" class="w-px-60 bg-lighter pe-2 col-form-label text-sm-end">성명</label>
|
||||
<input type="text" class="form-control w-60" id="dlbrMbrNm4--${pageName}" name="dlbrMbrNm4" data-map="DLBR_MBR_NM4" />
|
||||
</div>
|
||||
<!-- 5 직급 -->
|
||||
<div class="col-md-7">
|
||||
<label for="dlbrMbrJbgd5--${pageName}" class="w-px-70 bg-lighter pe-2 col-form-label text-sm-end">심의위원5</label>
|
||||
<label for="dlbrMbrJbgd5--${pageName}" class="w-px-40 bg-lighter pe-2 col-form-label text-sm-end">직급</label>
|
||||
<input type="text" class="form-control w-50" id="dlbrMbrJbgd5--${pageName}" name="dlbrMbrJbgd5" data-map="DLBR_MBR_JBGD5" />
|
||||
</div>
|
||||
<!-- 5 회원명 -->
|
||||
<div class="col-md-5">
|
||||
<label for="dlbrMbrNm5--${pageName}" class="w-px-60 bg-lighter pe-2 col-form-label text-sm-end">성명</label>
|
||||
<input type="text" class="form-control w-60" id="dlbrMbrNm5--${pageName}" name="dlbrMbrNm5" data-map="DLBR_MBR_NM5" />
|
||||
</div>
|
||||
<!-- 6 직급 -->
|
||||
<div class="col-md-7">
|
||||
<label for="dlbrMbrJbgd6--${pageName}" class="w-px-70 bg-lighter pe-2 col-form-label text-sm-end">심의위원6</label>
|
||||
<label for="dlbrMbrJbgd6--${pageName}" class="w-px-40 bg-lighter pe-2 col-form-label text-sm-end">직급</label>
|
||||
<input type="text" class="form-control w-50" id="dlbrMbrJbgd6--${pageName}" name="dlbrMbrJbgd6" data-map="DLBR_MBR_JBGD6" />
|
||||
</div>
|
||||
<!-- 6 회원명 -->
|
||||
<div class="col-md-5">
|
||||
<label for="dlbrMbrNm6--${pageName}" class="w-px-60 bg-lighter pe-2 col-form-label text-sm-end">성명</label>
|
||||
<input type="text" class="form-control w-60" id="dlbrMbrNm6--${pageName}" name="dlbrMbrNm6" data-map="DLBR_MBR_NM6" />
|
||||
</div>
|
||||
<!-- 7 직급 -->
|
||||
<div class="col-md-7">
|
||||
<label for="dlbrMbrJbgd7--${pageName}" class="w-px-70 bg-lighter pe-2 col-form-label text-sm-end">심의위원7</label>
|
||||
<label for="dlbrMbrJbgd7--${pageName}" class="w-px-40 bg-lighter pe-2 col-form-label text-sm-end">직급</label>
|
||||
<input type="text" class="form-control w-50" id="dlbrMbrJbgd7--${pageName}" name="dlbrMbrJbgd7" data-map="DLBR_MBR_JBGD7" />
|
||||
</div>
|
||||
<!-- 7 회원명 -->
|
||||
<div class="col-md-5">
|
||||
<label for="dlbrMbrNm7--${pageName}" class="w-px-60 bg-lighter pe-2 col-form-label text-sm-end">성명</label>
|
||||
<input type="text" class="form-control w-60" id="dlbrMbrNm7--${pageName}" name="dlbrMbrNm7" data-map="DLBR_MBR_NM7" />
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<!-- 입력 영역 -->
|
||||
|
||||
<!-- 업무 버튼 및 건수 표시 -->
|
||||
<div>
|
||||
<span class="container-page-btn">
|
||||
<!-- 업무 버튼 -->
|
||||
<span class="container-window-btn-right">
|
||||
<button type="button" class="btn btn-primary w-px-80" id="btnSave--${pageName}" title="저장">
|
||||
저장
|
||||
</button>
|
||||
</span>
|
||||
</span>
|
||||
</div>
|
||||
<!-- 업무 버튼 및 건수 표시 -->
|
||||
</div> <!-- <div class="card"> -->
|
||||
</div> <!-- <div class="container flex-grow-1 px-0"> -->
|
||||
<!-- Content -->
|
||||
</div>
|
||||
<!-- / inner page html <div class="content-pop"> -->
|
||||
|
||||
<script>
|
||||
/**************************************************************************
|
||||
* Global Variable
|
||||
**************************************************************************/
|
||||
pageObject["${pageName}"] = {};
|
||||
|
||||
/**************************************************************************
|
||||
* script 진입
|
||||
**************************************************************************/
|
||||
$(document).ready(function() {
|
||||
// pageObject
|
||||
let $P = pageObject["${pageName}"];
|
||||
|
||||
// FormFields
|
||||
$P.formFields = new FimsFormFields("#frmEdit--${pageName}");
|
||||
|
||||
/**************************************************************************
|
||||
* DatasetControl
|
||||
**************************************************************************/
|
||||
$P.control = new DatasetControl({
|
||||
prefix: "opnnDlbrMbr"
|
||||
, prefixName: "의견제출 심의위원 관리"
|
||||
, keymapper: info => info ? info.MNG_ID : ""
|
||||
, dataGetter: obj => obj.${infoPrefix}Info
|
||||
});
|
||||
|
||||
/**************************************************************************
|
||||
* DatasetControl 이벤트
|
||||
**************************************************************************/
|
||||
// 현재 선택 자료 변경 이벤트
|
||||
$P.control.onCurrentChange = item => {
|
||||
if (!item) return;
|
||||
|
||||
// Dataset 셋팅
|
||||
$P.formFields.set($P.control, item);
|
||||
// 업무구분에 따른 URL 변경
|
||||
$P.fnSetURL(item.data.TASK_SE_CD);
|
||||
}
|
||||
|
||||
// 저장 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
|
||||
, init: () => { setDialogZindex(); }
|
||||
, onOK: () => { }
|
||||
});
|
||||
|
||||
if (resp.saved) {
|
||||
dialog.close($P.control.prefix + "Dialog--${openerPageName}");
|
||||
}
|
||||
}
|
||||
|
||||
// 저장
|
||||
$P.control.save = (info) => {
|
||||
if (!info) return;
|
||||
|
||||
let create = (info.mngId == "");
|
||||
|
||||
ajax.post({
|
||||
url: !create ? $P.control.urls.update : $P.control.urls.create
|
||||
, data: info || {}
|
||||
, success: resp => $P.control.onSave(resp)
|
||||
});
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 사용자 함수(function)
|
||||
**************************************************************************/
|
||||
// 업무구분에 따른 URL 설정
|
||||
$P.fnSetURL = (taskSeCd) => {
|
||||
$P.control.urls.create = wctx.url("/" + taskSeCd + "${infoPrefixUrl}" + "/040/create.do"); // 등록
|
||||
$P.control.urls.update = wctx.url("/" + taskSeCd + "${infoPrefixUrl}" + "/040/update.do"); // 수정
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 버튼 clickEvent
|
||||
**************************************************************************/
|
||||
// 저장
|
||||
$P.fnSave = () => {
|
||||
// validate 확인
|
||||
if (!customValidate($("#frmEdit--${pageName}").find("input, select, textarea"))) return;
|
||||
|
||||
dialog.alert({
|
||||
content: "현재 " + $P.control.prefixName + " 정보를 저장하시겠습니까?"
|
||||
, init: () => { setDialogZindex(); }
|
||||
, onOK: () => {
|
||||
$P.control.save($P.formFields.get()); // formFields
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 초기 셋팅
|
||||
**************************************************************************/
|
||||
// 이벤트 설정
|
||||
$P.setEvent = () => {
|
||||
// 버튼 이벤트
|
||||
$("#btnSave--${pageName}").on("click", () => $P.fnSave()); // 저장
|
||||
}
|
||||
|
||||
// 초기 화면 설정
|
||||
$P.initForm = () => {
|
||||
//
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 최초 실행 함수
|
||||
**************************************************************************/
|
||||
// 1. 이벤트 설정
|
||||
$P.setEvent();
|
||||
|
||||
// 2. 초기 화면 설정
|
||||
$P.initForm();
|
||||
|
||||
// 3. Dataset 설정
|
||||
$P.control.setData([${opnnDlbrMbrInfo}]);
|
||||
});
|
||||
|
||||
</script>
|
||||
@ -1,602 +0,0 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
|
||||
<c:set var="prefixName" scope="request">단속 재등록 관리</c:set>
|
||||
|
||||
<!-- inner page html -->
|
||||
<div class="content-wrapper">
|
||||
<!-- Content -->
|
||||
<div class="container-xxl flex-grow-1 px-0">
|
||||
<div class="card wrapper-list">
|
||||
<!-- 상단 버튼 -->
|
||||
<div class="container-page-btn">
|
||||
<button type="button" class="btn btn-outline-dark w-px-120" id="btnReset--${pageName}" title="초기화">
|
||||
초기화
|
||||
</button>
|
||||
<span class="container-window-btn-right">
|
||||
<button type="button" class="btn btn-search w-px-120" id="btnSearch--${pageName}" title="검색">
|
||||
검색
|
||||
</button>
|
||||
<button type="button" class="btn btn-excel w-px-120" id="btnExcel--${pageName}" title="엑셀">
|
||||
엑셀
|
||||
</button>
|
||||
</span>
|
||||
</div>
|
||||
<!-- 상단 버튼 -->
|
||||
|
||||
<!-- 검색 조건 영역 -->
|
||||
<form id="frmSearch--${pageName}" name="frmSearch">
|
||||
<!-- hidden -->
|
||||
<input type="hidden" id="sggCd--${pageName}" name="sggCd" />
|
||||
|
||||
<!-- 메인 조건 -->
|
||||
<div class="container-search">
|
||||
<div class="row g-1">
|
||||
<!-- 업무구분 -->
|
||||
<div class="col-12">
|
||||
<span class="form-label fw-bold form-search-title text-end">업무구분</span>
|
||||
<span class="form-search-linebox">
|
||||
<c:forEach items="${taskListForSgg}" var="item">
|
||||
<label>
|
||||
<input type="radio" class="form-check-input" name="taskSeCd" alt="업무구분"
|
||||
value="${item.code}" onchange="pageObject['${pageName}'].fnResetAndChangeBiz(this.value);">
|
||||
${item.value}
|
||||
</label>
|
||||
</c:forEach>
|
||||
</span>
|
||||
</div>
|
||||
<!-- 재등록일자 -->
|
||||
<div class="col-6">
|
||||
<label class="form-label fw-bold form-search-title w-px-120 text-end" for="schReRegYmdFrom--${pageName}">재등록일자</label>
|
||||
<span class="form-search-linebox">
|
||||
<input type="text" class="form-control form-date" id="schReRegYmdFrom--${pageName}" name="schReRegYmdFrom"
|
||||
data-fmt-type="day" title="시작 날짜 선택" />
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
~
|
||||
<input type="text" class="form-control form-date" id="schReRegYmdTo--${pageName}" name="schReRegYmdTo"
|
||||
data-fmt-type="day" title="종료 날짜 선택" />
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
</span>
|
||||
</div>
|
||||
<!-- 동적검색 -->
|
||||
<div class="col-6">
|
||||
<input type="hidden" id="by--${pageName}" name="by" />
|
||||
<input type="text" class="form-control fw-bold w-px-120 text-end" id="byOutput--${pageName}" value="동적 검색" readonly />
|
||||
<input type="hidden" id="mainOption--${pageName}" name="mainOption" />
|
||||
<input type="hidden" id="subOption--${pageName}" name="subOption" />
|
||||
<input type="text" class="form-control w-px-400" id="term--${pageName}" name="term" autocomplete="off" />
|
||||
<!-- 상세 검색조건 버튼 -->
|
||||
<span class="flr">
|
||||
<button type="button" class="btn btn-open-detail" data-bs-toggle="collapse" data-bs-target="#searchDetail--${pageName}">
|
||||
<i class="bx bx-chevron-down"></i>
|
||||
상세검색
|
||||
</button>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div> <!-- 메인 조건 -->
|
||||
|
||||
<!-- 상세 조건 -->
|
||||
<div id="searchDetail--${pageName}" class="container-search container-search-detail collapse">
|
||||
<div class="row g-1">
|
||||
<!-- 단속일자 -->
|
||||
<div class="col-4">
|
||||
<label class="form-label fw-bold form-search-title w-px-120 text-end" for="schCrdnYmdFrom--${pageName}">단속일자</label>
|
||||
<span class="form-search-linebox">
|
||||
<input type="text" class="form-control form-date" id="schCrdnYmdFrom--${pageName}" name="schCrdnYmdFrom"
|
||||
data-fmt-type="day" autocomplete="off" title="시작 날짜 선택" />
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
~
|
||||
<input type="text" class="form-control form-date" id="schCrdnYmdTo--${pageName}" name="schCrdnYmdTo"
|
||||
data-fmt-type="day" autocomplete="off" title="종료 날짜 선택" />
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
</span>
|
||||
</div>
|
||||
<!-- 차량번호 -->
|
||||
<div class="col-4">
|
||||
<label class="form-label fw-bold form-search-title w-px-120 text-end" for="schVhrno--${pageName}">차량번호</label>
|
||||
<input type="text" class="form-control w-px-160" id="schVhrno--${pageName}" name="schVhrno" autocomplete="off" />
|
||||
</div>
|
||||
<!-- 납부자번호 -->
|
||||
<div class="col-4">
|
||||
<label class="form-label fw-bold form-search-title w-px-120 text-end" for="schRtpyrNm--${pageName}">납부자번호</label>
|
||||
<input type="text" class="form-control w-px-160" id="schRtpyrNm--${pageName}" name="schRtpyrNm" autocomplete="off" />
|
||||
</div>
|
||||
<!-- 납부자명 -->
|
||||
<div class="col-4">
|
||||
<label class="form-label fw-bold form-search-title w-px-120 text-end" for="schRtpyrNo--${pageName}">납부자명</label>
|
||||
<input type="text" class="form-control w-px-160" id="schRtpyrNo--${pageName}" name="schRtpyrNo" autocomplete="off" />
|
||||
</div>
|
||||
<!-- 등록일자, 수정일자 -->
|
||||
<div class="col-4">
|
||||
<select class="form-select w-px-120 text-center" id="schRegDateOpt--${pageName}" name="schRegDateOpt">
|
||||
<option value="regDt">등록일자</option>
|
||||
<option value="mdfcnDt">수정일자</option>
|
||||
</select>
|
||||
<span class="form-search-linebox">
|
||||
<input type="text" class="form-control form-date" id="schRegDateFrom--${pageName}" name="schRegDateFrom"
|
||||
data-fmt-type="day" title="시작 날짜 선택" />
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
~
|
||||
<input type="text" class="form-control form-date" id="schRegDateTo--${pageName}" name="schRegDateTo"
|
||||
data-fmt-type="day" title="종료 날짜 선택">
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
</span>
|
||||
</div>
|
||||
<!-- 등록자명, 수정자명 -->
|
||||
<div class="col-4">
|
||||
<select class="form-select w-px-120 text-center" id="schRgtrOpt--${pageName}" name="schRgtrOpt">
|
||||
<option value="rgtr">등록자</option>
|
||||
<option value="mdfr">수정자</option>
|
||||
</select>
|
||||
<input type="hidden" id="schRgtrCd--${pageName}" name="schRgtrCd" />
|
||||
<input type="text" class="form-control w-px-160" id="schRgtrNm--${pageName}" name="schRgtrNm" />
|
||||
<button type="button" class="btn btn-sm btn-outline-dark" id="btnFindUser--${pageName}" title="사용자 검색">검색</button>
|
||||
</div>
|
||||
</div>
|
||||
</div> <!-- 상세 조건 -->
|
||||
</form>
|
||||
<!-- 검색 조건 영역 -->
|
||||
|
||||
<!-- 업무 버튼 및 건수 표시 -->
|
||||
<div>
|
||||
<span class="container-page-btn">
|
||||
<!-- 건수, 페이지 표시 -->
|
||||
<div class="d-flex flex-row justify-content-between">
|
||||
<span class="dataTables_info" id="paging--${pageName}PagingInfo" role="status" aria-live="polite"></span>
|
||||
<ul class="pagination pagination-primary" id="paging--${pageName}">
|
||||
</ul>
|
||||
</div>
|
||||
<!-- 업무 버튼 -->
|
||||
<span class="container-window-btn-right">
|
||||
<button type="button" class="btn btn-primary w-px-120" id="btnBfrCrdnTotalInfo--${pageName}" title="이전 단속 정보">
|
||||
이전 단속 정보
|
||||
</button>
|
||||
</span>
|
||||
</span>
|
||||
</div>
|
||||
<!-- 업무 버튼 및 건수 표시 -->
|
||||
|
||||
<!-- DataTables(그리드) -->
|
||||
<div class="card-datatable text-nowrap">
|
||||
<div class="dataTables_wrapper dt-bootstrap5 no-footer" id="DataTables_Table_0_wrapper--${pageName}">
|
||||
<div class="table-responsive ox-scroll oy-scroll h-px-500" id="table-responsive--${pageName}">
|
||||
<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">
|
||||
<tr id="theadTr--${pageName}"
|
||||
data-by="by--${pageName}" data-by-output="byOutput--${pageName}" data-main-option="mainOption--${pageName}" data-sub-option="subOption--${pageName}">
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="tbody--${pageName}">
|
||||
</tbody>
|
||||
|
||||
<template id="${infoPrefix}Col--${pageName}">
|
||||
<th class="cmn" style="width: 72px;">No.</th>
|
||||
<th class="cmn" style="width: 160px;">업무구분</th>
|
||||
<th class="cmn" style="width: 120px;" onclick="searchFromGridTitle('RE_REG_YMD', this.innerText, 'ymd', '');">재등록일자</th>
|
||||
<th class="cmn" style="width: 120px;" onclick="searchFromGridTitle('CRDN_REG_SE_CD', this.innerText, 'codeValue', 'FIM026');">단속등록구분</th>
|
||||
<th class="cmn" style="width: 280px;" onclick="searchFromGridTitle('ETC_CN', this.innerText, 'match', 'part');">기타내용</th>
|
||||
<th class="cmn" style="width: 180px;" onclick="searchFromGridTitle('CRDN_YMD', this.innerText, 'ymd', '');">단속일시</th>
|
||||
<th class="cmn" style="width: 160px;" onclick="searchFromGridTitle('VHRNO', this.innerText, 'match', 'part');">차량번호</th>
|
||||
<th class="cmn" style="width: 120px;" onclick="searchFromGridTitle('RTPYR_SE_CD', this.innerText, 'codeValue', 'FIM011');">납부자구분</th>
|
||||
<th class="cmn" style="width: 160px;" onclick="searchFromGridTitle('RTPYR_NO', this.innerText, 'ymd', '');">납부자번호</th>
|
||||
<th class="cmn" style="width: 200px;" onclick="searchFromGridTitle('RTPYR_NM', this.innerText, 'match', 'part');">납부자명</th>
|
||||
<th class="cmn" style="width: 160px;" onclick="searchFromGridTitle('VLTN_ARTCL', this.innerText, 'match', 'part');">위반항목</th>
|
||||
<th class="cmn" style="width: 120px;" onclick="searchFromGridTitle('CRDN_STDG_NM', this.innerText, 'match', 'part');">단속법정동</th>
|
||||
<th class="cmn" style="width: 280px;" onclick="searchFromGridTitle('CRDN_PLC', this.innerText, 'match', 'part');">단속장소</th>
|
||||
<th class="bpv" style="width: 280px;" onclick="searchFromGridTitle('DTL_CRDN_PLC', this.innerText, 'match', 'part');">상세단속장소</th>
|
||||
<th class="cmn" style="width: 120px;" onclick="searchFromGridTitle('FFNLG_CRDN_AMT', this.innerText, 'match', 'part');">단속원금</th>
|
||||
<th class="cmn" style="width: 160px;" onclick="searchFromGridTitle('CRDN_STTS_CD', this.innerText, 'codeValue', 'FIM010');">처리상태</th>
|
||||
<th class="pvs" style="width: 140px;" onclick="searchFromGridTitle('CRDN_SPAREA_CD', this.innerText, 'codeValue', 'FIM007');">단속특별구역</th>
|
||||
<th class="eca" style="width: 140px;" onclick="searchFromGridTitle('USE_FUEL_CD', this.innerText, 'codeValue', 'LVS005');">사용연료</th>
|
||||
<th class="dpv" style="width: 140px;" onclick="searchFromGridTitle('PRK_PSBLTY_RSLT_CD', this.innerText, 'codeValue', 'FIM034');">주차가능여부</th>
|
||||
<th class="cmn" style="width: 100px;" onclick="searchFromGridTitle('ZIP', this.innerText, 'match', 'part');">우편번호</th>
|
||||
<th class="cmn" style="width: 280px;" onclick="searchFromGridTitle('ADDR', this.innerText, 'match', 'part');">주소</th>
|
||||
<th class="cmn" style="width: 320px;" onclick="searchFromGridTitle('DTL_ADDR', this.innerText, 'match', 'part');">상세주소</th>
|
||||
<th class="cmn" style="width: 180px;">등록일시</th>
|
||||
<th class="cmn" style="width: 140px;">등록사용자</th>
|
||||
<th class="cmn dummy-th"></th>
|
||||
</template>
|
||||
<template id="${infoPrefix}Row--${pageName}">
|
||||
<tr data-key="{RE_REG_ID}">
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{ROW_NUM}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{TASK_SE_NM}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{RE_REG_YMD}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{CRDN_REG_SE_NM}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{ETC_CN}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{CRDN_YMD_TM}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{VHRNO}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{RTPYR_SE_NM}</td>
|
||||
<td class="cmn text-center privacy-cell" onclick="{onclick}" ondblclick="{ondblclick}">
|
||||
<span>{RTPYR_NO}</span>
|
||||
<span>*************</span>
|
||||
</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{RTPYR_NM}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{VLTN_ARTCL}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{CRDN_STDG_NM}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{CRDN_PLC}</td>
|
||||
<td class="bpv text-start" onclick="{onclick}" ondblclick="{ondblclick}">{DTL_CRDN_PLC}</td>
|
||||
<td class="cmn text-end" onclick="{onclick}" ondblclick="{ondblclick}">{FFNLG_CRDN_AMT}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{CRDN_STTS_NM}</td>
|
||||
<td class="pvs text-center" onclick="{onclick}" ondblclick="{ondblclick}">{CRDN_SPAREA_NM}</td>
|
||||
<td class="eca text-center" onclick="{onclick}" ondblclick="{ondblclick}">{USE_FUEL_NM}</td>
|
||||
<td class="dpv text-center" onclick="{onclick}" ondblclick="{ondblclick}">{PRK_PSBLTY_RSLT_NM}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{ZIP}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{ADDR}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{DTL_ADDR}</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 dummy-td"></td>
|
||||
</tr>
|
||||
</template>
|
||||
<template id="${infoPrefix}NotFound--${pageName}">
|
||||
<tr class="bpv">
|
||||
<td valign="top" colspan="22" class="dataTables_empty text-center">${prefixName} 정보를 찾지 못했습니다.</td>
|
||||
</tr>
|
||||
<tr class="dpv">
|
||||
<td valign="top" colspan="22" class="dataTables_empty text-center">${prefixName} 정보를 찾지 못했습니다.</td>
|
||||
</tr>
|
||||
<tr class="eca">
|
||||
<td valign="top" colspan="22" class="dataTables_empty text-center">${prefixName} 정보를 찾지 못했습니다.</td>
|
||||
</tr>
|
||||
<tr class="pvs">
|
||||
<td valign="top" colspan="22" class="dataTables_empty text-center">${prefixName} 정보를 찾지 못했습니다.</td>
|
||||
</tr>
|
||||
<tr class="pes">
|
||||
<td valign="top" colspan="22" class="dataTables_empty text-center">${prefixName} 정보를 찾지 못했습니다.</td>
|
||||
</tr>
|
||||
</template>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- DataTables(그리드) -->
|
||||
</div> <!-- <div class="card wrapper-list"> -->
|
||||
</div> <!-- <div class="container-xxl flex-grow-1 px-0"> -->
|
||||
<!-- Content -->
|
||||
|
||||
<div class="content-backdrop fade"></div>
|
||||
</div>
|
||||
<!-- / inner page html <div class="content-wrapper"> -->
|
||||
|
||||
<script>
|
||||
/**************************************************************************
|
||||
* Global Variable
|
||||
**************************************************************************/
|
||||
pageObject["${pageName}"] = {};
|
||||
|
||||
/**************************************************************************
|
||||
* script 진입
|
||||
**************************************************************************/
|
||||
$(document).ready(function() {
|
||||
// pageObject
|
||||
let $P = pageObject["${pageName}"];
|
||||
|
||||
// FormFields
|
||||
$P.formFields = new FimsFormFields("#frmSearch--${pageName}");
|
||||
|
||||
/**************************************************************************
|
||||
* DatasetControl
|
||||
**************************************************************************/
|
||||
$P.control = new DatasetControl({
|
||||
prefix: "crdnReReg"
|
||||
, prefixName: "단속 재등록"
|
||||
, keymapper: info => info ? info.RE_REG_ID : ""
|
||||
, dataGetter: obj => obj.${infoPrefix}List
|
||||
, appendData: true
|
||||
, formats: {
|
||||
RE_REG_YMD: dateFormat
|
||||
, CRDN_YMD_TM: datetimeFormat
|
||||
, FFNLG_CRDN_AMT: numberFormat
|
||||
, REG_DT: datetimeFormat
|
||||
}
|
||||
});
|
||||
// $P.control 설정
|
||||
$P.control.defaultFetchSize = FETCH_XS; // 1 페이지당 조회되는 자료 건수 index.jsp에서 확인 FETCH_XS = 30
|
||||
$P.control.query = { pageNum : 1, fetchSize : $P.control.defaultFetchSize };
|
||||
$P.control.beforeCurrent = null;
|
||||
|
||||
|
||||
/**************************************************************************
|
||||
* DatasetControl 이벤트
|
||||
**************************************************************************/
|
||||
// Dataset 변경 이벤트
|
||||
$P.control.onDatasetChange = (obj, option) => {
|
||||
$P.renderList(obj.${infoPrefix}Total, option);
|
||||
|
||||
$("#paging--${pageName}").setPagingInfo({
|
||||
list: $P.control.dataset
|
||||
, prefix: "paging--${pageName}"
|
||||
, start: obj.${infoPrefix}Start
|
||||
, totalSize: obj.${infoPrefix}Total
|
||||
, fetchSize: obj.${infoPrefix}Fetch
|
||||
, func: "$P.control.load({index})"
|
||||
});
|
||||
|
||||
|
||||
};
|
||||
|
||||
// 현재 선택 자료 변경 이벤트
|
||||
$P.control.onCurrentChange = (item) => {
|
||||
if (!item) return;
|
||||
|
||||
let key = item.data.RE_REG_ID;
|
||||
|
||||
$("#tbody--${pageName}").setCurrentRow(key);
|
||||
};
|
||||
|
||||
/**************************************************************************
|
||||
* DataTables 이벤트
|
||||
**************************************************************************/
|
||||
// DataTables에 click, dbclick 이벤트
|
||||
$P.renderList = (totalSize, option) => {
|
||||
let ${infoPrefix}List = $P.control.dataset;
|
||||
let empty = ${infoPrefix}List.empty;
|
||||
let clsForTask = $("#frmSearch--${pageName} input[name='taskSeCd']:checked").val().toLowerCase(); // 소문자
|
||||
|
||||
// 업무별 DataTables(그리드) tr, td
|
||||
let foundContent = document.getElementById("${infoPrefix}Row--${pageName}").content;
|
||||
let foundTr = $(foundContent).find("tr")[0].cloneNode(false);
|
||||
let foundTds = $(foundContent).find("." + clsForTask + ",.cmn");
|
||||
|
||||
foundTds.each(function() {
|
||||
foundTr.appendChild(this.cloneNode(true));
|
||||
});
|
||||
|
||||
//
|
||||
let replacer = (str, dataItem) => str
|
||||
.replace(/{onclick}/gi, "pageObject['${pageName}'].control.setCurrent('" + dataItem.getValue("RE_REG_ID") + "');")
|
||||
.replace(/{ondblclick}/gi, "pageObject['${pageName}'].getTotalInfo('" + dataItem.getValue("CRDN_ID") + "');");
|
||||
|
||||
let trs = empty ? [document.getElementById("${infoPrefix}NotFound--${pageName}").content.querySelector("." + clsForTask + ",.cmn").outerHTML]
|
||||
: ${infoPrefix}List.inStrings(foundTr.outerHTML, replacer);
|
||||
|
||||
let noMore = (${infoPrefix}List.length >= totalSize);
|
||||
let initScroll = ($P.control.query.pageNum < 2);
|
||||
if(option != null && option.reloaded){
|
||||
initScroll = false;
|
||||
}
|
||||
|
||||
$("#table-responsive--${pageName}")[0].changeContent(trs.join(), initScroll, noMore);
|
||||
|
||||
// 보안모드
|
||||
fn_securityModeToggle($("#securityMode--top").is(":checked"));
|
||||
}
|
||||
|
||||
// DataTables에 스크롤이 맨 밑으로 이동했을 때 이벤트
|
||||
$P.scrollDataList = () => {
|
||||
|
||||
|
||||
$P.control.load($P.control.query.pageNum + 1);
|
||||
}
|
||||
|
||||
// DataTables에 더블 클릭시 개별총정보 dialog
|
||||
$P.getTotalInfo = (crdnId, callSection) => {
|
||||
if (typeof crdnId == "undefined" || crdnId == null || crdnId == "") return;
|
||||
|
||||
let callControlName = "";
|
||||
if (typeof callSection == "undefined" || callSection == null || callSection == "") {
|
||||
callControlName = "pageObject['${pageName}'].control";
|
||||
} else {
|
||||
callControlName = callSection;
|
||||
}
|
||||
|
||||
let params = {
|
||||
callControlName: callControlName
|
||||
, sggCd: $P.control.dataset.getValue("SGG_CD")
|
||||
, taskSeCd: $P.control.dataset.getValue("TASK_SE_CD")
|
||||
, crdnId: crdnId
|
||||
}
|
||||
|
||||
ajax.get({
|
||||
url: wctx.url("/sprt/sprt02/010/main.do")
|
||||
, data: params
|
||||
, success: resp => {
|
||||
dialog.open({
|
||||
id: "totalInfoMainDialog"
|
||||
, title: "개별총정보"
|
||||
, content: resp
|
||||
, size: "xxl"
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 사용자 함수(function)
|
||||
**************************************************************************/
|
||||
// 검색 자료 재조회
|
||||
$P.fnRefreshList = () => {
|
||||
$P.control.reload({all : true});
|
||||
}
|
||||
|
||||
// 사용자검색 callback
|
||||
$P.callbackFindUser = (userId, userNm) => {
|
||||
$("#schRgtrCd--${pageName}").val(userId); // 사용자 ID
|
||||
$("#schRgtrNm--${pageName}").val(userNm); // 사용자 명
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 버튼 clickEvent
|
||||
**************************************************************************/
|
||||
// 업무 구분 변경
|
||||
$P.fnResetAndChangeBiz = (taskSeCd) => {
|
||||
// 업무 구분 코드
|
||||
if (typeof taskSeCd == "undefined" || taskSeCd == null || taskSeCd == "") {
|
||||
taskSeCd = $("#layout-navbar input[name='taskSeCd']:checked").val();
|
||||
}
|
||||
|
||||
// 초기 기본 설정
|
||||
$P.initForm(taskSeCd);
|
||||
// 업무 구분별 설정
|
||||
$P.setTask(taskSeCd);
|
||||
|
||||
// dataset 초기화
|
||||
$P.control.dataset.clear();
|
||||
}
|
||||
|
||||
// 사용자검색 버튼 클릭 이벤트
|
||||
$P.fnGetFindUser = () => {
|
||||
let params = {
|
||||
openerPageName: "${pageName}"
|
||||
, callbackFuncName: "pageObject['${pageName}']['callbackFindUser']"
|
||||
}
|
||||
|
||||
ajax.get({
|
||||
url: wctx.url("/user/user02/010/main.do") + "?openerPageName=${pageName}"
|
||||
, data: params || {}
|
||||
, success: resp => {
|
||||
dialog.open({
|
||||
id: "userDialog--${pageName}"
|
||||
, title: "사용자 검색"
|
||||
, content: resp
|
||||
, size: "lg"
|
||||
, init: () => { setDialogZindex(); }
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// 검색 버튼 이벤트
|
||||
$P.fnSearchList = () => {
|
||||
// 검색조건
|
||||
$P.control.query = $P.formFields.get(); // 검색 조건
|
||||
$P.control.query.fetchSize = $P.control.defaultFetchSize; // 한번에 조회되는 자료 건수 FETCH_XS = 30
|
||||
$P.control.query.delYn = "N"; // 삭제 여부
|
||||
|
||||
$P.control.load(1);
|
||||
}
|
||||
|
||||
// 엑셀 버튼 이벤트
|
||||
$P.fnExcel = () => {
|
||||
if ($P.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)")
|
||||
, getCellDefsForPrivacyCell);
|
||||
|
||||
$P.control.query.cellDefs = cellDefs;
|
||||
|
||||
$P.control.download();
|
||||
}
|
||||
|
||||
// 이전 단속정보보기 버튼 이벤트
|
||||
$P.fnBfrCrdnTotalInfo = (title) => {
|
||||
let bfrCrdnId = $P.control.dataset.getValue("BFR_CRDN_ID");
|
||||
|
||||
// 이전 단속 ID 가 없다면.. return
|
||||
if (typeof bfrCrdnId == "undefined" || bfrCrdnId == null || bfrCrdnId == "") return;
|
||||
|
||||
// 개별총정보 dialog
|
||||
$P.getTotalInfo(bfrCrdnId, "noControlName");
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 초기 설정
|
||||
**************************************************************************/
|
||||
// 이벤트 설정
|
||||
$P.setEvent = () => {
|
||||
// 기본 버튼 이벤트
|
||||
$("#btnReset--${pageName}").on("click", () => $P.fnResetAndChangeBiz()); // 초기화
|
||||
$("#btnSearch--${pageName}").on("click", () => $P.fnSearchList()); // 검색
|
||||
$("#btnExcel--${pageName}").on("click", () => $P.fnExcel()); // 엑셀
|
||||
$("#btnFindUser--${pageName}").on("click", () => $P.fnGetFindUser()); // 사용자 검색
|
||||
|
||||
// 동적검색에서 엔터(Enter) 키를 누르면 검색한다.
|
||||
$("#term--${pageName}").onEnterPress(function() {
|
||||
$P.fnSearchList();
|
||||
});
|
||||
|
||||
// form-date 항목에서 키보드로 입력시 날짜 포맷팅 적용
|
||||
$("#frmSearch--${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);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// 버튼 이벤트
|
||||
$("#btnBfrCrdnTotalInfo--${pageName}").on("click", function() {
|
||||
$P.fnBfrCrdnTotalInfo($(this).attr("title")); // 이전 단속정보
|
||||
});
|
||||
|
||||
// DataTables width 변경 조정 업무별 그리드가 존재 한다면.. crdn06010-main.jsp 참고
|
||||
fnMakeResizableTable($("#table-responsive--${pageName}")[0]);
|
||||
|
||||
// DataTables 스크롤 이벤트 생성
|
||||
fnMakeScrollableTable($("#table-responsive--${pageName}")[0], $P.scrollDataList);
|
||||
}
|
||||
|
||||
// 초기 화면 설정
|
||||
$P.initForm = (taskSeCd) => {
|
||||
// 화면 초기화
|
||||
$("#frmSearch--${pageName}")[0].reset();
|
||||
|
||||
// input, select 초기화
|
||||
let searchForm = $("#frmSearch--${pageName}");
|
||||
searchForm.find("input[type='radio']").not("[name='taskSeCd']").prop("checked", false);
|
||||
searchForm.find("input[type='checkbox']").prop("checked", false);
|
||||
searchForm.find("input[type='text']").val("");
|
||||
searchForm.find("input[type='hidden']").val("");
|
||||
searchForm.find("select").each(function() { $(this).find("option:eq(0)").prop("selected", true); });
|
||||
|
||||
// 최고 관리자 경우 업무구분을 선택할 수 있도록 하자.
|
||||
$("#frmSearch--${pageName} input[name='taskSeCd']").each(function(i) {
|
||||
$(this).prop("disabled", "true");
|
||||
});
|
||||
|
||||
// 기본 데이터 설정
|
||||
$("#sggCd--${pageName}").val("${sggCd}"); // 시군구 코드
|
||||
$("#frmSearch--${pageName} input[name='taskSeCd'][value='" + taskSeCd + "']").prop("checked", true); // 업무 구분 코드
|
||||
initDatepicker("frmSearch--${pageName}"); // 달력 초기화
|
||||
$("#schReRegYmdFrom--${pageName}").datepicker("setDate", DateUtil.getDateDay(-7).date); // 재등록 일자 시작
|
||||
$("#schReRegYmdTo--${pageName}").datepicker("setDate", new Date()); // 재등록 일자 종료
|
||||
$("#byOutput--${pageName}").val("동적 검색"); // 동적 검색
|
||||
$("#schRgtrNm--${pageName}").prop("readonly", true); // 사용자 이름
|
||||
}
|
||||
|
||||
// 업무 구분별 설정
|
||||
$P.setTask = (taskSeCd) => {
|
||||
// 업무구분에 따른 URL 설정
|
||||
$P.control.urls.load = wctx.url("/" + taskSeCd + "${infoPrefixUrl}" + "/010/list.do"); // 검색
|
||||
|
||||
// 업무별 조회조건
|
||||
renderForTask("frmSearch--${pageName}", taskSeCd.toLowerCase());
|
||||
|
||||
// 업무별 그리드 th
|
||||
let colContent = document.getElementById("${infoPrefix}Col--${pageName}").content;
|
||||
let cols = $(colContent).find("." + taskSeCd.toLowerCase() + ",.cmn");
|
||||
let colsOuterHTML = "";
|
||||
|
||||
cols.each(function() {
|
||||
colsOuterHTML += this.outerHTML;
|
||||
});
|
||||
$("#table-responsive--${pageName}")[0].changeColumn(colsOuterHTML);
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 최초 실행 함수
|
||||
**************************************************************************/
|
||||
// 1. 이벤트 설정
|
||||
$P.setEvent();
|
||||
|
||||
// 2. 초기 설정 및 업무 구분 변경
|
||||
$P.fnResetAndChangeBiz($("#layout-navbar input[name='taskSeCd']:checked").val());
|
||||
|
||||
// 3. 보안모드
|
||||
fn_securityModeToggle($("#securityMode--top").is(":checked"));
|
||||
});
|
||||
|
||||
</script>
|
||||
@ -1,247 +0,0 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
|
||||
<c:set var="prefixName" scope="request">사전감경 부과 대상 정보</c:set>
|
||||
|
||||
<!-- inner page html -->
|
||||
<div class="content-pop">
|
||||
<!-- Content -->
|
||||
<div class="container flex-grow-1 px-0">
|
||||
<div class="card">
|
||||
<!-- 입력 영역 -->
|
||||
<form id="frmEdit--${pageName}" name="frmEdit">
|
||||
<!-- hidden -->
|
||||
<input type="hidden" id="sggCd--${pageName}" name="sggCd" data-map="SGG_CD" />
|
||||
<input type="hidden" id="taskSeCd--${pageName}" name="taskSeCd" data-map="TASK_SE_CD" />
|
||||
<input type="hidden" id="advntceDayCnt--${pageName}" name="advntceDayCnt" data-map="ADVNTCE_DAY_CNT" />
|
||||
|
||||
<div class="row g-1">
|
||||
<!-- 총건수 -->
|
||||
<div class="col-md-12">
|
||||
<label for="tnocs--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">총 건수/금액</label>
|
||||
<input type="text" class="form-control w-px-60 text-end" id="tnocs--${pageName}" name="tnocs" data-map="TNOCS" />
|
||||
<input type="text" class="form-control w-px-120 text-end" id="gramtFfnlgAmt--${pageName}" name="gramtFfnlgAmt" data-map="GRAMT_FFNLG_AMT" />
|
||||
</div>
|
||||
<!-- 감경 율 -->
|
||||
<div class="col-md-12">
|
||||
<label for="advntceRdcrt--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end required">감경율</label>
|
||||
<input type="text" class="form-control w-px-40 fw-bold text-end" id="advntceRdcrt--${pageName}" name="advntceRdcrt" data-map="ADVNTCE_RDCRT" /> %
|
||||
</div>
|
||||
<!-- 감경 부과 금액 -->
|
||||
<div class="col-md-12">
|
||||
<label for="gramtAdvntceAmt--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end required">감경부과금액</label>
|
||||
<input type="text" class="form-control w-px-120 fw-bold text-red text-end" id="gramtAdvntceAmt--${pageName}" name="gramtAdvntceAmt" data-map="GRAMT_ADVNTCE_AMT" />
|
||||
</div>
|
||||
<!-- 회계연도 -->
|
||||
<div class="col-md-12">
|
||||
<label for="fyr--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end required">회계연도</label>
|
||||
<input type="text" class="form-control w-px-60" id="fyr--${pageName}" name="fyr" data-map="FYR" autocomplete="off" required />
|
||||
</div>
|
||||
<!-- 부과 일자 -->
|
||||
<div class="col-md-12">
|
||||
<label for="levyYmd--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end required">부과일자</label>
|
||||
<input type="text" class="form-control form-date" id="levyYmd--${pageName}" name="levyYmd" data-map="LEVY_YMD"
|
||||
data-fmt-type="day" autocomplete="off" title="날짜 선택" maxlength="10" required />
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white" id="btnLevyYmd--${pageName}"></button>
|
||||
</div>
|
||||
<!-- 납기 일자 -->
|
||||
<div class="col-md-12">
|
||||
<label for="dudtYmd--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end required">납기일자</label>
|
||||
<input type="text" class="form-control form-date" id="dudtYmd--${pageName}" name="dudtYmd" data-map="DUDT_YMD"
|
||||
data-fmt-type="day" autocomplete="off" title="날짜 선택" maxlength="10" required />
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white" id="btnDudtYmd--${pageName}"></button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<!-- 입력 영역 -->
|
||||
|
||||
<!-- 업무 버튼 및 건수 표시 -->
|
||||
<div>
|
||||
<span class="container-page-btn">
|
||||
<!-- 업무 버튼 -->
|
||||
<span class="container-window-btn-right">
|
||||
<button type="button" class="btn btn-primary w-px-80" id="btnSave--${pageName}" title="저장">
|
||||
저장
|
||||
</button>
|
||||
</span>
|
||||
</span>
|
||||
</div>
|
||||
<!-- 업무 버튼 및 건수 표시 -->
|
||||
</div> <!-- <div class="card"> -->
|
||||
</div> <!-- <div class="container flex-grow-1 px-0"> -->
|
||||
<!-- Content -->
|
||||
</div>
|
||||
<!-- / inner page html <div class="content-pop"> -->
|
||||
|
||||
<script>
|
||||
/**************************************************************************
|
||||
* Global Variable
|
||||
**************************************************************************/
|
||||
pageObject["${pageName}"] = {};
|
||||
|
||||
/**************************************************************************
|
||||
* script 진입
|
||||
**************************************************************************/
|
||||
$(document).ready(function() {
|
||||
// pageObject
|
||||
let $P = pageObject["${pageName}"];
|
||||
|
||||
// infoDialog 호출 용도(view 조회(편집불가), create 등록, update 수정)
|
||||
$P.callPurpose = "${callPurpose}";
|
||||
// FormFields
|
||||
$P.formFields = new FimsFormFields("#frmEdit--${pageName}");
|
||||
// main 의 검색 조건을 그대로 유지
|
||||
$P.mainQuery = ${mainQuery};
|
||||
|
||||
/**************************************************************************
|
||||
* DatasetControl
|
||||
**************************************************************************/
|
||||
$P.control = new DatasetControl({
|
||||
prefix: "rdctLevyTrgt"
|
||||
, prefixName: "감경부과"
|
||||
, keymapper: info => info ? info.CRDN_ID : ""
|
||||
, dataGetter: obj => obj.${infoPrefix}Info
|
||||
, formats: {
|
||||
TNOCS: numberFormat
|
||||
, GRAMT_FFNLG_AMT: numberFormat
|
||||
, GRAMT_ADVNTCE_AMT: numberFormat
|
||||
}
|
||||
});
|
||||
|
||||
/**************************************************************************
|
||||
* DatasetControl 이벤트
|
||||
**************************************************************************/
|
||||
// 현재 선택 자료 변경 이벤트
|
||||
$P.control.onCurrentChange = item => {
|
||||
if (!item) return;
|
||||
|
||||
// Dataset 셋팅
|
||||
$P.formFields.set($P.control, item);
|
||||
|
||||
// 업무구분에 따른 URL 변경
|
||||
$P.fnSetURL(item.data.TASK_SE_CD);
|
||||
}
|
||||
|
||||
// 저장 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
|
||||
, init: () => { setDialogZindex(); }
|
||||
, onOK: () => { }
|
||||
});
|
||||
|
||||
if (resp.saved) {
|
||||
dialog.close($P.control.prefix + "Dialog--${openerPageName}");
|
||||
}
|
||||
}
|
||||
|
||||
// 저장
|
||||
$P.control.save = (info) => {
|
||||
if (!info) return;
|
||||
|
||||
ajax.post({
|
||||
url: $P.control.urls.create
|
||||
, data: params || {}
|
||||
, success: resp => $P.control.onSave(resp)
|
||||
});
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 사용자 함수(function)
|
||||
**************************************************************************/
|
||||
// 업무구분에 따른 URL 설정
|
||||
$P.fnSetURL = (taskSeCd) => {
|
||||
$P.control.urls.create = wctx.url("/" + taskSeCd + "${infoPrefixUrl}" + "/020/createRdctLevyList.do"); // 등록
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 버튼 clickEvent
|
||||
**************************************************************************/
|
||||
// 저장 버튼 클릭 이벤트
|
||||
$P.fnSave = () => {
|
||||
// validate 확인
|
||||
if (!customValidate($("#frmEdit--${pageName}").find("input, select, textarea"))) return;
|
||||
|
||||
// 메인에서 받은 검색 조건과 객체를 합친다.
|
||||
let params = $.extend({}, $P.mainQuery, $P.formFields.get());
|
||||
|
||||
dialog.alert({
|
||||
content: "현재 " + $P.control.prefixName + " 정보를 저장하시겠습니까?"
|
||||
, init: () => { setDialogZindex(); }
|
||||
, onOK: () => {
|
||||
$P.control.save(params); // 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);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// 부과 일자 변경 이벤트
|
||||
$("#levyYmd--${pageName}").on("change", function() {
|
||||
let levyYmd = $("#levyYmd--${pageName}").val();
|
||||
let advntceDayCnt = $("#advntceDayCnt--${pageName}").val();
|
||||
|
||||
$("#dudtYmd--${pageName}").val(addDate(levyYmd, Number(advntceDayCnt)));
|
||||
});
|
||||
|
||||
// 버튼 이벤트
|
||||
$("#btnSave--${pageName}").on("click", () => $P.fnSave()); // 저장
|
||||
}
|
||||
|
||||
// 초기 화면 설정
|
||||
$P.initForm = () => {
|
||||
// 달력 초기화
|
||||
initDatepicker("frmEdit--${pageName}");
|
||||
$("#levyYmd--${pageName}").datepicker("setDate", new Date());
|
||||
$("#dudtYmd--${pageName}").datepicker("setDate", new Date());
|
||||
|
||||
// 화면 활성화 설정
|
||||
$("#tnocs--${pageName}").prop("readonly", true); // 총건수
|
||||
$("#gramtFfnlgAmt--${pageName}").prop("readonly", true); // 총금액
|
||||
$("#advntceRdcrt--${pageName}").prop("readonly", true); // 감경율
|
||||
$("#gramtAdvntceAmt--${pageName}").prop("readonly", true); // 감경 부과금액
|
||||
|
||||
if ($P.callPurpose == "view") {
|
||||
// input 요소들을 disabled
|
||||
$("#frmEdit--${pageName}").find("input,textarea,select").prop("disabled", true);
|
||||
// button 요소들을 disabled
|
||||
$("#btnLevyYmd--${pageName}").prop("disabled", true); // 부과 일자 버튼
|
||||
$("#btnDudtYmd--${pageName}").prop("disabled", true); // 납기 일자 버튼
|
||||
$("#btnSave--${pageName}").prop("disabled", true); // 저장 버튼
|
||||
}
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 최초 실행 함수
|
||||
**************************************************************************/
|
||||
// 1. 이벤트 설정
|
||||
$P.setEvent();
|
||||
|
||||
// 2. 초기 화면 설정
|
||||
$P.initForm();
|
||||
|
||||
// 3. Dataset 설정
|
||||
$P.control.setData([${rdctLevyTrgtInfo}]);
|
||||
});
|
||||
|
||||
</script>
|
||||
@ -1,700 +0,0 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
|
||||
<c:set var="prefixName" scope="request">부과 관리</c:set>
|
||||
|
||||
<!-- inner page html -->
|
||||
<div class="content-wrapper">
|
||||
<!-- Content -->
|
||||
<div class="container-xxl flex-grow-1 px-0">
|
||||
<div class="card wrapper-list">
|
||||
<!-- 상단 버튼 -->
|
||||
<div class="container-page-btn">
|
||||
<button type="button" class="btn btn-outline-dark w-px-120" id="btnReset--${pageName}" title="초기화">
|
||||
초기화
|
||||
</button>
|
||||
<span class="container-window-btn-right">
|
||||
<button type="button" class="btn btn-search w-px-120" id="btnSearch--${pageName}" title="검색">
|
||||
검색
|
||||
</button>
|
||||
<button type="button" class="btn btn-excel w-px-120" id="btnExcel--${pageName}" title="엑셀">
|
||||
엑셀
|
||||
</button>
|
||||
</span>
|
||||
</div>
|
||||
<!-- 상단 버튼 -->
|
||||
|
||||
<!-- 검색 조건 영역 -->
|
||||
<form id="frmSearch--${pageName}" name="frmSearch">
|
||||
<!-- hidden -->
|
||||
<input type="hidden" id="sggCd--${pageName}" name="sggCd" />
|
||||
|
||||
<!-- 메인 조건 -->
|
||||
<div class="container-search">
|
||||
<div class="row g-1">
|
||||
<!-- 업무구분 -->
|
||||
<div class="col-12">
|
||||
<span class="form-label fw-bold form-search-title w-px-120 text-end">업무구분</span>
|
||||
<span class="form-search-linebox">
|
||||
<c:forEach items="${taskListForSgg}" var="item">
|
||||
<label>
|
||||
<input type="radio" class="form-check-input" name="taskSeCd" alt="업무구분"
|
||||
value="${item.code}" onchange="pageObject['${pageName}'].fnResetAndChangeBiz(this.value);">
|
||||
${item.value}
|
||||
</label>
|
||||
</c:forEach>
|
||||
</span>
|
||||
</div>
|
||||
<!-- 회계연도 -->
|
||||
<div class="col-6">
|
||||
<label class="form-label fw-bold form-search-title w-px-120 text-end" for="schFyr--${pageName}">회계연도</label>
|
||||
<input type="text" class="form-control w-px-60" id="schFyr--${pageName}" name="schFyr" maxlength="4" autocomplete="off" />
|
||||
</div>
|
||||
<!-- 부과 번호 -->
|
||||
<div class="col-6">
|
||||
<label class="form-label fw-bold form-search-title w-px-120 text-end" for="schLevyNoFrom--${pageName}">부과번호</label>
|
||||
<input type="text" class="form-control w-px-80" id="schLevyNoFrom--${pageName}" name="schLevyNoFrom" maxlength="6" autocomplete="off" />
|
||||
~
|
||||
<input type="text" class="form-control w-px-80" id="schLevyNoTo--${pageName}" name="schLevyNoTo" maxlength="6" autocomplete="off" />
|
||||
</div>
|
||||
<!-- 감경 구분 코드 -->
|
||||
<div class="col-6">
|
||||
<label class="form-label fw-bold form-search-title w-px-120 text-end" for="schRdctSeCd--${pageName}">감경구분</label>
|
||||
<select class="form-select w-px-120" id="schRdctSeCd--${pageName}" name="schRdctSeCd">
|
||||
<option value="">전체</option>
|
||||
<c:forEach items="${FIM046List}" var="item">
|
||||
<option value="${item.code}">${item.value}</option>
|
||||
</c:forEach>
|
||||
</select>
|
||||
</div>
|
||||
<!-- 부과 일자 -->
|
||||
<div class="col-6">
|
||||
<label class="form-label fw-bold form-search-title w-px-120 text-end" for="schLevyYmdFrom--${pageName}">부과일자</label>
|
||||
<span class="form-search-linebox">
|
||||
<input type="text" class="form-control form-date" id="schLevyYmdFrom--${pageName}" name="schLevyYmdFrom"
|
||||
data-fmt-type="day" title="시작 날짜 선택" />
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
~
|
||||
<input type="text" class="form-control form-date" id="schLevyYmdTo--${pageName}" name="schLevyYmdTo"
|
||||
data-fmt-type="day" title="종료 날짜 선택" />
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
</span>
|
||||
</div>
|
||||
<!-- 단속 상태 코드 -->
|
||||
<div class="col-6">
|
||||
<label class="form-label fw-bold form-search-title w-px-120 text-end" for="schCrdnSttsCd--${pageName}">단속상태</label>
|
||||
<select class="form-select w-px-160" id="schCrdnSttsCd--${pageName}" name="schCrdnSttsCd">
|
||||
<option value="">전체</option>
|
||||
<c:forEach items="${FIM010List}" var="item">
|
||||
<option value="${item.code}">${item.value}</option>
|
||||
</c:forEach>
|
||||
</select>
|
||||
</div>
|
||||
<!-- 동적검색 -->
|
||||
<div class="col-6">
|
||||
<input type="hidden" id="by--${pageName}" name="by" />
|
||||
<input type="text" class="form-control fw-bold w-px-120 text-end" id="byOutput--${pageName}" value="동적 검색" readonly />
|
||||
<input type="hidden" id="mainOption--${pageName}" name="mainOption" />
|
||||
<input type="hidden" id="subOption--${pageName}" name="subOption" />
|
||||
<input type="text" class="form-control w-px-400" id="term--${pageName}" name="term" autocomplete="off" />
|
||||
<!-- 상세 검색조건 버튼 -->
|
||||
<span class="flr">
|
||||
<button type="button" class="btn btn-open-detail" data-bs-toggle="collapse" data-bs-target="#searchDetail--${pageName}">
|
||||
<i class="bx bx-chevron-down"></i>
|
||||
상세검색
|
||||
</button>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div> <!-- 메인 조건 -->
|
||||
|
||||
<!-- 상세 조건 -->
|
||||
<div id="searchDetail--${pageName}" class="container-search container-search-detail collapse">
|
||||
<div class="row g-1">
|
||||
<!-- 단속일자 -->
|
||||
<div class="col-4">
|
||||
<label class="form-label fw-bold form-search-title w-px-120 text-end" for="schCrdnYmdFrom--${pageName}">단속일자</label>
|
||||
<span class="form-search-linebox">
|
||||
<input type="text" class="form-control form-date" id="schCrdnYmdFrom--${pageName}" name="schCrdnYmdFrom"
|
||||
data-fmt-type="day" autocomplete="off" title="시작 날짜 선택" />
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
~
|
||||
<input type="text" class="form-control form-date" id="schCrdnYmdTo--${pageName}" name="schCrdnYmdTo"
|
||||
data-fmt-type="day" autocomplete="off" title="종료 날짜 선택" />
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
</span>
|
||||
</div>
|
||||
<!-- 차량번호 -->
|
||||
<div class="col-4">
|
||||
<label class="form-label fw-bold form-search-title w-px-120 text-end" for="schVhrno--${pageName}">차량번호</label>
|
||||
<input type="text" class="form-control w-px-160" id="schVhrno--${pageName}" name="schVhrno" autocomplete="off" />
|
||||
</div>
|
||||
<!-- 납부자번호 -->
|
||||
<div class="col-4">
|
||||
<label class="form-label fw-bold form-search-title w-px-120 text-end" for="schRtpyrNm--${pageName}">납부자번호</label>
|
||||
<input type="text" class="form-control w-px-160" id="schRtpyrNm--${pageName}" name="schRtpyrNm" autocomplete="off" />
|
||||
</div>
|
||||
<!-- 납부자명 -->
|
||||
<div class="col-4">
|
||||
<label class="form-label fw-bold form-search-title w-px-120 text-end" for="schRtpyrNo--${pageName}">납부자명</label>
|
||||
<input type="text" class="form-control w-px-160" id="schRtpyrNo--${pageName}" name="schRtpyrNo" autocomplete="off" />
|
||||
</div>
|
||||
<!-- 등록일자, 수정일자 -->
|
||||
<div class="col-4">
|
||||
<select class="form-select w-px-120 text-center" id="schRegDateOpt--${pageName}" name="schRegDateOpt">
|
||||
<option value="regDt">등록일자</option>
|
||||
<option value="mdfcnDt">수정일자</option>
|
||||
</select>
|
||||
<span class="form-search-linebox">
|
||||
<input type="text" class="form-control form-date" id="schRegDateFrom--${pageName}" name="schRegDateFrom"
|
||||
data-fmt-type="day" title="시작 날짜 선택" />
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
~
|
||||
<input type="text" class="form-control form-date" id="schRegDateTo--${pageName}" name="schRegDateTo"
|
||||
data-fmt-type="day" title="종료 날짜 선택">
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
</span>
|
||||
</div>
|
||||
<!-- 등록자명, 수정자명 -->
|
||||
<div class="col-4">
|
||||
<select class="form-select w-px-120 text-center" id="schRgtrOpt--${pageName}" name="schRgtrOpt">
|
||||
<option value="rgtr">등록자</option>
|
||||
<option value="mdfr">수정자</option>
|
||||
</select>
|
||||
<input type="hidden" id="schRgtrCd--${pageName}" name="schRgtrCd" />
|
||||
<input type="text" class="form-control w-px-160" id="schRgtrNm--${pageName}" name="schRgtrNm" />
|
||||
<button type="button" class="btn btn-sm btn-outline-dark" id="btnFindUser--${pageName}" title="사용자 검색">검색</button>
|
||||
</div>
|
||||
</div>
|
||||
</div> <!-- 상세 조건 -->
|
||||
</form>
|
||||
<!-- 검색 조건 영역 -->
|
||||
|
||||
<!-- 업무 버튼 및 건수 표시 -->
|
||||
<div>
|
||||
<span class="container-page-btn">
|
||||
<!-- 건수, 페이지 표시 -->
|
||||
<div class="d-flex flex-row justify-content-between">
|
||||
<span class="dataTables_info" id="paging--${pageName}PagingInfo" role="status" aria-live="polite"></span>
|
||||
<ul class="pagination pagination-primary" id="paging--${pageName}">
|
||||
</ul>
|
||||
</div>
|
||||
<!-- 업무 버튼 -->
|
||||
<span class="container-window-btn-right">
|
||||
</span>
|
||||
</span>
|
||||
</div>
|
||||
<!-- 업무 버튼 및 건수 표시 -->
|
||||
|
||||
<!-- DataTables(그리드) -->
|
||||
<div class="card-datatable text-nowrap">
|
||||
<div class="dataTables_wrapper dt-bootstrap5 no-footer" id="DataTables_Table_0_wrapper--${pageName}">
|
||||
<div class="table-responsive ox-scroll oy-scroll h-px-400" id="table-responsive--${pageName}">
|
||||
<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">
|
||||
<tr id="theadTr--${pageName}"
|
||||
data-by="by--${pageName}" data-by-output="byOutput--${pageName}" data-main-option="mainOption--${pageName}" data-sub-option="subOption--${pageName}">
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="tbody--${pageName}">
|
||||
</tbody>
|
||||
|
||||
<template id="${infoPrefix}Col--${pageName}">
|
||||
<th class="cmn" style="width: 72px;">No.</th>
|
||||
<th class="cmn" style="width: 56px;"><input type="checkbox" class="form-check-input" id="gridAllCheckbox--${pageName}" onchange="pageObject['${pageName}'].control.select(this.checked);" /></th>
|
||||
<th class="cmn" style="width: 160px;">업무구분</th>
|
||||
<th class="cmn" style="width: 100px;" onclick="searchFromGridTitle('FYR', this.innerText, 'match', 'part');">회계연도</th>
|
||||
<th class="cmn" style="width: 100px;" onclick="searchFromGridTitle('ACNTG_SE_CD', this.innerText, 'codeValue', 'FIM074');">회계코드</th>
|
||||
<th class="cmn" style="width: 100px;" onclick="searchFromGridTitle('TXITM_CD', this.innerText, 'codeValue', 'FIM075');">세목코드</th>
|
||||
<th class="cmn" style="width: 200px;" onclick="searchFromGridTitle('TXITM_CD', this.innerText, 'codeValue', 'FIM075');">세목명</th>
|
||||
<th class="cmn" style="width: 100px;" onclick="searchFromGridTitle('LEVY_NO', this.innerText, 'match', 'part');">부과번호</th>
|
||||
<th class="cmn" style="width: 100px;" onclick="searchFromGridTitle('ISPY_SN', this.innerText, 'match', 'part');">분납순번</th>
|
||||
<th class="cmn" style="width: 100px;" onclick="searchFromGridTitle('LEVY_SE_CD', this.innerText, 'codeValue', 'FIM040');">부과구분</th>
|
||||
<th class="cmn" style="width: 100px;" onclick="searchFromGridTitle('RDCT_SE_CD', this.innerText, 'codeValue', 'FIM046');">감경구분</th>
|
||||
<th class="cmn" style="width: 120px;" onclick="searchFromGridTitle('LEVY_YMD', this.innerText, 'ymd', '');">부과일자</th>
|
||||
<th class="cmn" style="width: 120px;" onclick="searchFromGridTitle('FRST_DUDT_YMD', this.innerText, 'ymd', '');">최초납기일자</th>
|
||||
<th class="cmn" style="width: 120px;" onclick="searchFromGridTitle('DUDT_YMD', this.innerText, 'ymd', '');">납기일자</th>
|
||||
<th class="cmn" style="width: 120px;" onclick="searchFromGridTitle('FFNLG_AMT', this.innerText, 'match', 'part');">과태료금액</th>
|
||||
<th class="cmn" style="width: 120px;" onclick="searchFromGridTitle('LEVY_PCPTAX', this.innerText, 'match', 'part');">부과본세</th>
|
||||
<th class="cmn" style="width: 120px;" onclick="searchFromGridTitle('LEVY_ADAMT', this.innerText, 'match', 'part');">부과가산금</th>
|
||||
<th class="cmn" style="width: 120px;" onclick="searchFromGridTitle('RCVMT_PCPTAX', this.innerText, 'match', 'part');">수납본세</th>
|
||||
<th class="cmn" style="width: 120px;" onclick="searchFromGridTitle('RCVMT_ADAMT', this.innerText, 'match', 'part');">수납가산금</th>
|
||||
<th class="cmn" style="width: 120px;" onclick="searchFromGridTitle('RDAMT_PCPTAX', this.innerText, 'match', 'part');">감액본세</th>
|
||||
<th class="cmn" style="width: 120px;" onclick="searchFromGridTitle('RDAMT_ADAMT', this.innerText, 'match', 'part');">감액가산금</th>
|
||||
<th class="cmn" style="width: 120px;" onclick="searchFromGridTitle('SUM_AMT', this.innerText, 'match', 'part');">미납금액</th>
|
||||
<th class="cmn" style="width: 160px;" onclick="searchFromGridTitle('TXTN_THING', this.innerText, 'match', 'part');">과세물건</th>
|
||||
<th class="cmn" style="width: 240px;" onclick="searchFromGridTitle('NPMNT_RSN_CD', this.innerText, 'codeValue', 'FIM043');">체납사유</th>
|
||||
<th class="cmn" style="width: 120px;" onclick="searchFromGridTitle('RCVMT_YMD', this.innerText, 'ymd', '');">수납일자</th>
|
||||
<th class="cmn" style="width: 120px;" onclick="searchFromGridTitle('SZR_YMD', this.innerText, 'ymd', '');">압류일자</th>
|
||||
<th class="cmn" style="width: 200px;" onclick="searchFromGridTitle('SZR_THING', this.innerText, 'match', 'part');">압류물건</th>
|
||||
<th class="cmn" style="width: 160px;" onclick="searchFromGridTitle('RPM_SZR_VHRNO', this.innerText, 'match', 'part');">대체압류차량</th>
|
||||
<th class="cmn" style="width: 120px;" onclick="searchFromGridTitle('SZR_RMV_YMD', this.innerText, 'match', 'part');">압류해제일자</th>
|
||||
<th class="cmn" style="width: 240px;" onclick="searchFromGridTitle('EPAYNO', this.innerText, 'match', 'part');">전자납부번호</th>
|
||||
<th class="cmn" style="width: 160px;" onclick="searchFromGridTitle('BANK_NM', this.innerText, 'match', 'part');">은행명</th>
|
||||
<th class="cmn" style="width: 200px;" onclick="searchFromGridTitle('VR_ACTNO', this.innerText, 'match', 'part');">가상계좌번호</th>
|
||||
<th class="cmn" style="width: 180px;" onclick="searchFromGridTitle('CRDN_YMD', this.innerText, 'ymd', '');">단속일시</th>
|
||||
<th class="cmn" style="width: 140px;" onclick="searchFromGridTitle('VHRNO', this.innerText, 'match', 'part');">차량번호</th>
|
||||
<th class="cmn" style="width: 160px;" onclick="searchFromGridTitle('CRDN_STDG_NM', this.innerText, 'match', 'part');">법정동</th>
|
||||
<th class="cmn" style="width: 280px;" onclick="searchFromGridTitle('CRDN_PLC', this.innerText, 'match', 'part');">단속장소</th>
|
||||
<th class="cmn" style="width: 160px;" onclick="searchFromGridTitle('VLTN_ARTCL', this.innerText, 'match', 'part');">위반항목</th>
|
||||
<th class="cmn" style="width: 120px;" onclick="searchFromGridTitle('FFNLG_CRDN_AMT', this.innerText, 'match', 'part');">단속원금</th>
|
||||
<th class="cmn" style="width: 160px;" onclick="searchFromGridTitle('CRDN_STTS_CD', this.innerText, 'codeValue', 'FIM010');">처리상태</th>
|
||||
<th class="cmn" style="width: 120px;" onclick="searchFromGridTitle('RTPYR_SE_CD', this.innerText, 'codeValue', 'FIM011');">납부자구분</th>
|
||||
<th class="cmn" style="width: 160px;" onclick="searchFromGridTitle('RTPYR_NO', this.innerText, 'ymd', '');">납부자번호</th>
|
||||
<th class="cmn" style="width: 200px;" onclick="searchFromGridTitle('RTPYR_NM', this.innerText, 'match', 'part');">납부자명</th>
|
||||
<th class="cmn" style="width: 100px;" onclick="searchFromGridTitle('ZIP', this.innerText, 'match', 'part');">우편번호</th>
|
||||
<th class="cmn" style="width: 240px;" onclick="searchFromGridTitle('ADDR', this.innerText, 'match', 'part');">주소</th>
|
||||
<th class="cmn" style="width: 340px;" onclick="searchFromGridTitle('DTL_ADDR', this.innerText, 'match', 'part');">상세주소</th>
|
||||
<th class="cmn" style="width: 180px;">등록일시</th>
|
||||
<th class="cmn" style="width: 140px;">등록사용자</th>
|
||||
<th class="cmn" style="width: 180px;">수정일시</th>
|
||||
<th class="cmn" style="width: 140px;">수정사용자</th>
|
||||
<th class="cmn dummy-th"></th>
|
||||
</template>
|
||||
<template id="${infoPrefix}Row--${pageName}">
|
||||
<tr data-key="{LEVY_ID}">
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{ROW_NUM}</td>
|
||||
<td class="cmn text-center"><input type="checkbox" class="form-check-input" name="gridCheckbox" value="{LEVY_ID}" onchange="pageObject['${pageName}'].control.select('{LEVY_ID}', this.checked);" /></td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{TASK_SE_NM}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{FYR}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{ACNTG_SE_CD}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{TXITM_CD}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{TXITM_NM}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{LEVY_NO}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{ISPY_SN}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{LEVY_SE_NM}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{RDCT_SE_NM}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{LEVY_YMD}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{FRST_DUDT_YMD}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{DUDT_YMD}</td>
|
||||
<td class="cmn text-end" onclick="{onclick}" ondblclick="{ondblclick}">{FFNLG_AMT}</td>
|
||||
<td class="cmn text-end" onclick="{onclick}" ondblclick="{ondblclick}">{LEVY_PCPTAX}</td>
|
||||
<td class="cmn text-end" onclick="{onclick}" ondblclick="{ondblclick}">{LEVY_ADAMT}</td>
|
||||
<td class="cmn text-end" onclick="{onclick}" ondblclick="{ondblclick}">{RCVMT_PCPTAX}</td>
|
||||
<td class="cmn text-end" onclick="{onclick}" ondblclick="{ondblclick}">{RCVMT_ADAMT}</td>
|
||||
<td class="cmn text-end" onclick="{onclick}" ondblclick="{ondblclick}">{RDAMT_PCPTAX}</td>
|
||||
<td class="cmn text-end" onclick="{onclick}" ondblclick="{ondblclick}">{RDAMT_ADAMT}</td>
|
||||
<td class="cmn text-end fw-bold text-red" onclick="{onclick}" ondblclick="{ondblclick}">{SUM_AMT}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{TXTN_THING}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{NPMNT_RSN_NM}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{RCVMT_YMD}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{SZR_YMD}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{SZR_THING}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{RPM_SZR_VHRNO}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{SZR_RMV_YMD}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{EPAYNO_MASK}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{BANK_NM}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{VR_ACTNO}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{CRDN_YMD_TM}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{VHRNO}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{CRDN_STDG_NM}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{CRDN_PLC}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{VLTN_ARTCL}</td>
|
||||
<td class="cmn text-end" onclick="{onclick}" ondblclick="{ondblclick}">{FFNLG_CRDN_AMT}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{CRDN_STTS_NM}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{RTPYR_SE_NM}</td>
|
||||
<td class="cmn text-center privacy-cell" onclick="{onclick}" ondblclick="{ondblclick}">
|
||||
<span>{RTPYR_NO}</span>
|
||||
<span>*************</span>
|
||||
</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{RTPYR_NM}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{ZIP}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{ADDR}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{DTL_ADDR}</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}">{MDFCN_DT}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{MDFR_NM}</td>
|
||||
<td class="cmn dummy-td"></td>
|
||||
</tr>
|
||||
</template>
|
||||
<template id="${infoPrefix}NotFound--${pageName}">
|
||||
<tr class="bpv">
|
||||
<td valign="top" colspan="50" class="dataTables_empty text-center">${prefixName} 정보를 찾지 못했습니다.</td>
|
||||
</tr>
|
||||
<tr class="dpv">
|
||||
<td valign="top" colspan="50" class="dataTables_empty text-center">${prefixName} 정보를 찾지 못했습니다.</td>
|
||||
</tr>
|
||||
<tr class="eca">
|
||||
<td valign="top" colspan="50" class="dataTables_empty text-center">${prefixName} 정보를 찾지 못했습니다.</td>
|
||||
</tr>
|
||||
<tr class="pvs">
|
||||
<td valign="top" colspan="50" class="dataTables_empty text-center">${prefixName} 정보를 찾지 못했습니다.</td>
|
||||
</tr>
|
||||
<tr class="pes">
|
||||
<td valign="top" colspan="50" class="dataTables_empty text-center">${prefixName} 정보를 찾지 못했습니다.</td>
|
||||
</tr>
|
||||
</template>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- DataTables(그리드) -->
|
||||
</div> <!-- <div class="card wrapper-list"> -->
|
||||
</div> <!-- <div class="container-xxl flex-grow-1 px-0"> -->
|
||||
<!-- Content -->
|
||||
|
||||
<div class="content-backdrop fade"></div>
|
||||
</div>
|
||||
<!-- / inner page html <div class="content-wrapper"> -->
|
||||
|
||||
<script>
|
||||
/**************************************************************************
|
||||
* Global Variable
|
||||
**************************************************************************/
|
||||
pageObject["${pageName}"] = {};
|
||||
|
||||
/**************************************************************************
|
||||
* script 진입
|
||||
**************************************************************************/
|
||||
$(document).ready(function() {
|
||||
// pageObject
|
||||
let $P = pageObject["${pageName}"];
|
||||
|
||||
// FormFields
|
||||
$P.formFields = new FimsFormFields("#frmSearch--${pageName}");
|
||||
|
||||
/**************************************************************************
|
||||
* DatasetControl
|
||||
**************************************************************************/
|
||||
$P.control = new DatasetControl({
|
||||
prefix: "levy"
|
||||
, prefixName: "부과"
|
||||
, keymapper: info => info ? info.LEVY_ID : ""
|
||||
, dataGetter: obj => obj.${infoPrefix}List
|
||||
, appendData: true
|
||||
, infoSize: "xl"
|
||||
, formats: {
|
||||
LEVY_YMD: dateFormat
|
||||
, FRST_DUDT_YMD: dateFormat
|
||||
, DUDT_YMD: dateFormat
|
||||
, RCVMT_YMD: dateFormat
|
||||
, SZR_YMD: dateFormat
|
||||
, SZR_RMV_YMD: dateFormat
|
||||
, FFNLG_AMT: numberFormat
|
||||
, LEVY_PCPTAX: numberFormat
|
||||
, LEVY_ADAMT: numberFormat
|
||||
, ISPY_INT: numberFormat
|
||||
, RCVMT_PCPTAX: numberFormat
|
||||
, RCVMT_ADAMT: numberFormat
|
||||
, RDAMT_PCPTAX: numberFormat
|
||||
, RDAMT_ADAMT: numberFormat
|
||||
, SUM_AMT: numberFormat
|
||||
, CRDN_YMD_TM: datetimeFormat
|
||||
, FFNLG_CRDN_AMT: numberFormat
|
||||
, REG_DT: datetimeFormat
|
||||
, MDFCN_DT: datetimeFormat
|
||||
}
|
||||
});
|
||||
// $P.control 설정
|
||||
$P.control.defaultFetchSize = FETCH_XS; // 1 페이지당 조회되는 자료 건수 index.jsp에서 확인 FETCH_XS = 30
|
||||
$P.control.query = { pageNum : 1, fetchSize : $P.control.defaultFetchSize };
|
||||
$P.control.beforeCurrent = null;
|
||||
|
||||
/**************************************************************************
|
||||
* DatasetControl 이벤트
|
||||
**************************************************************************/
|
||||
// Dataset 변경 이벤트
|
||||
$P.control.onDatasetChange = (obj, option) => {
|
||||
$P.renderList(obj.${infoPrefix}Total, option);
|
||||
|
||||
$("#paging--${pageName}").setPagingInfo({
|
||||
list: $P.control.dataset
|
||||
, prefix: "paging--${pageName}"
|
||||
, start: obj.${infoPrefix}Start
|
||||
, totalSize: obj.${infoPrefix}Total
|
||||
, fetchSize: obj.${infoPrefix}Fetch
|
||||
, func: "$P.control.load({index})"
|
||||
});
|
||||
};
|
||||
|
||||
// 현재 선택 자료 변경 이벤트
|
||||
$P.control.onCurrentChange = (item) => {
|
||||
if (!item) return;
|
||||
|
||||
let key = item.data.LEVY_ID;
|
||||
|
||||
$("#tbody--${pageName}").setCurrentRow(key);
|
||||
};
|
||||
|
||||
// 선택(체크) 변경 이벤트
|
||||
$P.control.onSelectionChange = (selected) => {
|
||||
let ${infoPrefix}List = $P.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()));
|
||||
});
|
||||
|
||||
// DataTables(그리드) 전체 선택(checkbox)
|
||||
if (keys.length < 1) {
|
||||
$("#DataTables_Table_0--${pageName} th input[type='checkbox']").prop("checked", false); // 체크 해제
|
||||
} else if (keys.length == ${infoPrefix}List.length) {
|
||||
$("#DataTables_Table_0--${pageName} th input[type='checkbox']").prop("checked", true); // 체크 설정
|
||||
} else {
|
||||
$("#DataTables_Table_0--${pageName} th input[type='checkbox']").prop("checked", false); // 체크 해제
|
||||
}
|
||||
};
|
||||
|
||||
// 상세정보 dialog
|
||||
$P.control.getInfo = (params) => {
|
||||
if (!params) return;
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* DataTables 이벤트
|
||||
**************************************************************************/
|
||||
// DataTables에 click, dbclick 이벤트
|
||||
$P.renderList = (totalSize, option) => {
|
||||
let ${infoPrefix}List = $P.control.dataset;
|
||||
let empty = ${infoPrefix}List.empty;
|
||||
let clsForTask = $("#frmSearch--${pageName} input[name='taskSeCd']:checked").val().toLowerCase(); // 소문자
|
||||
|
||||
// 업무별 DataTables(그리드) tr, td
|
||||
let foundContent = document.getElementById("${infoPrefix}Row--${pageName}").content;
|
||||
let foundTr = $(foundContent).find("tr")[0].cloneNode(false);
|
||||
let foundTds = $(foundContent).find("." + clsForTask + ",.cmn");
|
||||
|
||||
foundTds.each(function() {
|
||||
foundTr.appendChild(this.cloneNode(true));
|
||||
});
|
||||
|
||||
//
|
||||
let replacer = (str, dataItem) => str
|
||||
.replace(/{onclick}/gi, "pageObject['${pageName}'].control.setCurrent('" + dataItem.getValue("LEVY_ID") + "');")
|
||||
.replace(/{ondblclick}/gi, "pageObject['${pageName}'].getTotalInfo('" + dataItem.getValue("CRDN_ID") + "');");
|
||||
|
||||
let trs = empty ? [document.getElementById("${infoPrefix}NotFound--${pageName}").content.querySelector("." + clsForTask + ",.cmn").outerHTML]
|
||||
: ${infoPrefix}List.inStrings(foundTr.outerHTML, replacer);
|
||||
|
||||
let noMore = (${infoPrefix}List.length >= totalSize);
|
||||
let initScroll = ($P.control.query.pageNum < 2);
|
||||
if(option != null && option.reloaded){
|
||||
initScroll = false;
|
||||
}
|
||||
|
||||
$("#table-responsive--${pageName}")[0].changeContent(trs.join(), initScroll, noMore);
|
||||
|
||||
// checkbox 체크 해제
|
||||
$("#DataTables_Table_0--${pageName} th input[type='checkbox']").prop("checked", false);
|
||||
|
||||
// 보안모드
|
||||
fn_securityModeToggle($("#securityMode--top").is(":checked"));
|
||||
}
|
||||
|
||||
// DataTables에 스크롤이 맨 밑으로 이동했을 때 이벤트
|
||||
$P.scrollDataList = () => {
|
||||
|
||||
$P.control.load($P.control.query.pageNum + 1);
|
||||
}
|
||||
|
||||
// DataTables에 더블 클릭시 개별총정보 dialog
|
||||
$P.getTotalInfo = (crdnId) => {
|
||||
if (typeof crdnId == "undefined" || crdnId == null || crdnId == "") return;
|
||||
|
||||
let params = {
|
||||
callControlName: "pageObject['${pageName}'].control"
|
||||
, sggCd: $P.control.dataset.getValue("SGG_CD")
|
||||
, taskSeCd: $P.control.dataset.getValue("TASK_SE_CD")
|
||||
, crdnId: crdnId
|
||||
}
|
||||
|
||||
ajax.get({
|
||||
url: wctx.url("/sprt/sprt02/010/main.do")
|
||||
, data: params
|
||||
, success: resp => {
|
||||
dialog.open({
|
||||
id: "totalInfoMainDialog"
|
||||
, title: "개별총정보"
|
||||
, content: resp
|
||||
, size: "xxl"
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 사용자 함수(function)
|
||||
**************************************************************************/
|
||||
// 검색 자료 재조회
|
||||
$P.fnRefreshList = () => {
|
||||
$P.control.reload({all : true});
|
||||
}
|
||||
|
||||
// callback 사용자 검색
|
||||
$P.callbackFindUser = (userId, userNm) => {
|
||||
$("#schRgtrCd--${pageName}").val(userId); // 사용자 ID
|
||||
$("#schRgtrNm--${pageName}").val(userNm); // 사용자 명
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 버튼 clickEvent
|
||||
**************************************************************************/
|
||||
// 업무 구분 변경
|
||||
$P.fnResetAndChangeBiz = (taskSeCd) => {
|
||||
// 업무 구분 코드
|
||||
if (typeof taskSeCd == "undefined" || taskSeCd == null || taskSeCd == "") {
|
||||
taskSeCd = $("#layout-navbar input[name='taskSeCd']:checked").val();
|
||||
}
|
||||
|
||||
// 초기 기본 설정
|
||||
$P.initForm(taskSeCd);
|
||||
// 업무 구분별 설정
|
||||
$P.setTask(taskSeCd);
|
||||
|
||||
// dataset 초기화
|
||||
$P.control.dataset.clear();
|
||||
}
|
||||
|
||||
// 사용자검색 버튼 클릭 이벤트
|
||||
$P.fnGetFindUser = () => {
|
||||
let params = {
|
||||
openerPageName: "${pageName}"
|
||||
, callbackFuncName: "pageObject['${pageName}']['callbackFindUser']"
|
||||
}
|
||||
|
||||
ajax.get({
|
||||
url: wctx.url("/user/user02/010/main.do") + "?openerPageName=${pageName}"
|
||||
, data: params || {}
|
||||
, success: resp => {
|
||||
dialog.open({
|
||||
id: "userDialog--${pageName}"
|
||||
, title: "사용자 검색"
|
||||
, content: resp
|
||||
, size: "lg"
|
||||
, init: () => { setDialogZindex(); }
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// 검색 버튼 이벤트
|
||||
$P.fnSearchList = () => {
|
||||
// 검색조건
|
||||
$P.control.query = $P.formFields.get(); // 검색 조건
|
||||
$P.control.query.fetchSize = $P.control.defaultFetchSize; // 한번에 조회되는 자료 건수
|
||||
$P.control.query.delYn = "N"; // 삭제 여부
|
||||
|
||||
$P.control.load(1);
|
||||
}
|
||||
|
||||
// 엑셀 버튼 이벤트
|
||||
$P.fnExcel = () => {
|
||||
if ($P.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)")
|
||||
, getCellDefsForPrivacyCell);
|
||||
|
||||
$P.control.query.cellDefs = cellDefs;
|
||||
|
||||
$P.control.download();
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 초기 설정
|
||||
**************************************************************************/
|
||||
// 이벤트
|
||||
$P.setEvent = () => {
|
||||
// 기본 버튼 이벤트
|
||||
$("#btnReset--${pageName}").on("click", () => $P.fnResetAndChangeBiz()); // 초기화
|
||||
$("#btnSearch--${pageName}").on("click", () => $P.fnSearchList()); // 검색
|
||||
$("#btnExcel--${pageName}").on("click", () => $P.fnExcel()); // 엑셀
|
||||
$("#btnFindUser--${pageName}").on("click", () => $P.fnGetFindUser()); // 사용자 검색
|
||||
|
||||
// 동적검색에서 엔터(Enter) 키를 누르면 검색한다.
|
||||
$("#term--${pageName}").onEnterPress(function() {
|
||||
$P.fnSearchList();
|
||||
});
|
||||
|
||||
// form-date 항목에서 키보드로 입력시 날짜 포맷팅 적용
|
||||
$("#frmSearch--${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 변경 조정 업무별 그리드가 존재 한다면.. crdn06010-main.jsp 참고
|
||||
fnMakeResizableTable($("#table-responsive--${pageName}")[0]);
|
||||
|
||||
// DataTables 스크롤 이벤트 생성
|
||||
fnMakeScrollableTable($("#table-responsive--${pageName}")[0], $P.scrollDataList);
|
||||
}
|
||||
|
||||
// 초기 화면 설정
|
||||
$P.initForm = (taskSeCd) => {
|
||||
// 화면 초기화
|
||||
$("#frmSearch--${pageName}")[0].reset();
|
||||
|
||||
// input, select 초기화
|
||||
let searchForm = $("#frmSearch--${pageName}");
|
||||
searchForm.find("input[type='radio']").not("[name='taskSeCd']").prop("checked", false);
|
||||
searchForm.find("input[type='checkbox']").prop("checked", false);
|
||||
searchForm.find("input[type='text']").val("");
|
||||
searchForm.find("input[type='hidden']").val("");
|
||||
searchForm.find("select").each(function() { $(this).find("option:eq(0)").prop("selected", true); });
|
||||
|
||||
// 최고 관리자 경우 업무구분을 선택할 수 있도록 하자.
|
||||
$("#frmSearch--${pageName} input[name='taskSeCd']").each(function(i) {
|
||||
$(this).prop("disabled", "true");
|
||||
});
|
||||
|
||||
// 기본 데이터 설정
|
||||
|
||||
$("#sggCd--${pageName}").val("${sggCd}"); // 시군구 코드
|
||||
$("#frmSearch--${pageName} input[name='taskSeCd'][value='" + taskSeCd + "']").prop("checked", true); // 업무 구분 코드
|
||||
initDatepicker("frmSearch--${pageName}"); // 달력 초기화
|
||||
$("#schFyr--${pageName}").val(new Date().getFullYear()); // 회계 연도
|
||||
$("#schLevyNoFrom--${pageName}").val("000000"); // 부과 번호 시작
|
||||
$("#schLevyNoTo--${pageName}").val("999999"); // 부과 번호 종료
|
||||
$("#byOutput--${pageName}").val("동적 검색"); // 동적 검색
|
||||
$("#schRgtrNm--${pageName}").prop("readonly", true); // 사용자 이름
|
||||
}
|
||||
|
||||
// 업무 구분별 설정
|
||||
$P.setTask = (taskSeCd) => {
|
||||
// 업무구분에 따른 URL 설정
|
||||
$P.control.urls.load = wctx.url("/" + taskSeCd + "${infoPrefixUrl}" + "/050/list.do"); // 검색
|
||||
|
||||
// 업무별 조회조건
|
||||
renderForTask("frmSearch--${pageName}", taskSeCd.toLowerCase());
|
||||
|
||||
// 업무별 그리드 th
|
||||
let colContent = document.getElementById("${infoPrefix}Col--${pageName}").content;
|
||||
let cols = $(colContent).find("." + taskSeCd.toLowerCase() + ",.cmn");
|
||||
let colsOuterHTML = "";
|
||||
|
||||
cols.each(function() {
|
||||
colsOuterHTML += this.outerHTML;
|
||||
});
|
||||
$("#table-responsive--${pageName}")[0].changeColumn(colsOuterHTML);
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 최초 실행 함수
|
||||
**************************************************************************/
|
||||
// 1. 이벤트 설정
|
||||
$P.setEvent();
|
||||
|
||||
// 2. 초기 설정 및 업무 구분 변경
|
||||
$P.fnResetAndChangeBiz($("#layout-navbar input[name='taskSeCd']:checked").val());
|
||||
|
||||
// 3. 보안모드
|
||||
fn_securityModeToggle($("#securityMode--top").is(":checked"));
|
||||
});
|
||||
|
||||
</script>
|
||||
@ -1,259 +0,0 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
|
||||
<c:set var="prefixName" scope="request">과태료 감경 상세 정보</c:set>
|
||||
|
||||
<!-- inner page html -->
|
||||
<div class="content-pop">
|
||||
<!-- Content -->
|
||||
<div class="container flex-grow-1 px-0">
|
||||
<div class="card">
|
||||
<!-- 입력 영역 -->
|
||||
<form id="frmEdit--${pageName}" name="frmEdit">
|
||||
<!-- hidden -->
|
||||
<input type="hidden" id="sggCd--${pageName}" name="sggCd" data-map="SGG_CD" />
|
||||
<input type="hidden" id="taskSeCd--${pageName}" name="taskSeCd" data-map="TASK_SE_CD" />
|
||||
<input type="hidden" id="crdnId--${pageName}" name="crdnId" data-map="CRDN_ID" />
|
||||
<input type="hidden" id="rdctId--${pageName}" name="rdctId" data-map="RDCT_ID" />
|
||||
|
||||
<div class="row g-1">
|
||||
<!-- 납부자 명 -->
|
||||
<div class="col-md-6">
|
||||
<label for="rtpyrNm--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">납부자명</label>
|
||||
<input type="text" class="form-control w-40" id="rtpyrNm--${pageName}" name="rtpyrNm" data-map="RTPYR_NM" />
|
||||
</div>
|
||||
<!-- 납부자 번호 -->
|
||||
<div class="col-md-6">
|
||||
<label for="rtpyrNo--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">납부자번호</label>
|
||||
<input type="text" class="form-control w-30" id="rtpyrNo--${pageName}" name="rtpyrNo" data-map="RTPYR_NO" />
|
||||
</div>
|
||||
<!-- 과태료 단속 금액 -->
|
||||
<div class="col-md-6">
|
||||
<label for="ffnlgCrdnAmt--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">과태료단속원금</label>
|
||||
<input type="text" class="form-control w-20 text-end" id="ffnlgCrdnAmt--${pageName}" name="ffnlgCrdnAmt" data-map="FFNLG_CRDN_AMT" data-fmt-type="number" /> *
|
||||
<input type="text" class="form-control w-10 text-end" id="wksnRdcrt--${pageName}" name="wksnRdcrt" data-map="WKSN_RDCRT" data-fmt-type="number" /> %
|
||||
</div>
|
||||
<!-- 감경 금액 -->
|
||||
<div class="col-md-6">
|
||||
<label for="rdctAmt--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">감경금액</label>
|
||||
<input type="text" class="form-control w-30 text-end" id="rdctAmt--${pageName}" name="rdctAmt" data-map="RDCT_AMT" data-fmt-type="number" />
|
||||
</div>
|
||||
<!-- 감경 일자 -->
|
||||
<div class="col-md-6">
|
||||
<label for="rdctYmd--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end required">감경일자</label>
|
||||
<input type="text" class="form-control form-date" id="rdctYmd--${pageName}" name="rdctYmd" data-map="RDCT_YMD"
|
||||
data-fmt-type="day" title="날짜 선택" maxlength="10" required />
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
</div>
|
||||
<!-- 감경 사유 코드 -->
|
||||
<div class="col-md-6">
|
||||
<label for="rdctRsnCd--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end required">감경사유</label>
|
||||
<select class="form-select" id="rdctRsnCd--${pageName}" name="rdctRsnCd" data-map="RDCT_RSN_CD" required>
|
||||
<c:forEach items="${FIM019List}" var="item">
|
||||
<option value="${item.code}">${item.value}</option>
|
||||
</c:forEach>
|
||||
</select>
|
||||
</div>
|
||||
<!-- 기타 내용 -->
|
||||
<div class="col-md-12">
|
||||
<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-85" id="etcCn--${pageName}" name="etcCn" data-map="ETC_CN" rows="3" data-maxlengthb="1000"></textarea>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<!-- 입력 영역 -->
|
||||
|
||||
<!-- 업무 버튼 및 건수 표시 -->
|
||||
<div>
|
||||
<span class="container-page-btn">
|
||||
<!-- 업무 버튼 -->
|
||||
<span class="container-window-btn-right">
|
||||
<button type="button" class="btn btn-primary w-px-80" id="btnSave--${pageName}" title="저장">
|
||||
저장
|
||||
</button>
|
||||
</span>
|
||||
</span>
|
||||
</div>
|
||||
<!-- 업무 버튼 및 건수 표시 -->
|
||||
</div> <!-- <div class="card"> -->
|
||||
</div> <!-- <div class="container flex-grow-1 px-0"> -->
|
||||
<!-- Content -->
|
||||
</div>
|
||||
<!-- / inner page html <div class="content-pop"> -->
|
||||
|
||||
<script>
|
||||
/**************************************************************************
|
||||
* Global Variable
|
||||
**************************************************************************/
|
||||
pageObject["${pageName}"] = {};
|
||||
|
||||
/**************************************************************************
|
||||
* script 진입
|
||||
**************************************************************************/
|
||||
$(document).ready(function() {
|
||||
// pageObject
|
||||
let $P = pageObject["${pageName}"];
|
||||
|
||||
// infoDialog 호출 용도(view 조회(편집불가), create 등록, update 수정)
|
||||
$P.callPurpose = "${callPurpose}";
|
||||
// FormFields
|
||||
$P.formFields = new FimsFormFields("#frmEdit--${pageName}");
|
||||
|
||||
/**************************************************************************
|
||||
* DatasetControl
|
||||
**************************************************************************/
|
||||
$P.control = new DatasetControl({
|
||||
prefix: "rdct"
|
||||
, prefixName: "감경"
|
||||
, keymapper: info => info ? info.RDCT_ID : ""
|
||||
, dataGetter: obj => obj.${infoPrefix}Info
|
||||
, formats: {
|
||||
FFNLG_CRDN_AMT: numberFormat // 과태료 단속 금액
|
||||
, WKSN_RDCRT: numberFormat // 사회적약자 감경율
|
||||
, RDCT_AMT: numberFormat // 감경 금액
|
||||
}
|
||||
});
|
||||
|
||||
/**************************************************************************
|
||||
* DatasetControl 이벤트
|
||||
**************************************************************************/
|
||||
// 현재 선택 자료 변경 이벤트
|
||||
$P.control.onCurrentChange = (item) => {
|
||||
if (!item) return;
|
||||
|
||||
// Dataset 셋팅
|
||||
$P.formFields.set($P.control,item);
|
||||
|
||||
// 업무구분에 따른 URL 변경
|
||||
$P.fnSetURL(item.data.TASK_SE_CD);
|
||||
}
|
||||
|
||||
// 저장 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
|
||||
, init: () => { setDialogZindex(); }
|
||||
, onOK: () => { }
|
||||
});
|
||||
|
||||
if (resp.saved) {
|
||||
dialog.close($P.control.prefix + "Dialog--${openerPageName}");
|
||||
}
|
||||
}
|
||||
|
||||
// 저장
|
||||
$P.control.save = (info) => {
|
||||
if (!info) return;
|
||||
|
||||
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)
|
||||
});
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 사용자 함수(function)
|
||||
**************************************************************************/
|
||||
// 업무구분에 따른 URL 설정
|
||||
$P.fnSetURL = (taskSeCd) => {
|
||||
$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 (!customValidate($("#frmEdit--${pageName}").find("input, select, textarea"))) return;
|
||||
|
||||
// 감경 사유
|
||||
let rdctRsnCd = $("#rdctRsnCd--${pageName} option:selected").val();
|
||||
let rdctRsnNm = $("#rdctRsnCd--${pageName} option:selected").text();
|
||||
|
||||
// 감경 사유 확인
|
||||
if (rdctRsnCd == "00") {
|
||||
dialog.alert({
|
||||
content : "감경사유가 '" + rdctRsnNm + "' 입니다."
|
||||
+ "</br>" + $P.control.prefixName + " 저장 실행이 취소되었습니다."
|
||||
, onOK : () => { }
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
dialog.alert({
|
||||
content : "현재 " + $P.control.prefixName + " 정보를 저장하시겠습니까?"
|
||||
, init: () => { 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 = () => {
|
||||
// 달력 초기화
|
||||
initDatepicker("frmEdit--${pageName}");
|
||||
$("#rdctYmd--${pageName}").datepicker("setDate", new Date());
|
||||
|
||||
// 화면 활성화 설정
|
||||
$("#rtpyrNm--${pageName}").prop("readonly", true); // 납부자 이름
|
||||
$("#rtpyrNo--${pageName}").prop("readonly", true); // 납부자 번호
|
||||
$("#ffnlgCrdnAmt--${pageName}").prop("readonly", true); // 단속 원금
|
||||
$("#wksnRdcrt--${pageName}").prop("readonly", true); // 감경율
|
||||
$("#rdctAmt--${pageName}").prop("readonly", true); // 감경 금액
|
||||
|
||||
// View로 호출
|
||||
if ($P.callPurpose == "view") {
|
||||
// input 요소들을 disabled
|
||||
$("#frmEdit--${pageName}").find("input,textarea,select").prop("disabled", true);
|
||||
// button 요소들을 disabled
|
||||
$("#rdctYmd--${pageName}").prop("disabled", true); // 감경 일자 달력 버튼
|
||||
$("#btnSave--${pageName}").prop("disabled", true); // 저장 버튼
|
||||
}
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 최초 실행 함수
|
||||
**************************************************************************/
|
||||
// 1. 이벤트 설정
|
||||
$P.setEvent();
|
||||
|
||||
// 2. 초기 화면 설정
|
||||
$P.initForm();
|
||||
|
||||
// 3. Dataset 설정
|
||||
$P.control.setData([${rdctInfo}]);
|
||||
});
|
||||
|
||||
</script>
|
||||
@ -1,311 +0,0 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
<c:set var="pageKorName" scope="request">공지사항 관리</c:set>
|
||||
<div class="content-wrapper">
|
||||
<div class="container-xxl flex-grow-1 px-0">
|
||||
<div class="card wrapper-list">
|
||||
|
||||
<div class="container-page-btn">
|
||||
<button type="button" id="btnReset--${pageName}" class="btn btn-outline-dark w-px-120" title="초기화">
|
||||
초기화
|
||||
</button>
|
||||
<span class="container-window-btn-right">
|
||||
<button type="button" id="btnSearch--${pageName}" class="btn btn-search w-px-120" title="검색">
|
||||
검색
|
||||
</button>
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<form id="frmSearch--${pageName}" name="frmSearch">
|
||||
<div class="container-search">
|
||||
<div class="row g-1">
|
||||
<div class="col-12">
|
||||
<select id="by--${pageName}" name="by" class="form-select">
|
||||
<option value="NTC_TTL">제목</option>
|
||||
<option value="NTC_CN">내용</option>
|
||||
</select>
|
||||
<input type="text" id="term--${pageName}" name="term" class="form-control" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</form>
|
||||
|
||||
<div>
|
||||
<div id="gridbuttonArea--${pageName}" class="container-page-btn">
|
||||
<div class="d-flex flex-row justify-content-between">
|
||||
<span id="ntcPaging--${pageName}PagingInfo" class="dataTables_info" role="status" aria-live="polite"></span>
|
||||
<ul id="ntcPaging--${pageName}" class="pagination pagination-primary">
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<span class="container-window-btn-right">
|
||||
<span>
|
||||
<button type="button" class="btn btn-primary w-px-120"
|
||||
id="btnAdd--${pageName}" title="추가">
|
||||
추가
|
||||
</button>
|
||||
</span>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card-datatable text-nowrap">
|
||||
<div id="DataTables_Table_0_wrapper--${pageName}" class="dataTables_wrapper dt-bootstrap5 no-footer">
|
||||
<div id="table-responsive--${pageName}" class="table-responsive ox-scroll oy-scroll h-px-500">
|
||||
<table id="DataTables_Table_0--${pageName}"
|
||||
class="table-layout-fixed datatables-ajax table table-bordered dataTable no-footer">
|
||||
<thead class="sticky-thead">
|
||||
<tr id="ntcThead--${pageName}">
|
||||
<th style="width: 80px;" class="cmn">No.</th>
|
||||
<th style="width: 180px;">시군구명</th>
|
||||
<th style="width: 800px;">제목</th>
|
||||
<th style="width: 180px;">작성일시</th>
|
||||
<th class="dummy-th"></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="ntcTbody--${pageName}">
|
||||
</tbody>
|
||||
<template id="ntcRow--${pageName}">
|
||||
<tr data-key="{NTC_ID}">
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-end">{ROW_NUM}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-start">{SGG_NM}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-start">{NTC_TTL}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-center">{REG_DT}</td>
|
||||
<td class="dummy-td"></td>
|
||||
</tr>
|
||||
</template>
|
||||
<template id="ntcNotFound--${pageName}">
|
||||
<tr>
|
||||
<td valign="top" colspan="5" class="dataTables_empty text-center">
|
||||
공지사항 정보를 찾지 못했습니다.
|
||||
</td>
|
||||
</tr>
|
||||
</template>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="toast-container position-fixed bottom-0 end-0 p-3">
|
||||
<div id="divToast--${pageName}" class="toast" role="alert" aria-live="assertive" aria-atomic="true">
|
||||
<div class="toast-body bg-black text-white">
|
||||
삭제 되었습니다.
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="content-backdrop fade"></div>
|
||||
</div>
|
||||
|
||||
|
||||
<script>
|
||||
|
||||
/**************************************************************************
|
||||
* Global Variable
|
||||
**************************************************************************/
|
||||
pageObject["${pageName}"] = {};
|
||||
|
||||
|
||||
$(document).ready(function(){
|
||||
|
||||
var $P = pageObject["${pageName}"];
|
||||
|
||||
$P.toast = new bootstrap.Toast(document.getElementById('divToast--${pageName}'), {
|
||||
animation: true,
|
||||
autohide: true,
|
||||
delay: 2000
|
||||
});
|
||||
|
||||
/**************************************************************************
|
||||
* DatasetControl
|
||||
**************************************************************************/
|
||||
$P.ntcControl = new DatasetControl({
|
||||
dataGetter : obj => obj["List"], appendData:true,
|
||||
keymapper : info => info ? info.NTC_ID : "",
|
||||
urls : {
|
||||
load : wctx.url("/mngt/mngt01/010/list.do"),
|
||||
getInfo : wctx.url("/mngt/mngt01/020/info.do")
|
||||
},
|
||||
formats: {
|
||||
REG_DT : datetimeFormat,
|
||||
MDFCN_DT : datetimeFormat
|
||||
}
|
||||
});
|
||||
$P.ntcControl.defaultFetchSize = FETCH_XS;
|
||||
$P.ntcControl.query = { pageNum : 1, fetchSize : $P.ntcControl.defaultFetchSize };
|
||||
$P.ntcControl.beforeCurrent = null;
|
||||
|
||||
|
||||
/**************************************************************************
|
||||
* Dataset.on
|
||||
**************************************************************************/
|
||||
$P.ntcControl.dataset.onDatasetChange = (obj, option) => {
|
||||
var t = $P.getGridTemplate();
|
||||
var trs = Apply.fromDataset.getTbody($P.ntcControl.dataset, t.found, t.notFound, t.replacer);
|
||||
$P.renderNtcList(obj["Total"], $P.ntcControl.dataset.length, trs, option);
|
||||
|
||||
Apply.fromDataset.paging($P.ntcControl.dataset, obj, "ntcPaging--${pageName}");
|
||||
};
|
||||
|
||||
$P.ntcControl.dataset.onCurrentChange = (dataItem) => {
|
||||
Apply.fromDataset.currentRow($P.ntcControl.dataset, dataItem, $("#ntcTbody--${pageName}")[0]);
|
||||
}
|
||||
|
||||
$P.ntcControl.dataset.onSelectionChange = (selectedArr) => {
|
||||
|
||||
};
|
||||
|
||||
/**************************************************************************
|
||||
* pageObject.function
|
||||
**************************************************************************/
|
||||
$P.fnReset = () => {
|
||||
var searchForm = $("#frmSearch--${pageName}");
|
||||
searchForm.find("input[type='radio']").not("[name='taskSeCd']").prop("checked", false);
|
||||
searchForm.find("input[type='checkbox']").prop("checked", false);
|
||||
searchForm.find("input[type='hidden']").val("");
|
||||
searchForm.find("input[type='text']").val("");
|
||||
|
||||
searchForm.find("select[name='sggCd']").val(MY_INFO.info.sggCd);
|
||||
|
||||
$P.ntcControl.dataset.setData([]);
|
||||
}
|
||||
|
||||
$P.getParams = () => {
|
||||
var formFields = new FimsFormFields("#frmSearch--${pageName}");
|
||||
var data = formFields.get();
|
||||
data.fetchSize = $P.ntcControl.defaultFetchSize;
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
$P.searchNtcList = () => {
|
||||
$P.ntcControl.query = $P.getParams();
|
||||
$P.ntcControl.load(1);
|
||||
}
|
||||
|
||||
$P.scrollNtcList = () => {
|
||||
$P.ntcControl.load($P.ntcControl.query.pageNum + 1);
|
||||
}
|
||||
|
||||
$P.refreshNtcList = () => {
|
||||
if($P.ntcControl.query.pageNum == null){
|
||||
return;
|
||||
}
|
||||
|
||||
$P.ntcControl.reload({all : true});
|
||||
}
|
||||
|
||||
$P.getGridTemplate = () => {
|
||||
var notFound = [document.getElementById("ntcNotFound--${pageName}").innerHTML];
|
||||
var found = document.getElementById("ntcRow--${pageName}").innerHTML;
|
||||
var replacer = (str, dataItem) => str
|
||||
.replace(/{onclick}/gi, "pageObject['${pageName}'].clickNtcList('" + dataItem.getValue("NTC_ID") + "');")
|
||||
.replace(/{ondblclick}/gi, "pageObject['${pageName}'].dblclickNtcList('" + dataItem.getValue("NTC_ID") + "');");
|
||||
|
||||
return {
|
||||
found : found,
|
||||
notFound : notFound,
|
||||
replacer : replacer
|
||||
};
|
||||
}
|
||||
|
||||
$P.renderNtcList = (total, listLength, trs, option) => {
|
||||
|
||||
let noMore = (listLength >= total);
|
||||
var initScroll = ($P.ntcControl.query.pageNum < 2);
|
||||
if(option != null && option.reloaded){
|
||||
initScroll = false;
|
||||
}
|
||||
|
||||
$("#table-responsive--${pageName}")[0].changeContent(trs, initScroll, noMore);
|
||||
|
||||
fn_securityModeToggle($("#securityMode--top").is(":checked")); //보안모드
|
||||
|
||||
}
|
||||
|
||||
$P.clickNtcList = (dataKey) => {
|
||||
if(dataKey == ""){
|
||||
return;
|
||||
}
|
||||
|
||||
$("#ntcTbody--${pageName}").setCurrentRow(dataKey);
|
||||
|
||||
Apply.toDataset.current($P.ntcControl.dataset, dataKey);
|
||||
}
|
||||
|
||||
$P.dblclickNtcList = (dataKey) => {
|
||||
$P.getInfo(dataKey);
|
||||
}
|
||||
|
||||
$P.createNtc = () => {
|
||||
$P.getInfo();
|
||||
}
|
||||
|
||||
$P.getInfo = (ntcId) => {
|
||||
var params = {};
|
||||
if(ntcId != null){
|
||||
params.ntcId = ntcId;
|
||||
}
|
||||
|
||||
ajax.get({
|
||||
url : $P.ntcControl.urls.getInfo,
|
||||
data : params,
|
||||
success : (resp) => {
|
||||
|
||||
dialog.open({
|
||||
id : "ntcInfoDialog",
|
||||
title : "공지사항 상세",
|
||||
size : "xl",
|
||||
content : resp,
|
||||
init : () => {
|
||||
var parentRes = new Object();
|
||||
var childReq = pageObject.childReq.pop();
|
||||
|
||||
for(var reqKey in childReq) {
|
||||
if($P.provide[reqKey]){
|
||||
parentRes[reqKey] = $P.provide[reqKey];
|
||||
} else {
|
||||
parentRes[reqKey] = function(){};
|
||||
}
|
||||
}
|
||||
|
||||
pageObject.parentRes.push(parentRes);
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
$P.provide = {
|
||||
"refreshList" : function(){
|
||||
$P.refreshNtcList();
|
||||
},
|
||||
};
|
||||
|
||||
/**************************************************************************
|
||||
* element.on
|
||||
**************************************************************************/
|
||||
$('#btnReset--${pageName}').on('click', () => $P.fnReset());
|
||||
$('#btnSearch--${pageName}').on('click', () => $P.searchNtcList());
|
||||
$('#btnAdd--${pageName}').on('click', () => $P.createNtc());
|
||||
|
||||
/**************************************************************************
|
||||
* 초기화
|
||||
**************************************************************************/
|
||||
fnMakeResizableTable($("#table-responsive--${pageName}")[0]);
|
||||
fnMakeScrollableTable($("#table-responsive--${pageName}")[0], $P.scrollNtcList);
|
||||
|
||||
$P.fnReset();
|
||||
fn_securityModeToggle($("#securityMode--top").is(":checked")); //보안모드
|
||||
|
||||
if(MY_INFO.institute != "ADMIN00"){
|
||||
$("#btnAdd--${pageName}").attr("hidden","hidden");
|
||||
}
|
||||
});
|
||||
|
||||
</script>
|
||||
@ -1,183 +0,0 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
<c:set var="pageKorName" scope="request">공지사항 상세</c:set>
|
||||
<div class="content-wrapper">
|
||||
<div class="container-xxl flex-grow-1 px-0">
|
||||
|
||||
<div class="card">
|
||||
<form id="frmEdit--${pageName}" name="frmEdit">
|
||||
|
||||
<input type="text" id="ntcId--${pageName}" name="ntcId" data-map="NTC_ID" hidden />
|
||||
|
||||
<div class="row g-1">
|
||||
<div class="col-md-12">
|
||||
<label for="sggCd--${pageName}"
|
||||
class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">
|
||||
시군구
|
||||
</label>
|
||||
<select id="sggCd--${pageName}" name="sggCd" data-map="SGG_CD" class="form-select">
|
||||
<option value="">전체</option>
|
||||
<c:forEach items="${sggList}" var="item">
|
||||
<c:if test="${item.SGG_CD ne 'ADMIN'}">
|
||||
<option value="${item.SGG_CD}">${item.SGG_NM}</option>
|
||||
</c:if>
|
||||
</c:forEach>
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-md-12">
|
||||
<label for="ntcTtl--${pageName}"
|
||||
class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end required">
|
||||
제목
|
||||
</label>
|
||||
<input type="text" id="ntcTtl--${pageName}" name="ntcTtl" data-map="NTC_TTL"
|
||||
class="form-control w-px-800" required />
|
||||
</div>
|
||||
|
||||
<div class="col-md-12">
|
||||
<label for="ntcCn--${pageName}"
|
||||
class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end align-top required">
|
||||
내용
|
||||
</label>
|
||||
<textarea type="text" id="ntcCn--${pageName}" name="ntcCn" data-map="NTC_CN"
|
||||
rows="15"
|
||||
class="form-control w-px-800" required></textarea>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="row m-3">
|
||||
<div class="col-md-12">
|
||||
<span class="float-end">
|
||||
<button type="button" id="btnSave--${pageName}" class="btn btn-primary">저장</button>
|
||||
<button type="button" id="btnRemove--${pageName}" class="btn btn-primary">삭제</button>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
pageObject["${pageName}"] = {};
|
||||
pageObject["${pageName}"].provided = {};
|
||||
|
||||
pageObject.childReq = [];
|
||||
pageObject.childReq.push({
|
||||
refreshList : function(){ },
|
||||
});
|
||||
|
||||
$(document).ready(function(){
|
||||
|
||||
var $P = pageObject["${pageName}"];
|
||||
|
||||
if(pageObject.parentRes.length > 0){
|
||||
$P.provided = pageObject.parentRes.pop();
|
||||
} else {
|
||||
$P.provided = pageObject.childReq.pop();
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* DatasetControl, Dataset, FormFields
|
||||
**************************************************************************/
|
||||
$P.formFields = new FimsFormFields("#frmEdit--${pageName}");
|
||||
|
||||
$P.ntcControl = new DatasetControl({
|
||||
dataGetter : obj => obj["List"], appendData : true,
|
||||
keymapper : info => info ? info.NTC_ID : "",
|
||||
urls : {
|
||||
create : wctx.url("/mngt/mngt01/020/create.do"),
|
||||
update : wctx.url("/mngt/mngt01/020/update.do"),
|
||||
remove : wctx.url("/mngt/mngt01/020/remove.do")
|
||||
},
|
||||
formats: {
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
/**************************************************************************
|
||||
* Dataset.on
|
||||
**************************************************************************/
|
||||
$P.ntcControl.dataset.onCurrentChange = (dataItem) => {
|
||||
if(!dataItem){
|
||||
return;
|
||||
}
|
||||
$P.formFields.set($P.ntcControl,dataItem);
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* pageObject.function
|
||||
**************************************************************************/
|
||||
$P.fnSave = () => {
|
||||
|
||||
if(!customValidate($("#frmEdit--${pageName} input"))) return;
|
||||
|
||||
var info = $P.formFields.get();
|
||||
|
||||
var create = $P.ntcControl.dataset.empty;
|
||||
|
||||
ajax.post({
|
||||
url : create ? $P.ntcControl.urls.create : $P.ntcControl.urls.update,
|
||||
data : info,
|
||||
success : (resp) => {
|
||||
if(resp.saved){
|
||||
dialog.close("ntcInfoDialog");
|
||||
dialog.alert({
|
||||
content:"저장되었습니다.",
|
||||
onOK : () => $P.provided.refreshList()
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
$P.fnRemove = () => {
|
||||
|
||||
var info = $P.formFields.get();
|
||||
|
||||
ajax.post({
|
||||
url : $P.ntcControl.urls.remove,
|
||||
data : info,
|
||||
success : (resp) => {
|
||||
if(resp.saved){
|
||||
dialog.close("ntcInfoDialog");
|
||||
dialog.alert({
|
||||
content:"삭제되었습니다.",
|
||||
onOK : () => $P.provided.refreshList()
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* element.on
|
||||
**************************************************************************/
|
||||
$("#btnSave--${pageName}").on('click', () => $P.fnSave());
|
||||
$("#btnRemove--${pageName}").on('click', () => $P.fnRemove());
|
||||
|
||||
/**************************************************************************
|
||||
* 초기화
|
||||
**************************************************************************/
|
||||
var ntcInfo = ${ntcInfo};
|
||||
|
||||
if(ntcInfo == null){
|
||||
$P.ntcControl.dataset.setData([]);
|
||||
$("#btnRemove--${pageName}").attr("hidden","hidden");
|
||||
} else {
|
||||
$P.ntcControl.dataset.setData([ntcInfo]);
|
||||
$("#sggCd--${pageName}").attr("disabled","disabled");
|
||||
|
||||
if(MY_INFO.institute != "ADMIN00"){
|
||||
$("#btnSave--${pageName}").attr("hidden","hidden");
|
||||
$("#btnRemove--${pageName}").attr("hidden","hidden");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
</script>
|
||||
@ -1,135 +0,0 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
|
||||
<c:set var="pageKorName" scope="request">일정관리</c:set>
|
||||
<div class="content-wrapper">
|
||||
<div class="container-xxl flex-grow-1 px-0">
|
||||
<div class="card wrapper-list">
|
||||
<div id="calendar--${pageName}" class="m-4 px-4 w-px-1500 h-px-700">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<script>
|
||||
LoadScript("fullCalendarScript","/webjars/3rd-party/sneat/libs/fullcalendar/fullcalendar.js");
|
||||
|
||||
pageObject["${pageName}"] = {};
|
||||
|
||||
$(document).ready(function(){
|
||||
|
||||
var $P = pageObject["${pageName}"];
|
||||
|
||||
$P.calendar = new Calendar(document.getElementById("calendar--${pageName}"), {
|
||||
initialView: 'dayGridMonth',
|
||||
plugins : [dayGridPlugin, interactionPlugin],
|
||||
locale: 'ko',
|
||||
editable: false,
|
||||
selectable: true,
|
||||
height: '700px',
|
||||
handleWindowResize : false,
|
||||
eventColor: '#ffeecc',
|
||||
select: function(arg) {
|
||||
$P.getInfo("", arg.startStr.replaceAll("-",""), getPrevDay(arg.endStr.replaceAll("-",""),1));
|
||||
},
|
||||
eventClick:function(obj, element) {
|
||||
$P.getInfo(obj.event.id, "", "");
|
||||
}
|
||||
});
|
||||
|
||||
$P.getInfo = (schdlId, schdlBgngYmd, schdlEndYmd) => {
|
||||
|
||||
ajax.get({
|
||||
url : wctx.url("/mngt/mngt02/020/info.do"),
|
||||
data : {
|
||||
schdlId : schdlId,
|
||||
schdlBgngYmd : schdlBgngYmd,
|
||||
schdlEndYmd : schdlEndYmd
|
||||
},
|
||||
success : (resp) => {
|
||||
dialog.open({
|
||||
id : "scheduleInfoDialog",
|
||||
title : "일정 정보",
|
||||
size : "xl",
|
||||
content : resp,
|
||||
init : () => {
|
||||
var parentRes = new Object();
|
||||
var childReq = pageObject.childReq.pop();
|
||||
|
||||
for(var reqKey in childReq) {
|
||||
if($P.provide[reqKey]){
|
||||
parentRes[reqKey] = $P.provide[reqKey];
|
||||
} else {
|
||||
parentRes[reqKey] = function(){};
|
||||
}
|
||||
}
|
||||
|
||||
pageObject.parentRes.push(parentRes);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
$P.add = (info) => {
|
||||
$P.calendar.addEvent({
|
||||
title : info.schdlCn,
|
||||
start : dateFormat.format(info.schdlBgngYmd),
|
||||
end : dateFormat.format(getNextDay(info.schdlEndYmd,1)),
|
||||
allDay : true
|
||||
});
|
||||
}
|
||||
|
||||
$P.modify = (info) => {
|
||||
var ev = $P.calendar.getEventById(info.schdlId);
|
||||
ev.setProp("title", info.schdlCn);
|
||||
ev.setDates(dateFormat.format(info.schdlBgngYmd), dateFormat.format(getNextDay(info.schdlEndYmd,1)), { allDay : true });
|
||||
};
|
||||
|
||||
$P.del = (info) => {
|
||||
$P.calendar.getEventById(info.schdlId).remove();
|
||||
};
|
||||
|
||||
$P.provide = {
|
||||
"refresh" : function(type, info){
|
||||
if(type == "add"){
|
||||
$P.add(info);
|
||||
} else if(type == "modify"){
|
||||
$P.modify(info);
|
||||
} else if(type == "del"){
|
||||
$P.del(info);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
//
|
||||
$P.calendar.render();
|
||||
|
||||
//
|
||||
ajax.get({
|
||||
url : wctx.url("/mngt/mngt02/010/list.do"),
|
||||
data : {},
|
||||
success : (resp) => {
|
||||
if(resp.list != null && resp.list.length > 0){
|
||||
for(var i=0; i < resp.list.length; i++){
|
||||
var info = resp.list[i];
|
||||
|
||||
$P.calendar.addEvent({
|
||||
id : info.SCHDL_ID,
|
||||
title : info.SCHDL_CN,
|
||||
start : dateFormat.format(info.SCHDL_BGNG_YMD),
|
||||
end : dateFormat.format(getNextDay(info.SCHDL_END_YMD,1)),
|
||||
allDay : true
|
||||
});
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
});
|
||||
</script>
|
||||
@ -1,213 +0,0 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
<c:set var="pageKorName" scope="request">일정 상세</c:set>
|
||||
<div class="content-wrapper">
|
||||
<div class="container-xxl flex-grow-1 px-0">
|
||||
|
||||
<div class="card">
|
||||
<form id="frmEdit--${pageName}" name="frmEdit">
|
||||
<input type="text" id="schdlId--${pageName}" name="schdlId" data-map="SCHDL_ID" hidden />
|
||||
|
||||
<div class="row g-1">
|
||||
|
||||
<div class="col-md-6">
|
||||
<label for="schdlBgngYmd--${pageName}"
|
||||
class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end required">
|
||||
시작일
|
||||
</label>
|
||||
<input type="text" id="schdlBgngYmd--${pageName}" name="schdlBgngYmd" data-map="SCHDL_BGNG_YMD"
|
||||
class="form-control form-date" required
|
||||
data-fmt-type="day" title="시작 날짜 선택" />
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<label for="schdlEndYmd--${pageName}"
|
||||
class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end required">
|
||||
종료일
|
||||
</label>
|
||||
<input type="text" id="schdlEndYmd--${pageName}" name="schdlEndYmd" data-map="SCHDL_END_YMD"
|
||||
class="form-control form-date" required
|
||||
data-fmt-type="day" title="종료 날짜 선택" />
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
</div>
|
||||
<div class="col-md-12">
|
||||
<label for="schdlCn--${pageName}"
|
||||
class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end align-top required">
|
||||
내용
|
||||
</label>
|
||||
<input type="text" id="schdlCn--${pageName}" name="schdlCn" data-map="SCHDL_CN"
|
||||
class="form-control w-px-500" required />
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="row m-3">
|
||||
<div class="col-md-12">
|
||||
<span class="float-end">
|
||||
<button type="button" id="btnSave--${pageName}" class="btn btn-primary">저장</button>
|
||||
<button type="button" id="btnRemove--${pageName}" class="btn btn-primary">삭제</button>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
pageObject["${pageName}"] = {};
|
||||
pageObject["${pageName}"].provided = {};
|
||||
|
||||
pageObject.childReq = [];
|
||||
pageObject.childReq.push({
|
||||
refresh : function(){ },
|
||||
});
|
||||
|
||||
$(document).ready(function(){
|
||||
|
||||
var $P = pageObject["${pageName}"];
|
||||
|
||||
if(pageObject.parentRes.length > 0){
|
||||
$P.provided = pageObject.parentRes.pop();
|
||||
} else {
|
||||
$P.provided = pageObject.childReq.pop();
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* DatasetControl, Dataset, FormFields
|
||||
**************************************************************************/
|
||||
$P.formFields = new FimsFormFields("#frmEdit--${pageName}");
|
||||
|
||||
$P.schdlControl = new DatasetControl({
|
||||
dataGetter : obj => obj["List"], appendData : false,
|
||||
keymapper : info => info ? info.SCHDL_ID : "",
|
||||
urls : {
|
||||
create : wctx.url("/mngt/mngt02/020/create.do"),
|
||||
update : wctx.url("/mngt/mngt02/020/update.do"),
|
||||
remove : wctx.url("/mngt/mngt02/020/remove.do")
|
||||
},
|
||||
formats: {
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
/**************************************************************************
|
||||
* Dataset.on
|
||||
**************************************************************************/
|
||||
$P.schdlControl.dataset.onCurrentChange = (dataItem) => {
|
||||
if(!dataItem){
|
||||
return;
|
||||
}
|
||||
$P.formFields.set($P.schdlControl,dataItem);
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* pageObject.function
|
||||
**************************************************************************/
|
||||
$P.fnSave = () => {
|
||||
|
||||
if(!customValidate($("#frmEdit--${pageName} input"))) return;
|
||||
|
||||
var info = $P.formFields.get();
|
||||
|
||||
if(info.schdlBgngYmd > info.schdlEndYmd){
|
||||
alert("시작일자가 종료일자 보다 큽니다.");
|
||||
return;
|
||||
}
|
||||
|
||||
var create = ($("#schdlId--${pageName}").val() == "");
|
||||
if(create){
|
||||
ajax.post({
|
||||
url : $P.schdlControl.urls.create,
|
||||
data : info,
|
||||
success : (resp) => {
|
||||
if(resp.saved){
|
||||
dialog.close("scheduleInfoDialog");
|
||||
dialog.alert({
|
||||
content:"저장되었습니다.",
|
||||
init : function() {
|
||||
setDialogZindex();
|
||||
focusClose();
|
||||
},
|
||||
onClose : () => {
|
||||
info.schdlId = resp.schdlId;
|
||||
$P.provided.refresh("add", info);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
} else {
|
||||
ajax.post({
|
||||
url : $P.schdlControl.urls.update,
|
||||
data : info,
|
||||
success : (resp) => {
|
||||
if(resp.saved){
|
||||
dialog.close("scheduleInfoDialog");
|
||||
dialog.alert({
|
||||
content:"저장되었습니다.",
|
||||
init : function() {
|
||||
setDialogZindex();
|
||||
focusClose();
|
||||
},
|
||||
onClose : () => {
|
||||
$P.provided.refresh("modify", info);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
$P.fnRemove = () => {
|
||||
|
||||
var info = $P.formFields.get();
|
||||
|
||||
ajax.post({
|
||||
url : $P.schdlControl.urls.remove,
|
||||
data : info,
|
||||
success : (resp) => {
|
||||
if(resp.saved){
|
||||
dialog.close("scheduleInfoDialog");
|
||||
dialog.alert({
|
||||
content:"삭제되었습니다.",
|
||||
init : function() {
|
||||
setDialogZindex();
|
||||
focusClose();
|
||||
},
|
||||
onClose : () => {
|
||||
$P.provided.refresh("del", { schdlId : info.schdlId });
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* element.on
|
||||
**************************************************************************/
|
||||
$("#btnSave--${pageName}").on('click', () => $P.fnSave());
|
||||
$("#btnRemove--${pageName}").on('click', () => $P.fnRemove());
|
||||
|
||||
/**************************************************************************
|
||||
* 초기화
|
||||
**************************************************************************/
|
||||
initDatepicker("frmEdit--${pageName}"); //달력 초기화
|
||||
|
||||
var schdlInfo = ${schdlInfo};
|
||||
if(schdlInfo != null){
|
||||
$P.schdlControl.dataset.setData([schdlInfo]);
|
||||
} else {
|
||||
|
||||
$P.schdlControl.dataset.setData([{ SCHDL_BGNG_YMD : "${schdlBgngYmd}", SCHDL_END_YMD : "${schdlEndYmd}" }]);
|
||||
|
||||
$("#btnRemove--${pageName}").attr("hidden","hidden");
|
||||
}
|
||||
|
||||
});
|
||||
</script>
|
||||
@ -1,577 +0,0 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
<c:set var="pageKorName" scope="request">시군구관리</c:set>
|
||||
<div class="content-wrapper">
|
||||
<div class="container-xxl flex-grow-1 px-0">
|
||||
<div class="card wrapper-list">
|
||||
<form id="mainForm--${pageName}" method="post" enctype="multipart/form-data">
|
||||
<div class="card my-2">
|
||||
<div class="mx-3 my-2 d-block">
|
||||
<span class="h3">
|
||||
시군구 정보
|
||||
</span>
|
||||
<span>
|
||||
<button type="button" id="btnSaveSgg--${pageName}" class="btn btn-primary w-px-100 float-end">저장</button>
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<div class="row g-3 mt-1 mb-3">
|
||||
<div class="col-md-6">
|
||||
<label class="w-px-140 col-form-label text-sm-end pe-2" for="">시군구명</label>
|
||||
<input name="sggID" type="hidden" />
|
||||
<input name="sggNm" type="text" class="form-control" readonly />
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<label class="w-px-140 col-form-label text-sm-end pe-2" for="">기관명</label>
|
||||
<input name="instCd" type="hidden" />
|
||||
<input name="instNm" type="text" class="form-control" readonly />
|
||||
</div>
|
||||
<div class="col-md-4 d-flex align-items-center">
|
||||
<label class="w-px-140 col-form-label text-sm-end pe-2">
|
||||
직인
|
||||
</label>
|
||||
<img id="offcsImage--${pageName}" alt="" src="" data-orgn-path="" data-orgn-name=""
|
||||
class="mw-px-100 mh-px-100 fit-contain" />
|
||||
<input id="offcs--${pageName}" name="offcs" type="file" hidden />
|
||||
</div>
|
||||
<div class="col-md-4 d-flex align-items-center">
|
||||
<label class="w-px-140 col-form-label text-sm-end pe-2">
|
||||
심볼
|
||||
</label>
|
||||
<img id="symbolImage--${pageName}" alt="" src="" data-orgn-path="" data-orgn-name=""
|
||||
class="mw-px-100 mh-px-100 fit-contain" />
|
||||
<input id="symbol--${pageName}" name="symbol" type="file" hidden />
|
||||
</div>
|
||||
<div class="col-md-4 d-flex align-items-center">
|
||||
<label class="w-px-140 col-form-label text-sm-end pe-2">
|
||||
로고
|
||||
</label>
|
||||
<img id="logoImage--${pageName}" alt="" src="" data-orgn-path="" data-orgn-name=""
|
||||
class="mw-px-100 mh-px-100 fit-contain" />
|
||||
<input id="logo--${pageName}" name="logo" type="file" hidden />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</form>
|
||||
|
||||
<div class="card my-2">
|
||||
<div class="mx-3 my-2 d-block">
|
||||
<span class="h3">
|
||||
시군구 업무 정보
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<div class="nav-align-top my-2 mx-2 flex-row">
|
||||
<ul class="nav nav-tabs" role="tablist" id="tabButtonContainer--${pageName}">
|
||||
</ul>
|
||||
<button type="button" id="btnOpenSelectTaskDialog--${pageName}"
|
||||
class="btn btn-darkgray ms-1 superadmin">+ 새 과태료업무 추가</button>
|
||||
</div>
|
||||
|
||||
<span class="tab-content" id="tabContentContainer--${pageName}">
|
||||
</span>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<template id="taskTabButtonTemplate--${pageName}">
|
||||
<li class="nav-item">
|
||||
<button type="button" class="nav-link {active} w-px-150"
|
||||
role="tab" data-bs-toggle="tab" data-bs-target="#tab{task}--${pageName}"
|
||||
onclick="">
|
||||
{taskNm}
|
||||
</button>
|
||||
</li>
|
||||
</template>
|
||||
|
||||
<template id="taskTabContentsTemplate--${pageName}">
|
||||
|
||||
<span id="tab{task}--${pageName}" class="tab-pane {activeshow}" role="tabpanel">
|
||||
<div class="mx-3 my-2 d-flex flex-column">
|
||||
<div class="float-end">
|
||||
<button type="button" data-task="{task}"
|
||||
onclick="pageObject['${pageName}'].fnSaveForTask(this);"
|
||||
class="btn btn-primary w-px-100 float-end"
|
||||
>저장</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<form id="{task}Form--${pageName}">
|
||||
<div class="row g-3 mt-1 mb-3">
|
||||
<div class="col-md-3">
|
||||
<label class="w-px-140 col-form-label text-sm-end" for="">업무명</label>
|
||||
<input name="taskSeNm" type="text" class="form-control w-px-150" />
|
||||
</div>
|
||||
<div class="col-md-3">
|
||||
<label class="w-px-140 col-form-label text-sm-end" for="">사전통지일수</label>
|
||||
<input name="advntceDayCnt" type="text" class="form-control w-px-50" />
|
||||
</div>
|
||||
<div class="col-md-3">
|
||||
<label class="w-px-140 col-form-label text-sm-end" for="">사전통지감경율</label>
|
||||
<input name="advntceRdcrt" type="text" class="form-control w-px-50" />
|
||||
</div>
|
||||
<div class="col-md-3">
|
||||
<label class="w-px-140 col-form-label text-sm-end" for="">사회적약자감경율</label>
|
||||
<input name="wksnRdcrt" type="text" class="form-control w-px-50" />
|
||||
</div>
|
||||
<div class="col-md-3">
|
||||
<label class="w-px-140 col-form-label text-sm-end" for="">과태료가산일자</label>
|
||||
<input name="ffnlgAdtnYmd" type="text" class="form-control w-px-100" />
|
||||
</div>
|
||||
<div class="col-md-3">
|
||||
<label class="w-px-140 col-form-label text-sm-end" for="">과태료가산율</label>
|
||||
<input name="ffnlgAdtnRt" type="text" class="form-control w-px-50" />
|
||||
</div>
|
||||
<div class="col-md-3">
|
||||
<label class="w-px-140 col-form-label text-sm-end" for="">과태료중가산율</label>
|
||||
<input name="ffnlgInadtnRt" type="text" class="form-control w-px-50" />
|
||||
</div>
|
||||
<div class="col-md-3">
|
||||
<label class="w-px-140 col-form-label text-sm-end" for="">과태료중가산최대수</label>
|
||||
<input name="ffnlgInadtnMxmmCnt" type="text" class="form-control w-px-50" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="row g-3 mt-1 mb-3 superadmin">
|
||||
<div class="col-md-3">
|
||||
<label class="w-px-140 col-form-label text-sm-end text-red" for="">세외수입연계<br/>구분코드</label>
|
||||
<input name="nxrpLinkSeCd" type="text" class="form-control w-px-50" />
|
||||
</div>
|
||||
<div class="col-md-3">
|
||||
<label class="w-px-140 col-form-label text-sm-end text-red" for="">세외수입연계<br/>구분상세순번</label>
|
||||
<input name="nxrpLinkSeDtlSn" type="text" class="form-control w-px-50" />
|
||||
</div>
|
||||
<div class="col-md-6"></div>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<div class="card-datatable text-nowrap area-photoinspection mx-2 mt-2 mb-3">
|
||||
<div id="{task}Table_0_wrapper--${pageName}" class="dataTables_wrapper dt-bootstrap5 no-footer">
|
||||
<div id="{task}table-responsive--${pageName}" class="table-responsive ox-scroll oy-scroll h-px-300">
|
||||
<table id="{task}Table_0--${pageName}"
|
||||
class="table-layout-fixed datatables-ajax table table-bordered dataTable no-footer">
|
||||
<thead class="sticky-thead">
|
||||
<tr>
|
||||
<th style="width: 90px;">위반코드</th>
|
||||
<th style="width: 160px;">위반항목</th>
|
||||
<th style="width: 360px;">위반법명</th>
|
||||
<th style="width: 160px;">위반법1</th>
|
||||
<th style="width: 160px;">위반법2</th>
|
||||
<th style="width: 160px;">위반법기타</th>
|
||||
<th style="width: 120px;">회계구분코드</th>
|
||||
<th style="width: 120px;">회계구분명</th>
|
||||
<th style="width: 120px;">세목코드</th>
|
||||
<th style="width: 300px;">세목명</th>
|
||||
<th style="width: 120px;">운영항목코드</th>
|
||||
<th style="width: 300px;">운영항목명</th>
|
||||
<th style="width: 160px;">특별회계사업코드</th>
|
||||
<th style="width: 300px;">특별회계사업명</th>
|
||||
<th class="dummy-th"></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="{task}tbody--${pageName}"></tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</span>
|
||||
</template>
|
||||
|
||||
<template id="taskTbodyTemplate--${pageName}">
|
||||
<tr data-key="{VLTN_ID}">
|
||||
<td>{VLTN_CD}</td>
|
||||
<td data-col="vltnArtcl">
|
||||
<input type="text" class="form-control w-100" value="{VLTN_ARTCL}" />
|
||||
</td>
|
||||
<td data-col="vltnLawNm">
|
||||
<input type="text" class="form-control w-100" value="{VLTN_LAW_NM}" />
|
||||
</td>
|
||||
<td data-col="vltnLaw1">
|
||||
<input type="text" class="form-control w-100" value="{VLTN_LAW1}" />
|
||||
</td>
|
||||
<td data-col="vltnLaw2">
|
||||
<input type="text" class="form-control w-100" value="{VLTN_LAW2}" />
|
||||
</td>
|
||||
<td data-col="vltnLawEtc">
|
||||
<input type="text" class="form-control w-100" value="{VLTN_LAW_ETC}" />
|
||||
</td>
|
||||
<td data-col="acntgSeCd">
|
||||
<input type="text" class="form-control w-100" value="{ACNTG_SE_CD}" />
|
||||
</td>
|
||||
<td data-col="acntgSeNm">
|
||||
<input type="text" class="form-control w-100" value="{ACNTG_SE_NM}" />
|
||||
</td>
|
||||
<td data-col="txitmCd">
|
||||
<input type="text" class="form-control w-100" value="{TXITM_CD}" />
|
||||
</td>
|
||||
<td data-col="txitmNm">
|
||||
<input type="text" class="form-control w-100" value="{TXITM_NM}" />
|
||||
</td>
|
||||
<td data-col="operItemCd">
|
||||
<input type="text" class="form-control w-100" value="{OPER_ITEM_CD}" />
|
||||
</td>
|
||||
<td data-col="operItemNm">
|
||||
<input type="text" class="form-control w-100" value="{OPER_ITEM_NM}" />
|
||||
</td>
|
||||
<td data-col="spclBizCd">
|
||||
<input type="text" class="form-control w-100" value="{SPCL_BIZ_CD}" />
|
||||
</td>
|
||||
<td data-col="spclBizNm">
|
||||
<input type="text" class="form-control w-100" value="{SPCL_BIZ_NM}" />
|
||||
</td>
|
||||
</tr>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
|
||||
pageObject["${pageName}"] = {};
|
||||
|
||||
$(document).ready(function(){
|
||||
|
||||
if(MY_INFO.institute != "ADMIN00"){
|
||||
$(".superadmin").attr("hidden","hidden");
|
||||
}
|
||||
|
||||
var $P = pageObject["${pageName}"];
|
||||
$P.sggInfo = {};
|
||||
$P.taskList = [];
|
||||
$P.curSggCd = "";
|
||||
|
||||
if("${sggCd}" == ""){
|
||||
$P.curSggCd = MY_INFO.info.sggCd;
|
||||
} else {
|
||||
$P.curSggCd = "${sggCd}";
|
||||
}
|
||||
|
||||
$P.taskDatasets = {};
|
||||
var taskCodes = Object.keys(ALL_TASK);
|
||||
for(var i=0; i < taskCodes.length; i++){
|
||||
$P.taskDatasets[taskCodes[i]+"Dataset"] = new Dataset({
|
||||
keymapper : info => info ? info.VLTN_ID : ""
|
||||
});
|
||||
}
|
||||
|
||||
$P.getSggInfo = async function(){
|
||||
return new Promise((resolve, reject) => {
|
||||
ajax.get({
|
||||
url: wctx.url("/ogdp/getSggStngInfo.do"),
|
||||
data: {
|
||||
sggCd : $P.curSggCd
|
||||
},
|
||||
success : function(resp, textStatus, jqXHR) {
|
||||
$P.sggInfo = resp.sggInfo;
|
||||
|
||||
$("#mainForm--${pageName}").find("[name='sggID']").val($P.sggInfo.SGG_CD);
|
||||
$("#mainForm--${pageName}").find("[name='sggNm']").val($P.sggInfo.SGG_NM);
|
||||
$("#mainForm--${pageName}").find("[name='instCd']").val($P.sggInfo.INST_CD);
|
||||
$("#mainForm--${pageName}").find("[name='instNm']").val($P.sggInfo.INST_NM);
|
||||
|
||||
$("#offcsImage--${pageName}")
|
||||
.attr("data-orgn-name", $P.sggInfo.OFFCS_FILE_NM)
|
||||
.attr("data-orgn-path", $P.sggInfo.OFFCS_FILE_PATH);
|
||||
$("#offcs--${pageName}").val("");
|
||||
$("#offcs--${pageName}").trigger("change");
|
||||
|
||||
$("#symbolImage--${pageName}")
|
||||
.attr("data-orgn-name", $P.sggInfo.SYMBOL_FILE_NM)
|
||||
.attr("data-orgn-path", $P.sggInfo.SYMBOL_FILE_PATH);
|
||||
$("#symbol--${pageName}").val("");
|
||||
$("#symbol--${pageName}").trigger("change");
|
||||
|
||||
$("#logoImage--${pageName}")
|
||||
.attr("data-orgn-name", $P.sggInfo.LOGO_FILE_NM)
|
||||
.attr("data-orgn-path", $P.sggInfo.LOGO_FILE_PATH);
|
||||
$("#logo--${pageName}").val("");
|
||||
$("#logo--${pageName}").trigger("change");
|
||||
|
||||
resolve({resp, textStatus, jqXHR});
|
||||
},
|
||||
error: function(jqXHR, textStatus, error) {
|
||||
}
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
$P.getSggTaskInfo = async function(){
|
||||
return new Promise((resolve, reject) => {
|
||||
ajax.get({
|
||||
url: wctx.url("/ogdp/getTasks.do"),
|
||||
data: {
|
||||
useYn : "Y",
|
||||
sggCd : $P.curSggCd
|
||||
},
|
||||
success : function(resp, textStatus, jqXHR) {
|
||||
$P.taskList = resp.taskList;
|
||||
|
||||
var tabs = [];
|
||||
var contents = [];
|
||||
for(var i=0; i < $P.taskList.length; i++){
|
||||
var task = $P.taskList[i];
|
||||
var taskSeCd = task.TASK_SE_CD;
|
||||
var taskSeNm = task.TASK_SE_NM;
|
||||
|
||||
var tabButtonTemplate = document.getElementById("taskTabButtonTemplate--${pageName}").innerHTML;
|
||||
var tabContentsTemplate = document.getElementById("taskTabContentsTemplate--${pageName}").innerHTML;
|
||||
|
||||
tabButtonTemplate = tabButtonTemplate.replace(/{task}/gi, taskSeCd);
|
||||
tabButtonTemplate = tabButtonTemplate.replace(/{taskNm}/gi, taskSeNm);
|
||||
if(i==0){
|
||||
tabButtonTemplate = tabButtonTemplate.replace(/{active}/gi, "active");
|
||||
} else {
|
||||
tabButtonTemplate = tabButtonTemplate.replace(/{active}/gi, "");
|
||||
}
|
||||
|
||||
tabContentsTemplate = tabContentsTemplate.replace(/{task}/gi, taskSeCd);
|
||||
if(i==0){
|
||||
tabContentsTemplate = tabContentsTemplate.replace(/{activeshow}/gi, "active show");
|
||||
} else {
|
||||
tabContentsTemplate = tabContentsTemplate.replace(/{activeshow}/gi, "");
|
||||
}
|
||||
|
||||
tabs.push(tabButtonTemplate);
|
||||
contents.push(tabContentsTemplate);
|
||||
}
|
||||
|
||||
$("#tabButtonContainer--${pageName}").html(tabs.join(""));
|
||||
$("#tabContentContainer--${pageName}").html(contents.join(""));
|
||||
|
||||
if(MY_INFO.institute != "ADMIN00"){
|
||||
$(".superadmin").attr("hidden","hidden");
|
||||
}
|
||||
|
||||
for(var i=0; i < $P.taskList.length; i++){
|
||||
var task = $P.taskList[i];
|
||||
var taskSeCd = task.TASK_SE_CD;
|
||||
var taskSeNm = task.TASK_SE_NM;
|
||||
$("#"+taskSeCd+"Form--${pageName}").find("[name='taskSeNm']").val(taskSeNm);
|
||||
$("#"+taskSeCd+"Form--${pageName}").find("[name='advntceDayCnt']").val(task.ADVNTCE_DAY_CNT);
|
||||
$("#"+taskSeCd+"Form--${pageName}").find("[name='advntceRdcrt']").val(task.ADVNTCE_RDCRT);
|
||||
$("#"+taskSeCd+"Form--${pageName}").find("[name='wksnRdcrt']").val(task.WKSN_RDCRT);
|
||||
$("#"+taskSeCd+"Form--${pageName}").find("[name='ffnlgAdtnYmd']").val(task.FFNLG_ADTN_YMD);
|
||||
$("#"+taskSeCd+"Form--${pageName}").find("[name='ffnlgAdtnRt']").val(task.FFNLG_ADTN_RT);
|
||||
$("#"+taskSeCd+"Form--${pageName}").find("[name='ffnlgInadtnRt']").val(task.FFNLG_INADTN_RT);
|
||||
$("#"+taskSeCd+"Form--${pageName}").find("[name='ffnlgInadtnMaxCnt']").val(task.FFNLG_INADTN_MAX_CNT);
|
||||
|
||||
$("#"+taskSeCd+"Form--${pageName}").find("[name='nxrpLinkSeCd']").val(task.NXRP_LINK_SE_CD);
|
||||
$("#"+taskSeCd+"Form--${pageName}").find("[name='nxrpLinkSeDtlSn']").val(task.NXRP_LINK_SE_DTL_SN);
|
||||
}
|
||||
|
||||
resolve({resp, textStatus, jqXHR});
|
||||
},
|
||||
error: function(jqXHR, textStatus, error) {
|
||||
}
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
$P.getVltnInfo = async function(){
|
||||
return new Promise((resolve, reject) => {
|
||||
ajax.get({
|
||||
url: wctx.url("/ogdp/getVltns.do"),
|
||||
data: {
|
||||
useYN : "Y",
|
||||
sggCd : $P.curSggCd
|
||||
},
|
||||
success : function(resp, textStatus, jqXHR) {
|
||||
|
||||
var datasetNames = Object.keys($P.taskDatasets);
|
||||
for(var i=0; i < datasetNames.length; i++){
|
||||
var filtered = resp.vltnList.filter(item => item.TASK_SE_CD == datasetNames[i].substr(0,3));
|
||||
$P.taskDatasets[datasetNames[i]].setData(filtered);
|
||||
}
|
||||
|
||||
for(var i=0; i < datasetNames.length; i++){
|
||||
var taskSeCd = datasetNames[i].substr(0,3);
|
||||
var template = document.getElementById("taskTbodyTemplate--${pageName}").innerHTML;
|
||||
var taskDataset = $P.taskDatasets[taskSeCd+"Dataset"];
|
||||
var trs = taskDataset.empty ? [""] : taskDataset.inStrings(template);
|
||||
$("#"+taskSeCd+"tbody--${pageName}").html(trs.join());
|
||||
}
|
||||
|
||||
resolve({resp, textStatus, jqXHR});
|
||||
},
|
||||
error: function(jqXHR, textStatus, error) {
|
||||
}
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
//이미지 뷰어
|
||||
fnMakeSingleImageViewer($("#offcsImage--${pageName}")[0] , $("#offcs--${pageName}")[0], "orgn-path", "orgn-name");
|
||||
fnMakeSingleImageViewer($("#symbolImage--${pageName}")[0] , $("#symbol--${pageName}")[0], "orgn-path", "orgn-name");
|
||||
fnMakeSingleImageViewer($("#logoImage--${pageName}")[0] , $("#logo--${pageName}")[0], "orgn-path", "orgn-name");
|
||||
|
||||
//시군구 기본 설정 저장 버튼
|
||||
$("#btnSaveSgg--${pageName}").on("click", function(){
|
||||
|
||||
var formData = new FormData($("#mainForm--${pageName}")[0]);
|
||||
|
||||
ajax.post({
|
||||
url: wctx.url("/ogdp/updateSggStng.do"),
|
||||
data: formData,
|
||||
contentType : false, processData : false,
|
||||
success: (resp) => {
|
||||
dialog.alert({
|
||||
content : "저장됐습니다.",
|
||||
init : function(){
|
||||
setDialogZindex();
|
||||
focusClose();
|
||||
},
|
||||
onClose : () => {
|
||||
$P.getSggInfo();
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
//업무 추가 버튼
|
||||
$("#btnOpenSelectTaskDialog--${pageName}").on("click", function(){
|
||||
$("#selectTaskButtons").html("");
|
||||
|
||||
var keys = Object.keys(ALL_TASK);
|
||||
var ableKeys = [];
|
||||
|
||||
for(var i=0; i < keys.length; i++){
|
||||
if($("#tabContentContainer--${pageName}").find("#tab"+keys[i]+"--${pageName}").length < 1){
|
||||
ableKeys.push(keys[i]);
|
||||
}
|
||||
}
|
||||
if(ableKeys.length < 1){
|
||||
alert("추가 가능한 과태료 업무가 없습니다.");
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
var pn = "${pageName}";
|
||||
for(var i=0; i < ableKeys.length; i++){
|
||||
|
||||
var button = `<button type="button" class="btn btn-xl btn-primary" onclick="pageObject['`
|
||||
+pn
|
||||
+`'].fnCreateTaskStng('`
|
||||
+ableKeys[i]
|
||||
+`');">`
|
||||
+ALL_TASK[ableKeys[i]]
|
||||
+`</button>`;
|
||||
|
||||
$("#selectTaskButtons").append(button);
|
||||
}
|
||||
|
||||
$("#selectTaskModal").modal("show");
|
||||
});
|
||||
|
||||
$P.fnCreateTaskStng = (taskSeCd) => {
|
||||
$("#selectTaskModal").modal("hide");
|
||||
|
||||
ajax.post({
|
||||
url: wctx.url("/ogdp/createTaskStng.do"),
|
||||
data: {
|
||||
sggCd : $("#mainForm--${pageName}").find("[name='sggID']").val(),
|
||||
taskSeCd : taskSeCd
|
||||
},
|
||||
success: (resp) => {
|
||||
dialog.alert({
|
||||
content : "저장됐습니다.",
|
||||
init : function(){
|
||||
setDialogZindex();
|
||||
focusClose();
|
||||
},
|
||||
onClose : () => {
|
||||
$P.getSggTaskInfo().then(()=>{ $P.getVltnInfo(); });
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
$P.fnSaveForTask = (el) => {
|
||||
var taskSeCd = el.dataset.task;
|
||||
var sggCd = $("#mainForm--${pageName}").find("[name='sggID']").val();
|
||||
|
||||
var formData = new FormData($("#"+taskSeCd+"Form--${pageName}")[0]);
|
||||
formData.append("taskSeCd",taskSeCd);
|
||||
formData.append("sggCd", sggCd);
|
||||
|
||||
var rowArr = $P.getRowData(taskSeCd+"tbody--${pageName}", formData);
|
||||
|
||||
var vltnStngList = fnJsonArrayToFormData(rowArr,"vltnStngList");
|
||||
var keys = Object.keys(vltnStngList);
|
||||
for(var i=0; i < keys.length; i++){
|
||||
formData.append(keys[i], vltnStngList[keys[i]]);
|
||||
}
|
||||
|
||||
ajax.post({
|
||||
url: wctx.url("/ogdp/updateTaskStng.do"),
|
||||
data: formData,
|
||||
contentType : false, processData : false,
|
||||
success: (resp) => {
|
||||
dialog.alert({
|
||||
content : "저장됐습니다.",
|
||||
init : function(){
|
||||
setDialogZindex();
|
||||
focusClose();
|
||||
},
|
||||
onClose : () => {
|
||||
$P.getSggTaskInfo().then(()=>{ $P.getVltnInfo(); });
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
$P.getRowData = (tbodyId, formData) => {
|
||||
var rowArr = [];
|
||||
$("#"+tbodyId+" tr").each(function(){
|
||||
var row = {};
|
||||
|
||||
row.vltnId = this.dataset.key;
|
||||
row.vltnArtcl = $($P.fnGetElement(this,"vltnArtcl")).val();
|
||||
row.vltnLawNm = $($P.fnGetElement(this,"vltnLawNm")).val();
|
||||
row.vltnLaw1 = $($P.fnGetElement(this,"vltnLaw1")).val();
|
||||
row.vltnLaw2 = $($P.fnGetElement(this,"vltnLaw2")).val();
|
||||
row.vltnLawEtc = $($P.fnGetElement(this,"vltnLawEtc")).val();
|
||||
row.acntgSeCd = $($P.fnGetElement(this,"acntgSeCd")).val();
|
||||
row.acntgSeNm = $($P.fnGetElement(this,"acntgSeNm")).val();
|
||||
row.txitmCd = $($P.fnGetElement(this,"txitmCd")).val();
|
||||
row.txitmNm = $($P.fnGetElement(this,"txitmNm")).val();
|
||||
row.operItemCd = $($P.fnGetElement(this,"operItemCd")).val();
|
||||
row.operItemNm = $($P.fnGetElement(this,"operItemNm")).val();
|
||||
row.spclBizCd = $($P.fnGetElement(this,"spclBizCd")).val();
|
||||
row.spclBizNm = $($P.fnGetElement(this,"spclBizNm")).val();
|
||||
|
||||
row.sggCd = formData.get("sggID");
|
||||
row.taskSeCd = formData.get("taskSeCd");
|
||||
|
||||
rowArr.push(row);
|
||||
});
|
||||
|
||||
return rowArr;
|
||||
};
|
||||
|
||||
|
||||
$P.fnGetElement = (tableRow, colName) => {
|
||||
return $(tableRow).find("td[data-col='"+colName+"']").children("input, select").first()[0];
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 초기화
|
||||
**************************************************************************/
|
||||
$P.getSggInfo()
|
||||
.then(() => {
|
||||
return $P.getSggTaskInfo();
|
||||
})
|
||||
.then(() => {
|
||||
return $P.getVltnInfo();
|
||||
});
|
||||
|
||||
|
||||
});
|
||||
|
||||
|
||||
</script>
|
||||
@ -1,338 +0,0 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
<c:set var="pageKorName" scope="request">부서관리</c:set>
|
||||
<div class="content-wrapper">
|
||||
<div class="container-xxl flex-grow-1 px-0">
|
||||
<div class="card wrapper-list">
|
||||
|
||||
<div class="container-page-btn">
|
||||
<button type="button" id="btnReset--${pageName}" class="btn btn-outline-dark w-px-120" title="초기화">
|
||||
초기화
|
||||
</button>
|
||||
<span class="container-window-btn-right">
|
||||
<button type="button" id="btnSearch--${pageName}" class="btn btn-search w-px-120" title="검색">
|
||||
검색
|
||||
</button>
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<form id="frmSearch--${pageName}" name="frmSearch">
|
||||
<div class="container-search">
|
||||
<div class="row g-1">
|
||||
<div class="col-3">
|
||||
<label class="form-label fw-bold form-search-title" for="sggCd--${pageName}">시군구</label>
|
||||
<select id="sggCd--${pageName}" name="sggCd" class="form-select" disabled>
|
||||
<option value="">전체</option>
|
||||
<c:forEach items="${sggList}" var="item">
|
||||
<option value="${item.SGG_CD}">${item.SGG_NM}</option>
|
||||
</c:forEach>
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-3">
|
||||
<label class="form-label fw-bold form-search-title" for="instNm--${pageName}">기관명</label>
|
||||
<input type="text" id="instNm--${pageName}" name="instNm" class="form-control" />
|
||||
</div>
|
||||
<div class="col-3">
|
||||
<label class="form-label fw-bold form-search-title" for="instCd--${pageName}">기관코드</label>
|
||||
<input type="text" id="instCd--${pageName}" name="instCd" class="form-control" maxlength="7" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="row g-1">
|
||||
<div class="col-3">
|
||||
<label class="form-label fw-bold form-search-title" for="deptNm--${pageName}">부서명</label>
|
||||
<input type="text" id="deptNm--${pageName}" name="deptNm" class="form-control" />
|
||||
</div>
|
||||
<div class="col-3">
|
||||
<label class="form-label fw-bold form-search-title" for="deptCd--${pageName}">부서코드</label>
|
||||
<input type="text" id="deptCd--${pageName}" name="deptCd" class="form-control" maxlength="7" />
|
||||
</div>
|
||||
<div class="col-6">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</form>
|
||||
|
||||
<div>
|
||||
<div id="gridbuttonArea--${pageName}" class="container-page-btn">
|
||||
<div class="d-flex flex-row justify-content-between">
|
||||
<span id="deptPaging--${pageName}PagingInfo" class="dataTables_info" role="status" aria-live="polite"></span>
|
||||
<ul id="deptPaging--${pageName}" class="pagination pagination-primary">
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card-datatable text-nowrap">
|
||||
<div id="DataTables_Table_0_wrapper--${pageName}" class="dataTables_wrapper dt-bootstrap5 no-footer">
|
||||
<div id="table-responsive--${pageName}" class="table-responsive ox-scroll oy-scroll h-px-500">
|
||||
<table id="DataTables_Table_0--${pageName}"
|
||||
class="table-layout-fixed datatables-ajax table table-bordered dataTable no-footer">
|
||||
<thead class="sticky-thead">
|
||||
<tr id="deptThead--${pageName}">
|
||||
<th style="width: 80px;" class="cmn">No.</th>
|
||||
<th class="cmn" style="width: 56px;">
|
||||
<input type="checkbox" class="form-check-input"
|
||||
onchange="pageObject['${pageName}'].deptControl.dataset.select(this.checked);" />
|
||||
</th>
|
||||
<th style="width: 200px;">시군구명</th>
|
||||
<th style="width: 200px;">시군구코드</th>
|
||||
<th style="width: 200px;">기관명</th>
|
||||
<th style="width: 200px;">기관코드</th>
|
||||
<th style="width: 200px;">부서명</th>
|
||||
<th style="width: 200px;">부서코드</th>
|
||||
<th style="width: 200px;">사용여부</th>
|
||||
<th class="dummy-th"></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="deptTbody--${pageName}">
|
||||
</tbody>
|
||||
<template id="deptRow--${pageName}">
|
||||
<tr data-key="{DEPT_CD}">
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-end">{ROW_NUM}</td>
|
||||
<td class="text-center">
|
||||
<input type="checkbox" class="form-check-input" name="gridCheckbox" value="{DEPT_CD}"
|
||||
onchange="pageObject['${pageName}'].deptControl.dataset.select('{DEPT_CD}', this.checked);">
|
||||
</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-start">{SGG_NM}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-center">{SGG_CD}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-start">{INST_NM}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-center">{INST_CD}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-start">{DEPT_NM}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-center">{DEPT_CD}</td>
|
||||
<td onclick="{onclick}" ondblclick="{ondblclick}" class="text-center">{USE_YN_NM}</td>
|
||||
<td class="dummy-td"></td>
|
||||
</tr>
|
||||
</template>
|
||||
<template id="deptNotFound--${pageName}">
|
||||
<tr>
|
||||
<td valign="top" colspan="10" class="dataTables_empty text-center">
|
||||
부서 정보를 찾지 못했습니다.
|
||||
</td>
|
||||
</tr>
|
||||
</template>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="toast-container position-fixed bottom-0 end-0 p-3">
|
||||
<div id="divToast--${pageName}" class="toast" role="alert" aria-live="assertive" aria-atomic="true">
|
||||
<div class="toast-body bg-black text-white">
|
||||
삭제 되었습니다.
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="content-backdrop fade"></div>
|
||||
</div>
|
||||
|
||||
|
||||
<script>
|
||||
|
||||
/**************************************************************************
|
||||
* Global Variable
|
||||
**************************************************************************/
|
||||
pageObject["${pageName}"] = {};
|
||||
|
||||
|
||||
$(document).ready(function(){
|
||||
|
||||
var $P = pageObject["${pageName}"];
|
||||
|
||||
$P.toast = new bootstrap.Toast(document.getElementById('divToast--${pageName}'), {
|
||||
animation: true,
|
||||
autohide: true,
|
||||
delay: 2000
|
||||
});
|
||||
|
||||
/**************************************************************************
|
||||
* DatasetControl
|
||||
**************************************************************************/
|
||||
$P.deptControl = new DatasetControl({
|
||||
dataGetter : obj => obj["List"], appendData:true,
|
||||
keymapper : info => info ? info.DEPT_CD : "",
|
||||
urls : {
|
||||
load : wctx.url("/ogdp/getDeptStngList.do"),
|
||||
getInfo : wctx.url("/ogdp/getDeptStngInfo.do")
|
||||
},
|
||||
formats: {
|
||||
REG_DT : datetimeFormat,
|
||||
MDFCN_DT : datetimeFormat
|
||||
}
|
||||
});
|
||||
$P.deptControl.defaultFetchSize = FETCH_XS;
|
||||
$P.deptControl.query = { pageNum : 1, fetchSize : $P.deptControl.defaultFetchSize };
|
||||
$P.deptControl.beforeCurrent = null;
|
||||
|
||||
|
||||
/**************************************************************************
|
||||
* Dataset.on
|
||||
**************************************************************************/
|
||||
$P.deptControl.dataset.onDatasetChange = (obj, option) => {
|
||||
var t = $P.getGridTemplate();
|
||||
var trs = Apply.fromDataset.getTbody($P.deptControl.dataset, t.found, t.notFound, t.replacer);
|
||||
$P.renderDeptList(obj["Total"], $P.deptControl.dataset.length, trs, option);
|
||||
|
||||
Apply.fromDataset.paging($P.deptControl.dataset, obj, "deptPaging--${pageName}");
|
||||
};
|
||||
|
||||
$P.deptControl.dataset.onCurrentChange = (dataItem) => {
|
||||
Apply.fromDataset.currentRow($P.deptControl.dataset, dataItem, $("#deptTbody--${pageName}")[0]);
|
||||
}
|
||||
|
||||
$P.deptControl.dataset.onSelectionChange = (selectedArr) => {
|
||||
Apply.fromDataset.gridCheckbox($P.deptControl.dataset, document.getElementById("deptTbody--${pageName}"), 1, selectedArr);
|
||||
|
||||
};
|
||||
|
||||
/**************************************************************************
|
||||
* pageObject.function
|
||||
**************************************************************************/
|
||||
$P.fnReset = () => {
|
||||
var searchForm = $("#frmSearch--${pageName}");
|
||||
searchForm.find("input[type='radio']").not("[name='taskSeCd']").prop("checked", false);
|
||||
searchForm.find("input[type='checkbox']").prop("checked", false);
|
||||
searchForm.find("input[type='hidden']").val("");
|
||||
searchForm.find("input[type='text']").val("");
|
||||
|
||||
searchForm.find("select[name='sggCd']").val(MY_INFO.info.sggCd);
|
||||
|
||||
$P.deptControl.dataset.setData([]);
|
||||
}
|
||||
|
||||
$P.getParams = () => {
|
||||
var formFields = new FimsFormFields("#frmSearch--${pageName}");
|
||||
var data = formFields.get();
|
||||
data.fetchSize = $P.deptControl.defaultFetchSize;
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
$P.searchDeptList = () => {
|
||||
$P.deptControl.query = $P.getParams();
|
||||
$P.deptControl.load(1);
|
||||
}
|
||||
|
||||
$P.scrollDeptList = () => {
|
||||
$P.deptControl.load($P.deptControl.query.pageNum + 1);
|
||||
}
|
||||
|
||||
$P.refreshDeptList = () => {
|
||||
if($P.deptControl.query.pageNum == null){
|
||||
return;
|
||||
}
|
||||
|
||||
$P.deptControl.reload({all : true});
|
||||
}
|
||||
|
||||
$P.getGridTemplate = () => {
|
||||
var notFound = [document.getElementById("deptNotFound--${pageName}").innerHTML];
|
||||
var found = document.getElementById("deptRow--${pageName}").innerHTML;
|
||||
var replacer = (str, dataItem) => str
|
||||
.replace(/{onclick}/gi, "pageObject['${pageName}'].clickDeptList('" + dataItem.getValue("DEPT_CD") + "');")
|
||||
.replace(/{ondblclick}/gi, "pageObject['${pageName}'].dblclickDeptList('" + dataItem.getValue("DEPT_CD") + "');");
|
||||
|
||||
return {
|
||||
found : found,
|
||||
notFound : notFound,
|
||||
replacer : replacer
|
||||
};
|
||||
}
|
||||
|
||||
$P.renderDeptList = (total, listLength, trs, option) => {
|
||||
|
||||
let noMore = (listLength >= total);
|
||||
var initScroll = ($P.deptControl.query.pageNum < 2);
|
||||
if(option != null && option.reloaded){
|
||||
initScroll = false;
|
||||
}
|
||||
|
||||
$("#table-responsive--${pageName}")[0].changeContent(trs, initScroll, noMore);
|
||||
|
||||
fn_securityModeToggle($("#securityMode--top").is(":checked")); //보안모드
|
||||
|
||||
}
|
||||
|
||||
$P.clickDeptList = (dataKey) => {
|
||||
if(dataKey == ""){
|
||||
return;
|
||||
}
|
||||
|
||||
$("#deptTbody--${pageName}").setCurrentRow(dataKey);
|
||||
|
||||
Apply.toDataset.current($P.deptControl.dataset, dataKey);
|
||||
}
|
||||
|
||||
$P.dblclickDeptList = (dataKey) => {
|
||||
$P.getInfo(dataKey);
|
||||
}
|
||||
|
||||
|
||||
|
||||
$P.getInfo = (deptCd) => {
|
||||
var params = {};
|
||||
params.deptCd = deptCd;
|
||||
|
||||
ajax.get({
|
||||
url : $P.deptControl.urls.getInfo,
|
||||
data : params,
|
||||
success : (resp) => {
|
||||
|
||||
dialog.open({
|
||||
id : "deptInfoDialog",
|
||||
title : "부서 정보",
|
||||
size : "xl",
|
||||
content : resp,
|
||||
init : () => {
|
||||
var parentRes = new Object();
|
||||
var childReq = pageObject.childReq.pop();
|
||||
|
||||
for(var reqKey in childReq) {
|
||||
if($P.provide[reqKey]){
|
||||
parentRes[reqKey] = $P.provide[reqKey];
|
||||
} else {
|
||||
parentRes[reqKey] = function(){};
|
||||
}
|
||||
}
|
||||
|
||||
pageObject.parentRes.push(parentRes);
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
$P.provide = {
|
||||
"refreshList" : function(){
|
||||
$P.refreshDeptList();
|
||||
},
|
||||
};
|
||||
|
||||
/**************************************************************************
|
||||
* element.on
|
||||
**************************************************************************/
|
||||
$('#btnReset--${pageName}').on('click', () => $P.fnReset());
|
||||
$('#btnSearch--${pageName}').on('click', () => $P.searchDeptList());
|
||||
|
||||
/**************************************************************************
|
||||
* 초기화
|
||||
**************************************************************************/
|
||||
fnMakeResizableTable($("#table-responsive--${pageName}")[0]);
|
||||
fnMakeScrollableTable($("#table-responsive--${pageName}")[0], $P.scrollDeptList);
|
||||
|
||||
$P.fnReset();
|
||||
fn_securityModeToggle($("#securityMode--top").is(":checked")); //보안모드
|
||||
|
||||
if(MY_INFO.institute == "ADMIN00"){
|
||||
$("#sggCd--${pageName}").removeAttr("disabled");
|
||||
}
|
||||
});
|
||||
|
||||
</script>
|
||||
@ -1,361 +0,0 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
<c:set var="pageKorName" scope="request">부서 정보</c:set>
|
||||
<div class="content-wrapper">
|
||||
<div class="container-xxl flex-grow-1 px-0">
|
||||
|
||||
<div class="card">
|
||||
<form id="frmEdit--${pageName}" name="frmEdit">
|
||||
|
||||
<div class="row g-1" id="forRootAdmin--${pageName}" hidden>
|
||||
<div class="col-md-6">
|
||||
<label for="sggID--${pageName}"
|
||||
class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end required">
|
||||
시군구코드
|
||||
</label>
|
||||
|
||||
<input type="text" id="sggID--${pageName}" name="sggID" data-map="SGG_CD"
|
||||
class="form-control" required maxlength="7" readonly />
|
||||
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<label for="instCode--${pageName}"
|
||||
class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end required">
|
||||
기관코드
|
||||
</label>
|
||||
|
||||
<input type="text" id="instCode--${pageName}" name="instCode" data-map="INST_CD"
|
||||
class="form-control" required maxlength="7" readonly />
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="row g-1">
|
||||
|
||||
<div class="col-md-6">
|
||||
<label for="deptID--${pageName}"
|
||||
class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end required">
|
||||
부서코드
|
||||
</label>
|
||||
|
||||
<input type="text" id="deptID--${pageName}" name="deptID" data-map="DEPT_CD"
|
||||
class="form-control" required maxlength="7" readonly />
|
||||
|
||||
</div>
|
||||
|
||||
<div class="col-md-6">
|
||||
<label for="name--${pageName}"
|
||||
class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end required">
|
||||
부서명
|
||||
</label>
|
||||
|
||||
<input type="text" id="name--${pageName}" name="name" data-map="DEPT_NM"
|
||||
class="form-control" required readonly />
|
||||
|
||||
</div>
|
||||
|
||||
<div class="col-md-12" hidden>
|
||||
<input type="text" id="telno--${pageName}" name="telno" data-map="DEPT_TELNO"
|
||||
class="form-control" />
|
||||
<input type="text" id="faxno--${pageName}" name="faxno" data-map="DEPT_FXNO"
|
||||
class="form-control" />
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="row g-1">
|
||||
<div class="col-md-6">
|
||||
<label for="cvlcptLinkSeCd--${pageName}"
|
||||
class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">
|
||||
민원연계구분
|
||||
</label>
|
||||
<input type="text" id="cvlcptLinkSeCd--${pageName}" name="cvlcptLinkSeCd" data-map="CVLCPT_LINK_SE_CD"
|
||||
class="form-control" />
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<label for="vrbacntLinkSeCd--${pageName}"
|
||||
class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">
|
||||
가상계좌연계구분
|
||||
</label>
|
||||
<input type="text" id="vrbacntLinkSeCd--${pageName}" name="vrbacntLinkSeCd" data-map="VRBACNT_LINK_SE_CD"
|
||||
class="form-control" />
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<label for="pstofcNm--${pageName}"
|
||||
class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">
|
||||
우체국명
|
||||
</label>
|
||||
<input type="text" id="pstofcNm--${pageName}" name="pstofcNm" data-map="PSTOFC_NM"
|
||||
class="form-control" />
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<label for="rgNoHeader--${pageName}"
|
||||
class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">
|
||||
등기번호 헤더
|
||||
</label>
|
||||
<input type="text" id="rgNoHeader--${pageName}" name="rgNoHeader" data-map="RG_NO_HEADER"
|
||||
class="form-control" />
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<label for="sndngLinkSeCd--${pageName}"
|
||||
class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">
|
||||
발송연계구분
|
||||
</label>
|
||||
<input type="text" id="sndngLinkSeCd--${pageName}" name="sndngLinkSeCd" data-map="SNDNG_LINK_SE_CD"
|
||||
class="form-control" />
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<label for="egpConOrg--${pageName}"
|
||||
class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">
|
||||
E그린 외부기관구분
|
||||
</label>
|
||||
<input type="text" id="egpConOrg--${pageName}" name="egpConOrg" data-map="EGP_CON_ORG"
|
||||
class="form-control" />
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<label for="egpRceptId--${pageName}"
|
||||
class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">
|
||||
E그린 접수수체국기호
|
||||
</label>
|
||||
<input type="text" id="egpRceptId--${pageName}" name="egpRceptId" data-map="EGP_RCEPT_ID"
|
||||
class="form-control" />
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<label for="egpApvlNb--${pageName}"
|
||||
class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">
|
||||
E그린 후납계약승인번호
|
||||
</label>
|
||||
<input type="text" id="egpApvlNb--${pageName}" name="egpApvlNb" data-map="EGP_APVL_NB"
|
||||
class="form-control" />
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<label for="egpEsbPath--${pageName}"
|
||||
class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">
|
||||
E그린 ESB경로
|
||||
</label>
|
||||
<input type="text" id="egpEsbPath--${pageName}" name="egpEsbPath" data-map="EGP_ESB_PATH"
|
||||
class="form-control" />
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<label for="egpPostInstId--${pageName}"
|
||||
class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">
|
||||
E그린 우정정보센터 기관ID
|
||||
</label>
|
||||
<input type="text" id="egpPostInstId--${pageName}" name="egpPostInstId" data-map="EGP_POST_INST_ID"
|
||||
class="form-control" />
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<label for="egpCertCn--${pageName}"
|
||||
class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">
|
||||
E그린 인증서CN
|
||||
</label>
|
||||
<input type="text" id="egpCertCn--${pageName}" name="egpCertCn" data-map="EGP_CERT_CN"
|
||||
class="form-control" />
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<label for="ensInterfaceId--${pageName}"
|
||||
class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">
|
||||
세외수입인터페이스ID
|
||||
</label>
|
||||
<input type="text" id="ensInterfaceId--${pageName}" name="ensInterfaceId" data-map="ENS_INTERFACE_ID"
|
||||
class="form-control" />
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<label for="ensSourceCd--${pageName}"
|
||||
class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">
|
||||
세외수입소스코드
|
||||
</label>
|
||||
<input type="text" id="ensSourceCd--${pageName}" name="ensSourceCd" data-map="ENS_SOURCE_CD"
|
||||
class="form-control" />
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<label for="ensTargetCd--${pageName}"
|
||||
class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">
|
||||
세외수입타겟코드
|
||||
</label>
|
||||
<input type="text" id="ensTargetCd--${pageName}" name="ensTargetCd" data-map="ENS_TARGET_CD"
|
||||
class="form-control" />
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<label for="ensUrl--${pageName}"
|
||||
class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">
|
||||
세외수입URL
|
||||
</label>
|
||||
<input type="text" id="ensUrl--${pageName}" name="ensUrl" data-map="ENS_URL"
|
||||
class="form-control" />
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<label for="nxrpLinkYn--${pageName}"
|
||||
class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">
|
||||
세외수입 연계 여부
|
||||
</label>
|
||||
<input type="text" id="nxrpLinkYn--${pageName}" name="nxrpLinkYn" data-map="NXRP_LINK_YN"
|
||||
class="form-control" />
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<label for="nxrpLinkSrvcUrl--${pageName}"
|
||||
class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">
|
||||
세외수입연계서비스URL
|
||||
</label>
|
||||
<input type="text" id="nxrpLinkSrvcUrl--${pageName}" name="nxrpLinkSrvcUrl" data-map="NXRP_LINK_SRVC_URL"
|
||||
class="form-control" />
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<label for="nxrpRgnSeCd--${pageName}"
|
||||
class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">
|
||||
세외수입지역구분코드
|
||||
</label>
|
||||
<input type="text" id="nxrpRgnSeCd--${pageName}" name="nxrpRgnSeCd" data-map="NXRP_RGN_SE_CD"
|
||||
class="form-control" />
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<label for="dtbnBankNm--${pageName}"
|
||||
class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">
|
||||
교부은행명
|
||||
</label>
|
||||
<input type="text" id="dtbnBankNm--${pageName}" name="dtbnBankNm" data-map="DTBN_BANK_NM"
|
||||
class="form-control" />
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<label for="dtbnActno--${pageName}"
|
||||
class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">
|
||||
교부계좌번호
|
||||
</label>
|
||||
<input type="text" id="dtbnActno--${pageName}" name="dtbnActno" data-map="DTBN_ACTNO"
|
||||
class="form-control" />
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<label for="docHeader--${pageName}"
|
||||
class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">
|
||||
문서머릿말
|
||||
</label>
|
||||
<input type="text" id="docHeader--${pageName}" name="docHeader" data-map="DOC_HEADER"
|
||||
class="form-control" />
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<label for="srvrOs--${pageName}"
|
||||
class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">
|
||||
서버OS
|
||||
</label>
|
||||
<input type="text" id="srvrOs--${pageName}" name="srvrOs" data-map="SRVR_OS"
|
||||
class="form-control" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row m-3">
|
||||
<div class="col-md-12">
|
||||
<span class="float-end">
|
||||
<button type="button" id="btnSave--${pageName}" class="btn btn-primary">저장</button>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
pageObject["${pageName}"] = {};
|
||||
pageObject["${pageName}"].provided = {};
|
||||
|
||||
pageObject.childReq = [];
|
||||
pageObject.childReq.push({
|
||||
refreshList : function(){ },
|
||||
});
|
||||
|
||||
$(document).ready(function(){
|
||||
|
||||
var $P = pageObject["${pageName}"];
|
||||
|
||||
if(pageObject.parentRes.length > 0){
|
||||
$P.provided = pageObject.parentRes.pop();
|
||||
} else {
|
||||
$P.provided = pageObject.childReq.pop();
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* DatasetControl, Dataset, FormFields
|
||||
**************************************************************************/
|
||||
$P.formFields = new FimsFormFields("#frmEdit--${pageName}");
|
||||
|
||||
$P.deptControl = new DatasetControl({
|
||||
dataGetter : obj => obj["List"], appendData : true,
|
||||
keymapper : info => info ? info.DEPT_CD : "",
|
||||
urls : {
|
||||
update : wctx.url("/ogdp/updateDeptStng.do")
|
||||
},
|
||||
formats: {
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
/**************************************************************************
|
||||
* Dataset.on
|
||||
**************************************************************************/
|
||||
$P.deptControl.dataset.onCurrentChange = (dataItem) => {
|
||||
if(!dataItem){
|
||||
return;
|
||||
}
|
||||
$P.formFields.set($P.deptControl,dataItem);
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* pageObject.function
|
||||
**************************************************************************/
|
||||
$P.fnSave = () => {
|
||||
|
||||
if(!customValidate($("#frmEdit--${pageName} input"))) return;
|
||||
|
||||
var info = $P.formFields.get();
|
||||
if(info.deptID.length != 7){
|
||||
alert("부서코드는 7자리 숫자이여야 합니다.");
|
||||
return;
|
||||
}
|
||||
|
||||
var create = $P.deptControl.dataset.empty;
|
||||
|
||||
ajax.post({
|
||||
url : create ? $P.deptControl.urls.create : $P.deptControl.urls.update,
|
||||
data : info,
|
||||
success : (resp) => {
|
||||
if(resp.saved){
|
||||
dialog.close("deptInfoDialog");
|
||||
dialog.alert({
|
||||
content:"저장되었습니다.",
|
||||
onOK : () => $P.provided.refreshList()
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* element.on
|
||||
**************************************************************************/
|
||||
$("#btnSave--${pageName}").on('click', () => $P.fnSave());
|
||||
|
||||
|
||||
/**************************************************************************
|
||||
* 초기화
|
||||
**************************************************************************/
|
||||
|
||||
if(MY_INFO.institute == 'ADMIN00') {
|
||||
$("#forRootAdmin--${pageName}").removeAttr("hidden");
|
||||
}
|
||||
|
||||
var deptInfo = ${deptInfo};
|
||||
$("#deptID--${pageName}").attr("disabled","disabled");
|
||||
$("#name--${pageName}").attr("disabled","disabled");
|
||||
$P.deptControl.dataset.setData([deptInfo]);
|
||||
if(deptInfo.USE_YN == "N"){
|
||||
$("#btnSave--${pageName}").attr("disabled","disabled");
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
</script>
|
||||
@ -1,37 +0,0 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
<c:set var="pageKorName" scope="request">시군구 목록</c:set>
|
||||
<div class="content-wrapper">
|
||||
<div class="container-xxl flex-grow-1 px-0">
|
||||
<div class="card wrapper-list">
|
||||
<h1>시군구 선택</h1>
|
||||
<div id="btnsGoToEditSgg--${pageName}">
|
||||
<c:forEach items="${sggList}" var="item">
|
||||
<c:if test="${item.SGG_CD ne 'ADMIN'}">
|
||||
<button type="button" data-value="${item.SGG_CD}" class="w-px-200"
|
||||
onclick="fnGoToEditSgg('${item.SGG_CD}')">
|
||||
${item.SGG_NM}(${item.SGG_CD})
|
||||
</button>
|
||||
</c:if>
|
||||
</c:forEach>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
function fnGoToEditSgg(selected){
|
||||
|
||||
let menuUrl = wctx.url("/ogdp/sggStngMain.do");
|
||||
|
||||
let curTabId = getActiveRootTabArea().id;
|
||||
|
||||
ajax.get({
|
||||
url: menuUrl,
|
||||
data : { sggCd : selected },
|
||||
success:(resp) => {
|
||||
$("#main-tab-content").find("div[id='"+curTabId+"']").html(resp);
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
</script>
|
||||
@ -1,435 +0,0 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
|
||||
<c:set var="prefixName" scope="request">납부자 상세 정보</c:set>
|
||||
|
||||
<!-- inner page html -->
|
||||
<div class="content-pop">
|
||||
<!-- Content -->
|
||||
<div class="container flex-grow-1 px-0">
|
||||
<div class="card">
|
||||
<!-- 입력 영역 -->
|
||||
<form id="frmEdit--${pageName}" name="frmEdit">
|
||||
<!-- hidden -->
|
||||
<input type="hidden" id="sggCd--${pageName}" name="sggCd" data-map="SGG_CD" />
|
||||
<input type="hidden" id="taskSeCd--${pageName}" name="taskSeCd" data-map="TASK_SE_CD" />
|
||||
<input type="hidden" id="crdnId--${pageName}" name="crdnId" data-map="CRDN_ID" />
|
||||
<input type="hidden" id="rtpyrId--${pageName}" name="rtpyrId" data-map="RTPYR_ID" />
|
||||
<input type="hidden" id="addrSn--${pageName}" name="addrSn" data-map="ADDR_SN" />
|
||||
<input type="hidden" id="rtpyrInptSeCd--${pageName}" name="rtpyrInptSeCd" data-map="RTPYR_INPT_SE_CD" />
|
||||
<input type="hidden" id="addrInptSeCd--${pageName}" name="addrInptSeCd" data-map="ADDR_INPT_SE_CD" />
|
||||
|
||||
<div class="row g-1">
|
||||
<!-- 단속일시 -->
|
||||
<div class="col-md-6">
|
||||
<label for="crdnYmdTm--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">단속일시</label>
|
||||
<input type="text" class="form-control w-35" id="crdnYmdTm--${pageName}" name="crdnYmdTm" data-map="CRDN_YMD_TM" readonly />
|
||||
</div>
|
||||
<!-- 차량번호 -->
|
||||
<div class="col-md-6">
|
||||
<label for="vhrno--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">차량번호</label>
|
||||
<input type="text" class="form-control w-25" id="vhrno--${pageName}" name="vhrno" data-map="VHRNO" readonly />
|
||||
<button type="button" class="btn btn-sm btn-outline-dark" id="btnVehicle--${pageName}" title="차량 검색"">
|
||||
검색
|
||||
</button>
|
||||
</div>
|
||||
<!-- 납부자 구분 코드 -->
|
||||
<div class="col-md-6">
|
||||
<label for="rtpyrSeCd--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end required">납부자 구분</label>
|
||||
<select class="form-select" id="rtpyrSeCd--${pageName}" name="rtpyrSeCd" data-map="RTPYR_SE_CD" required>
|
||||
<option value="">선택하세요</option>
|
||||
<c:forEach items="${FIM011List}" var="item">
|
||||
<option value="${item.code}">${item.value}</option>
|
||||
</c:forEach>
|
||||
</select>
|
||||
</div>
|
||||
<!-- 납부자 상태 코드 -->
|
||||
<div class="col-md-6">
|
||||
<label for="rtpyrSttsCd--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">납부자 상태</label>
|
||||
<select class="form-select" id="rtpyrSttsCd--${pageName}" name="rtpyrSttsCd" data-map="RTPYR_STTS_CD">
|
||||
<option value="">선택하세요</option>
|
||||
<c:forEach items="${FIM014List}" var="item">
|
||||
<option value="${item.code}">${item.value}</option>
|
||||
</c:forEach>
|
||||
</select>
|
||||
</div>
|
||||
<!-- 납부자 명 -->
|
||||
<div class="col-md-6">
|
||||
<label for="rtpyrNm--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end required">납부자 성명</label>
|
||||
<input type="text" class="form-control w-35" id="rtpyrNm--${pageName}" name="rtpyrNm" data-map="RTPYR_NM" required />
|
||||
</div>
|
||||
<!-- 납부자 번호 -->
|
||||
<div class="col-md-6">
|
||||
<label for="rtpyrNo--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end required">납부자 번호</label>
|
||||
<input type="text" class="form-control w-30" id="rtpyrNo--${pageName}" name="rtpyrNo" data-map="RTPYR_NO" required />
|
||||
</div>
|
||||
<!-- 납부자 전화번호 -->
|
||||
<div class="col-md-6">
|
||||
<label for="rtpyrTelno--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">전화번호</label>
|
||||
<input type="text" class="form-control w-35" id="rtpyrTelno--${pageName}" name="rtpyrTelno" data-map="RTPYR_TELNO" />
|
||||
</div>
|
||||
<!-- 납부자 휴대전화번호 -->
|
||||
<div class="col-md-6">
|
||||
<label for="rtpyrMblTelno--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">휴대전화번호</label>
|
||||
<input type="text" class="form-control w-35" id="rtpyrMblTelno--${pageName}" name="rtpyrMblTelno" data-map="RTPYR_MBL_TELNO" />
|
||||
</div>
|
||||
<!-- 납부자 이메일 -->
|
||||
<div class="col-md-12">
|
||||
<label for="rtpyrEml--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">이메일</label>
|
||||
<input type="text" class="form-control w-30" id="rtpyrEml--${pageName}" name="rtpyrEml" data-map="RTPYR_EML" />
|
||||
</div>
|
||||
<!-- 주소 --><!-- 우편번호 -->
|
||||
<div class="col-md-12">
|
||||
<label for="addr--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end required">주소</label>
|
||||
<input type="text" class="form-control w-70" id="addr--${pageName}" name="addr" data-map="ADDR" required />
|
||||
<input type="text" class="form-control w-px-75" id="zip--${pageName}" name="zip" data-map="ZIP" required />
|
||||
<button type="button" class="btn btn-sm btn-outline-dark" id="btnZipCode--${pageName}" title="우편번호검색">
|
||||
검색
|
||||
</button>
|
||||
</div>
|
||||
<!-- 상세주소 -->
|
||||
<div class="col-md-12">
|
||||
<label for="dtlAddr--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">상세주소</label>
|
||||
<input type="text" class="form-control w-78" id="dtlAddr--${pageName}" name="dtlAddr" data-map="DTL_ADDR" />
|
||||
<button type="button" class="btn btn-sm btn-outline-dark" id="btnEditAddr--${pageName}" title="주소수정">
|
||||
주소수정
|
||||
</button>
|
||||
</div>
|
||||
<!-- 도로명 코드 -->
|
||||
<div class="col-md-12">
|
||||
<label for="roadNmCd--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">도로명코드</label>
|
||||
<input type="text" class="form-control w-px-120" id="roadNmCd--${pageName}" name="roadNmCd" data-map="ROAD_NM_CD" readonly />
|
||||
<input type="text" class="form-control w-px-30" id="udgdSeCd--${pageName}" name="udgdSeCd" data-map="UDGD_SE_CD" readonly />
|
||||
<input type="text" class="form-control w-px-60" id="bmno--${pageName}" name="bmno" data-map="BMNO" readonly />
|
||||
<input type="text" class="form-control w-px-60" id="bsno--${pageName}" name="bsno" data-map="BSNO" readonly />
|
||||
<input type="text" class="form-control w-px-230" id="bldgMngNo--${pageName}" name="bldgMngNo" data-map="BLDG_MNG_NO" readonly />
|
||||
</div>
|
||||
<!-- 법정동 코드 -->
|
||||
<div class="col-md-6">
|
||||
<label for="stdgCd--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">법정동코드</label>
|
||||
<input type="text" class="form-control w-30" id="stdgCd--${pageName}" name="stdgCd" data-map="STDG_CD" readonly />
|
||||
<input type="text" class="form-control w-px-30" id="mtnSeCd--${pageName}" name="mtnSeCd" data-map="MTN_SE_CD" readonly />
|
||||
<input type="text" class="form-control w-px-50" id="mno--${pageName}" name="mno" data-map="MNO" readonly />
|
||||
<input type="text" class="form-control w-px-50" id="sno--${pageName}" name="sno" data-map="SNO" readonly />
|
||||
</div>
|
||||
<!-- 행정동 코드 -->
|
||||
<div class="col-md-6">
|
||||
<label for="dongCd--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">행정동코드</label>
|
||||
<input type="text" class="form-control w-30" id="dongCd--${pageName}" name="dongCd" data-map="DONG_CD" readonly />
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<!-- 입력 영역 -->
|
||||
|
||||
<!-- 업무 버튼 및 건수 표시 -->
|
||||
<div>
|
||||
<span class="container-page-btn">
|
||||
<!-- 업무 버튼 -->
|
||||
<span class="container-window-btn-right">
|
||||
<button type="button" class="btn btn-primary w-px-80" id="btnSave--${pageName}" title="저장">저장</button>
|
||||
</span>
|
||||
</span>
|
||||
</div>
|
||||
<!-- 업무 버튼 및 건수 표시 -->
|
||||
</div> <!-- <div class="card"> -->
|
||||
</div> <!-- <div class="container flex-grow-1 px-0"> -->
|
||||
<!-- Content -->
|
||||
</div>
|
||||
<!-- / inner page html <div class="content-pop"> -->
|
||||
|
||||
<script>
|
||||
/**************************************************************************
|
||||
* Global Variable
|
||||
**************************************************************************/
|
||||
pageObject["${pageName}"] = {};
|
||||
|
||||
/**************************************************************************
|
||||
* script 진입
|
||||
**************************************************************************/
|
||||
$(document).ready(function() {
|
||||
// pageObject
|
||||
let $P = pageObject["${pageName}"];
|
||||
|
||||
// FormFields
|
||||
$P.formFields = new FimsFormFields("#frmEdit--${pageName}");
|
||||
|
||||
/**************************************************************************
|
||||
* DatasetControl
|
||||
**************************************************************************/
|
||||
$P.control = new DatasetControl({
|
||||
prefix: "payer"
|
||||
, prefixName: "납부자"
|
||||
, keymapper: info => info ? info.RTPYR_ID : ""
|
||||
, dataGetter: obj => obj.${infoPrefix}Info
|
||||
, formats: {
|
||||
CRDN_YMD_TM: datetimeFormat
|
||||
}
|
||||
});
|
||||
|
||||
/**************************************************************************
|
||||
* DatasetControl 이벤트
|
||||
**************************************************************************/
|
||||
// 현재 선택 자료 변경 이벤트
|
||||
$P.control.onCurrentChange = (item) => {
|
||||
if (!item) return;
|
||||
|
||||
// Dataset 셋팅
|
||||
$P.formFields.set($P.control, item);
|
||||
|
||||
// 업무구분에 따른 URL 변경
|
||||
$P.fnSetURL(item.data.TASK_SE_CD);
|
||||
}
|
||||
|
||||
// 저장 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
|
||||
, onOK: () => { }
|
||||
});
|
||||
|
||||
if (resp.saved) {
|
||||
dialog.close($P.control.prefix + "Dialog--${openerPageName}");
|
||||
}
|
||||
}
|
||||
|
||||
// 저장
|
||||
$P.control.save = (info) => {
|
||||
if (!info) return;
|
||||
|
||||
if ($("#rtpyrInptSeCd--${pageName}").val() == "") {
|
||||
info.rtpyrInptSeCd = "01"; // 납부자 입력 구분 코드(FIM015) 01:수기입력
|
||||
}
|
||||
if ($("#addrInptSeCd--${pageName}").val() == "") {
|
||||
info.addrInptSeCd = "01"; // 주소 입력 구분 코드(FIM087) 01:수기입력
|
||||
}
|
||||
if (info.rtpyrSeCd == "01") {
|
||||
info.rtpyrBrdt = info.rtpyrNo.substr(0, 6); // 생년월일
|
||||
}
|
||||
info.wholAddr = info.addr + ", " + info.dtlAddr // 전체 주소
|
||||
|
||||
ajax.post({
|
||||
url: $P.control.urls.create
|
||||
, data: info || {}
|
||||
, success: resp => $P.control.onSave(resp)
|
||||
});
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 사용자 함수(function)
|
||||
**************************************************************************/
|
||||
// 업무구분에 따른 URL 설정
|
||||
$P.fnSetURL = (taskSeCd) => {
|
||||
$P.control.urls.create = wctx.url("/" + taskSeCd + "/payer" + "/createCrdnPayer.do"); // 등록
|
||||
}
|
||||
|
||||
//
|
||||
$P.callbackVehicle = (info) => {
|
||||
let pyrSeCd = "";
|
||||
switch (info.mber_se_code) {
|
||||
case "11": pyrSeCd = "01"; break;
|
||||
case "12": pyrSeCd = "02"; break;
|
||||
case "13": pyrSeCd = "03"; break;
|
||||
case "14": pyrSeCd = "04"; break;
|
||||
case "15": pyrSeCd = "05"; break;
|
||||
}
|
||||
|
||||
$("#rtpyrSeCd--${pageName}").val(pyrSeCd); // 납부자 구분 코드
|
||||
$("#rtpyrNm--${pageName}").val(info.mber_nm); // 납부자 성명
|
||||
$("#rtpyrNo--${pageName}").val(info.mber_se_no); // 납부자 번호
|
||||
$("#addr--${pageName}").val(info.road_nm_adres); // 주소
|
||||
$("#zip--${pageName}").val(info.zip_code); // 우편번호
|
||||
$("#dtlAddr--${pageName}").val(info.use_strnghld_adres_nm); // 사용본거지 상세주소
|
||||
$("#roadNmCd--${pageName}").val(info.use_strnghld_road_nm_code); // 사용본거지 도로명 코드
|
||||
$("#udgdSeCd--${pageName}").val(info.usgsrhld_undgrnd_buld_se_code); // 사용본거지 지하 구분 코드
|
||||
$("#bmno--${pageName}").val(info.use_strnghld_buld_main_no); // 사용본거지 건물 본번
|
||||
$("#bsno--${pageName}").val(info.use_strnghld_buld_sub_no); // 사용본거지 건물 부번
|
||||
$("#bldgMngNo--${pageName}").val(""); // 건물 관리 번호
|
||||
$("#stdgCd--${pageName}").val(info.use_strnghld_legaldong_code); // 사용본거지 법정동 코드
|
||||
$("#mtnSeCd--${pageName}").val(info.use_strnghld_mntn); // 사용본거지 산
|
||||
$("#mno--${pageName}").val(info.use_strnghld_lnbr); // 사용본거지 번지
|
||||
$("#sno--${pageName}").val(info.use_strnghld_ho); // 사용본거지 호
|
||||
$("#dongCd--${pageName}").val(info.use_strnghld_adstrd_code); // 사용본거지 행정동 코드
|
||||
|
||||
$("#rtpyrInptSeCd--${pageName}").val("02"); // 납부자 입력 구분 코드(FIM015) 02:자동차관리정보시스템
|
||||
$("#addrInptSeCd--${pageName}").val("02"); // 주소 입력 구분 코드(FIM087) 02:자동차관리정보시스템
|
||||
}
|
||||
|
||||
// 우편번호 검색 결과
|
||||
$P.callbackSearchAddr = (obj) => {
|
||||
$("#addr--${pageName}").val(obj.ADDR); // 주소
|
||||
$("#zip--${pageName}").val(obj.ZIP); // 우편번호
|
||||
$("#dtlAddr--${pageName}").val(obj.DTL_ADDR); // 상세 주소
|
||||
$("#roadNmCd--${pageName}").val(obj.ROAD_NM_CD); // 도로명 코드
|
||||
$("#udgdSeCd--${pageName}").val(obj.UDGD_SE_CD); // 지하 구분 코드
|
||||
$("#bmno--${pageName}").val(obj.BMNO); // 건물 본번
|
||||
$("#bsno--${pageName}").val(obj.BSNO); // 건물 부번
|
||||
$("#bldgMngNo--${pageName}").val(obj.BLDG_MNG_NO); // 건물 관리 번호
|
||||
$("#stdgCd--${pageName}").val(obj.STDG_CD); // 법정동 코드
|
||||
$("#mtnSeCd--${pageName}").val(obj.MTN_SE_CD); // 산
|
||||
$("#mno--${pageName}").val(obj.MNO); // 번지
|
||||
$("#sno--${pageName}").val(obj.SNO); // 호
|
||||
$("#dongCd--${pageName}").val(obj.DONG_CD); // 행정동
|
||||
|
||||
$("#rtpyrInptSeCd--${pageName}").val("01"); // 납부자 입력 구분 코드(FIM015) 01:수기입력
|
||||
$("#addrInptSeCd--${pageName}").val("01"); // 주소 입력 구분 코드(FIM087) 01:수기입력
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 버튼 clickEvent
|
||||
**************************************************************************/
|
||||
// 차적 검색
|
||||
$P.fnGetVehicle = () => {
|
||||
let crdnYmd = $P.control.getValue("CRDN_YMD");
|
||||
let vhrno = $("#vhrno--${pageName}").val();
|
||||
|
||||
if (crdnYmd == "") {
|
||||
dialog.alert({
|
||||
content: "단속일자를 입력하세요."
|
||||
});
|
||||
return;
|
||||
}
|
||||
if (vhrno == "") {
|
||||
dialog.alert({
|
||||
content: "차량번호를 입력하세요.",
|
||||
onClose: function() {
|
||||
$("#vhrno--${pageName}").focus();
|
||||
}
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
let params = {
|
||||
inqire_se_code: "3"
|
||||
, sggCd: $("#sggCd--${pageName}").val()
|
||||
, levy_stdde: crdnYmd
|
||||
, vhrno: vhrno
|
||||
}
|
||||
|
||||
json.post({
|
||||
url: wctx.url("/payer/vehicle.do")
|
||||
, data: params || {}
|
||||
, success: resp => {
|
||||
if (!resp.found) {
|
||||
$("#rtpyrId--${pageName}").val(""); // 납부자 ID
|
||||
$("#rtpyrSeCd--${pageName}").val(""); // 납부자 입력 구분 코드
|
||||
$("#rtpyrNm--${pageName}").val(""); // 납부자 성명
|
||||
$("#rtpyrNo--${pageName}").val(""); // 납부자 번호
|
||||
$("#rtpyrTelno--${pageName}").val(""); // 납부자 전화번호
|
||||
$("#rtpyrMblTelno--${pageName}").val(""); // 납부자 휴대 전화번호
|
||||
$("#rtpyrEml--${pageName}").val(""); // 납부자 이메일
|
||||
$("#zip--${pageName}").val(""); // 우편번호
|
||||
$("#addr--${pageName}").val(""); // 주소
|
||||
$("#dtlAddr--${pageName}").val(""); // 상세 주소
|
||||
$("#roadNmCd--${pageName}").val(""); // 도로명 코드
|
||||
$("#udgdSeCd--${pageName}").val(""); // 지하 구분 코드
|
||||
$("#bmno--${pageName}").val(""); // 건물 본번
|
||||
$("#bsno--${pageName}").val(""); // 건물 부번
|
||||
$("#bldgMngNo--${pageName}").val(""); // 건물 관리 번호
|
||||
$("#stdgCd--${pageName}").val(""); // 법정동 코드
|
||||
$("#mtnSeCd--${pageName}").val(""); // 산
|
||||
$("#mno--${pageName}").val(""); // 번지
|
||||
$("#sno--${pageName}").val(""); // 호
|
||||
$("#dongCd--${pageName}").val(""); // 행정동 코드
|
||||
|
||||
dialog.alert("차량 정보가 없습니다.");
|
||||
} else {
|
||||
$("#rtpyrId--${pageName}").val(resp.rtpyrId); // 납부자 ID
|
||||
$("#addr--${pageName}").attr("readonly", true); // 주소
|
||||
$("#zip--${pageName}").attr("readonly", true); // 우편번호
|
||||
$("#dtlAddr--${pageName}").attr("readonly", true); // 상세 주소
|
||||
|
||||
$P.callbackVehicle(resp.vehicle);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// 우편번호 검색
|
||||
$P.fnZipCode = async() => {
|
||||
let resp = await fetch(wctx.url("/resources/html/searchAddr.html"));
|
||||
let template = await resp.text();
|
||||
|
||||
dialog.open({
|
||||
id: "searchAddrDialog"
|
||||
, title: "주소검색"
|
||||
, size: "lg"
|
||||
, content: template
|
||||
, init: () => {
|
||||
$("#searchAddrCallback").val("pageObject['${pageName}'].callbackSearchAddr");
|
||||
setDialogZindex();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// 화면에서 보여주는 주소입력 부분 수정
|
||||
$P.fnEditAddr = () => {
|
||||
$("#addr--${pageName}").prop("readonly", false); // 주소
|
||||
$("#zip--${pageName}").prop("readonly", false); // 우편번호
|
||||
$("#dtlAddr--${pageName}").prop("readonly", false); // 상세 주소
|
||||
// 도로명 주소
|
||||
$("#roadNmCd--${pageName}").val(""); // 도로명 코드
|
||||
$("#udgdSeCd--${pageName}").val(""); //
|
||||
$("#bmno--${pageName}").val(""); //
|
||||
$("#bsno--${pageName}").val(""); //
|
||||
$("#bldgMngNo--${pageName}").val(""); //
|
||||
// 법정동
|
||||
$("#stdgCd--${pageName}").val(""); // 법정동 코드
|
||||
$("#mtnSeCd--${pageName}").val(""); // 산
|
||||
$("#mno--${pageName}").val(""); // 본번
|
||||
$("#sno--${pageName}").val(""); // 부번
|
||||
// 행정동
|
||||
$("#dongCd--${pageName}").val(""); // 행정동 코드
|
||||
|
||||
$("#rtpyrInptSeCd--${pageName}").val("01"); // 납부자 입력 구분 코드(FIM015) 01:수기입력
|
||||
$("#addrInptSeCd--${pageName}").val("01"); // 주소 입력 구분 코드(FIM087) 01:수기입력
|
||||
}
|
||||
|
||||
// 저장 버튼 클릭 이벤트
|
||||
$P.fnSave = () => {
|
||||
// validate 확인
|
||||
if (!customValidate($("#frmEdit--${pageName}").find("input, select, textarea"))) return;
|
||||
|
||||
dialog.alert({
|
||||
content: "현재 " + $P.control.prefixName + " 정보를 저장하시겠습니까?"
|
||||
, onOK: () => {
|
||||
$P.control.save($P.formFields.get()); // formFields
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 초기 셋팅
|
||||
**************************************************************************/
|
||||
// 이벤트 설정
|
||||
$P.setEvent = () => {
|
||||
$("#btnVehicle--${pageName}").on("click", () => $P.fnGetVehicle()); // 차적 검색 버튼 이벤트
|
||||
$("#btnZipCode--${pageName}").on("click", () => $P.fnZipCode()); // 우편번호 검색 버튼 이벤트
|
||||
$("#btnEditAddr--${pageName}").on("click", () => $P.fnEditAddr()); // 주소 수정 버튼 이벤트
|
||||
$("#btnSave--${pageName}").on("click", () => $P.fnSave()); // 저장 버튼 이벤트
|
||||
}
|
||||
|
||||
// 초기 화면 설정
|
||||
$P.initForm = () => {
|
||||
$("#addr--${pageName}").prop("readonly", true); // 주소
|
||||
$("#zip--${pageName}").prop("readonly", true); // 우편번호
|
||||
$("#dtlAddr--${pageName}").prop("readonly", true); // 상세 주소
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 최초 실행 함수
|
||||
**************************************************************************/
|
||||
// 1. 이벤트 설정
|
||||
$P.setEvent();
|
||||
|
||||
// 2. 초기 화면 설정
|
||||
$P.initForm();
|
||||
|
||||
// 3. Dataset 설정
|
||||
$P.control.setData([${payerInfo}]);
|
||||
});
|
||||
|
||||
</script>
|
||||
@ -1,69 +0,0 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
<div class="card" id="photoMainWrapper--${pageName}">
|
||||
<form id="frmFile--${pageName}" method="post" enctype="multipart/form-data">
|
||||
<input type="file" id="newFileList--${pageName}" name="newFileList"
|
||||
multiple accept="image/*" hidden />
|
||||
<input type="file" id="modifyFile--${pageName}" name="modifyFile"
|
||||
multiple accept="image/*" hidden />
|
||||
</form>
|
||||
|
||||
<div class="col-md-12 d-flex justify-content-between">
|
||||
<div class="my-1">
|
||||
<button type="button" id="btnOpenVideoCapture--${pageName}" class="btn btn-primary">
|
||||
동영상 캡쳐
|
||||
</button>
|
||||
<button type="button" id="btnAddFile--${pageName}" class="btn btn-primary">
|
||||
사진 추가
|
||||
</button>
|
||||
<button type="button" id="btnEditPhoto--${pageName}" class="btn btn-primary">
|
||||
사진 편집
|
||||
</button>
|
||||
<button type="button" id="btnDeleteExistPhoto--${pageName}" class="btn btn-primary">
|
||||
사진 삭제
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="displayForExist--${pageName}" class="border-default">
|
||||
<ul id="dragAndDrop--${pageName}" class="oy-scroll d-flex flex-wrap mh-px-580">
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<form id="frmUploadSet--${pageName}" method="post" enctype="multipart/form-data">
|
||||
<input type="file" id="inputUploadSet--${pageName}" name="inputUploadSet"
|
||||
multiple accept="image/*" hidden />
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<template id="imgRadioTemplate--${pageName}">
|
||||
<li class="d-flex">
|
||||
<label class='mx-1 d-flex flex-row'>
|
||||
<input type="radio" name="{name}" class="form-check-input" value="{value}" checked="" />
|
||||
<div class="position-relative">
|
||||
<img src="{src}" width='200' height='200'
|
||||
data-crdn-photo-id="{crdnPhotoId}"
|
||||
data-mosaic="{mosaic}"
|
||||
onload='fn_photoMask($("#photoMask--top").is(":checked"),this);' />
|
||||
</div>
|
||||
</label>
|
||||
</li>
|
||||
</template>
|
||||
|
||||
<template id="imgRadioTemplateTotalInfo--${pageName}">
|
||||
<li class="d-flex">
|
||||
<label class="mx-1 d-flex flex-row">
|
||||
<input type="radio" name="{name}" class="form-check-input" value="{value}" checked="" />
|
||||
<div class="position-relative">
|
||||
<img src="{src}" width="240" height="150"
|
||||
data-crdn-photo-id="{crdnPhotoId}"
|
||||
data-mosaic="{mosaic}"
|
||||
onload='fn_photoMask($("#photoMask--top").is(":checked"),this);' />
|
||||
</div>
|
||||
</label>
|
||||
</li>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
LoadScript("photoMainJspScript","/resources/js/fims/photo-main.js");
|
||||
</script>
|
||||
@ -1,771 +0,0 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
|
||||
<c:set var="prefixName" scope="request">수납 관리</c:set>
|
||||
|
||||
<!-- inner page html -->
|
||||
<div class="content-wrapper">
|
||||
<!-- Content -->
|
||||
<div class="container-xxl flex-grow-1 px-0">
|
||||
<div class="card wrapper-list">
|
||||
<!-- 상단 버튼 -->
|
||||
<div class="container-page-btn">
|
||||
<button type="button" class="btn btn-outline-dark w-px-120" id="btnReset--${pageName}" title="초기화">
|
||||
초기화
|
||||
</button>
|
||||
<span class="container-window-btn-right">
|
||||
<button type="button" class="btn btn-search w-px-120" id="btnSearch--${pageName}" title="검색">
|
||||
검색
|
||||
</button>
|
||||
<button type="button" class="btn btn-excel w-px-120" id="btnExcel--${pageName}" title="엑셀">
|
||||
엑셀
|
||||
</button>
|
||||
</span>
|
||||
</div>
|
||||
<!-- 상단 버튼 -->
|
||||
|
||||
<!-- 검색 조건 영역 -->
|
||||
<form id="frmSearch--${pageName}" name="frmSearch">
|
||||
<!-- hidden -->
|
||||
<input type="hidden" id="sggCd--${pageName}" name="sggCd" />
|
||||
|
||||
<!-- 메인 조건 -->
|
||||
<div class="container-search">
|
||||
<div class="row g-1">
|
||||
<!-- 업무구분 -->
|
||||
<div class="col-12">
|
||||
<span class="form-label fw-bold form-search-title w-px-120 text-end">업무구분</span>
|
||||
<span class="form-search-linebox">
|
||||
<c:forEach items="${taskListForSgg}" var="item">
|
||||
<label>
|
||||
<input type="radio" class="form-check-input" name="taskSeCd" alt="업무구분"
|
||||
value="${item.code}" onchange="pageObject['${pageName}'].fnResetAndChangeBiz(this.value);">
|
||||
${item.value}
|
||||
</label>
|
||||
</c:forEach>
|
||||
</span>
|
||||
</div>
|
||||
<!-- 회계 일자 -->
|
||||
<div class="col-6">
|
||||
<label class="form-label fw-bold form-search-title w-px-120 text-end" for="schAcntgYmdFrom--${pageName}">회계일자</label>
|
||||
<span class="form-search-linebox">
|
||||
<input type="text" class="form-control form-date" id="schAcntgYmdFrom--${pageName}" name="schAcntgYmdFrom"
|
||||
data-fmt-type="day" autocomplete="off" title="시작 날짜 선택" />
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
~
|
||||
<input type="text" class="form-control form-date" id="schAcntgYmdTo--${pageName}" name="schAcntgYmdTo"
|
||||
data-fmt-type="day" autocomplete="off" title="종료 날짜 선택" />
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
</span>
|
||||
</div>
|
||||
<!-- 수납 일자 -->
|
||||
<div class="col-6">
|
||||
<label class="form-label fw-bold form-search-title w-px-120 text-end" for="schRcvmtYmdFrom--${pageName}">수납일자</label>
|
||||
<span class="form-search-linebox">
|
||||
<input type="text" class="form-control form-date" id="schRcvmtYmdFrom--${pageName}" name="schRcvmtYmdFrom"
|
||||
data-fmt-type="day" autocomplete="off" title="시작 날짜 선택" />
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
~
|
||||
<input type="text" class="form-control form-date" id="schRcvmtYmdTo--${pageName}" name="schRcvmtYmdTo"
|
||||
data-fmt-type="day" autocomplete="off" title="종료 날짜 선택" />
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
</span>
|
||||
</div>
|
||||
<!-- 이체 일자 -->
|
||||
<div class="col-6">
|
||||
<label class="form-label fw-bold form-search-title w-px-120 text-end" for="schTsfYmdFrom--${pageName}">이체일자</label>
|
||||
<span class="form-search-linebox">
|
||||
<input type="text" class="form-control form-date" id="schTsfYmdFrom--${pageName}" name="schTsfYmdFrom"
|
||||
data-fmt-type="day" autocomplete="off" title="시작 날짜 선택" />
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
~
|
||||
<input type="text" class="form-control form-date" id="schTsfYmdTo--${pageName}" name="schTsfYmdTo"
|
||||
data-fmt-type="day" autocomplete="off" title="종료 날짜 선택" />
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
</span>
|
||||
</div>
|
||||
<!-- 수납 구분 코드 -->
|
||||
<div class="col-6">
|
||||
<label class="form-label fw-bold form-search-title w-px-120 text-end" for="schRcvmtSeCd--${pageName}">수납구분</label>
|
||||
<select class="form-select w-px-120" id="schRcvmtSeCd--${pageName}" name="schRcvmtSeCd">
|
||||
<option value="">전체</option>
|
||||
<c:forEach items="${FIM041List}" var="item">
|
||||
<option value="${item.code}">${item.value}</option>
|
||||
</c:forEach>
|
||||
</select>
|
||||
</div>
|
||||
<!-- 납부 방법 구분 코드 -->
|
||||
<div class="col-6">
|
||||
<label class="form-label fw-bold form-search-title w-px-120 text-end" for="schPayMthdSeCd--${pageName}">납부방법</label>
|
||||
<select class="form-select w-px-200" id="schPayMthdSeCd--${pageName}" name="schPayMthdSeCd">
|
||||
<option value="">전체</option>
|
||||
<c:forEach items="${FIM045List}" var="item">
|
||||
<option value="${item.code}">${item.value}</option>
|
||||
</c:forEach>
|
||||
</select>
|
||||
</div>
|
||||
<!-- 동적검색 -->
|
||||
<div class="col-6">
|
||||
<input type="hidden" id="by--${pageName}" name="by" />
|
||||
<input type="text" class="form-control fw-bold w-px-120 text-end" id="byOutput--${pageName}" value="동적 검색" readonly />
|
||||
<input type="hidden" id="mainOption--${pageName}" name="mainOption" />
|
||||
<input type="hidden" id="subOption--${pageName}" name="subOption" />
|
||||
<input type="text" class="form-control w-px-400" id="term--${pageName}" name="term" autocomplete="off" />
|
||||
<!-- 상세 검색조건 버튼 -->
|
||||
<span class="flr">
|
||||
<button type="button" class="btn btn-open-detail" data-bs-toggle="collapse" data-bs-target="#searchDetail--${pageName}">
|
||||
<i class="bx bx-chevron-down"></i>
|
||||
상세검색
|
||||
</button>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div> <!-- 메인 조건 -->
|
||||
|
||||
<!-- 상세 조건 -->
|
||||
<div id="searchDetail--${pageName}" class="container-search container-search-detail collapse">
|
||||
<div class="row g-1">
|
||||
<!-- 단속일자 -->
|
||||
<div class="col-4">
|
||||
<label class="form-label fw-bold form-search-title w-px-120 text-end" for="schCrdnYmdFrom--${pageName}">단속일자</label>
|
||||
<span class="form-search-linebox">
|
||||
<input type="text" class="form-control form-date" id="schCrdnYmdFrom--${pageName}" name="schCrdnYmdFrom"
|
||||
data-fmt-type="day" autocomplete="off" title="시작 날짜 선택" />
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
~
|
||||
<input type="text" class="form-control form-date" id="schCrdnYmdTo--${pageName}" name="schCrdnYmdTo"
|
||||
data-fmt-type="day" autocomplete="off" title="종료 날짜 선택" />
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
</span>
|
||||
</div>
|
||||
<!-- 차량번호 -->
|
||||
<div class="col-4">
|
||||
<label class="form-label fw-bold form-search-title w-px-120 text-end" for="schVhrno--${pageName}">차량번호</label>
|
||||
<input type="text" class="form-control w-px-160" id="schVhrno--${pageName}" name="schVhrno" autocomplete="off" />
|
||||
</div>
|
||||
<!-- 납부자번호 -->
|
||||
<div class="col-4">
|
||||
<label class="form-label fw-bold form-search-title w-px-120 text-end" for="schRtpyrNm--${pageName}">납부자번호</label>
|
||||
<input type="text" class="form-control w-px-160" id="schRtpyrNm--${pageName}" name="schRtpyrNm" autocomplete="off" />
|
||||
</div>
|
||||
<!-- 납부자명 -->
|
||||
<div class="col-4">
|
||||
<label class="form-label fw-bold form-search-title w-px-120 text-end" for="schRtpyrNo--${pageName}">납부자명</label>
|
||||
<input type="text" class="form-control w-px-160" id="schRtpyrNo--${pageName}" name="schRtpyrNo" autocomplete="off" />
|
||||
</div>
|
||||
<!-- 등록일자, 수정일자 -->
|
||||
<div class="col-4">
|
||||
<select class="form-select w-px-120 text-center" id="schRegDateOpt--${pageName}" name="schRegDateOpt">
|
||||
<option value="regDt">등록일자</option>
|
||||
<option value="mdfcnDt">수정일자</option>
|
||||
</select>
|
||||
<span class="form-search-linebox">
|
||||
<input type="text" class="form-control form-date" id="schRegDateFrom--${pageName}" name="schRegDateFrom"
|
||||
data-fmt-type="day" title="시작 날짜 선택" />
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
~
|
||||
<input type="text" class="form-control form-date" id="schRegDateTo--${pageName}" name="schRegDateTo"
|
||||
data-fmt-type="day" title="종료 날짜 선택">
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
</span>
|
||||
</div>
|
||||
<!-- 등록자명, 수정자명 -->
|
||||
<div class="col-4">
|
||||
<select class="form-select w-px-120 text-center" id="schRgtrOpt--${pageName}" name="schRgtrOpt">
|
||||
<option value="rgtr">등록자</option>
|
||||
<option value="mdfr">수정자</option>
|
||||
</select>
|
||||
<input type="hidden" id="schRgtrCd--${pageName}" name="schRgtrCd" />
|
||||
<input type="text" class="form-control w-px-160" id="schRgtrNm--${pageName}" name="schRgtrNm" />
|
||||
<button type="button" class="btn btn-sm btn-outline-dark" id="btnFindUser--${pageName}" title="사용자 검색">검색</button>
|
||||
</div>
|
||||
</div>
|
||||
</div> <!-- 상세 조건 -->
|
||||
</form>
|
||||
<!-- 검색 조건 영역 -->
|
||||
|
||||
<!-- 업무 버튼 및 건수 표시 -->
|
||||
<div>
|
||||
<span class="container-page-btn">
|
||||
<!-- 건수, 페이지 표시 -->
|
||||
<div class="d-flex flex-row justify-content-between">
|
||||
<span class="dataTables_info" id="paging--${pageName}PagingInfo" role="status" aria-live="polite"></span>
|
||||
<ul class="pagination pagination-primary" id="paging--${pageName}">
|
||||
</ul>
|
||||
</div>
|
||||
<!-- 업무 버튼 -->
|
||||
<span class="container-window-btn-right">
|
||||
</span>
|
||||
</span>
|
||||
</div>
|
||||
<!-- 업무 버튼 및 건수 표시 -->
|
||||
|
||||
<!-- DataTables(그리드) -->
|
||||
<div class="card-datatable text-nowrap">
|
||||
<div class="dataTables_wrapper dt-bootstrap5 no-footer" id="DataTables_Table_0_wrapper--${pageName}">
|
||||
<div class="table-responsive ox-scroll oy-scroll h-px-500" id="table-responsive--${pageName}">
|
||||
<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">
|
||||
<tr id="theadTr--${pageName}"
|
||||
data-by="by--${pageName}" data-by-output="byOutput--${pageName}" data-main-option="mainOption--${pageName}" data-sub-option="subOption--${pageName}">
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="tbody--${pageName}">
|
||||
</tbody>
|
||||
|
||||
<template id="${infoPrefix}Col--${pageName}">
|
||||
<th class="cmn" style="width: 72px;">No.</th>
|
||||
<th class="cmn" style="width: 56px;"><input type="checkbox" class="form-check-input" id="gridAllCheckbox--${pageName}" onchange="pageObject['${pageName}'].control.select(this.checked);" /></th>
|
||||
<th class="cmn" style="width: 160px;">업무구분</th>
|
||||
<th class="cmn" style="width: 100px;" onclick="searchFromGridTitle('RCVMT_RTRCN_YN', this.innerText, 'codeValue', 'CMN005');">수납취소</th>
|
||||
<th class="cmn" style="width: 120px;" onclick="searchFromGridTitle('RCVMT_INPT_SE_CD', this.innerText, 'codeValue', 'FIM044');">수납입력구분</th>
|
||||
<th class="cmn" style="width: 100px;" onclick="searchFromGridTitle('FYR', this.innerText, 'match', 'part');">회계연도</th>
|
||||
<th class="cmn" style="width: 100px;" onclick="searchFromGridTitle('ACNTG_SE_CD', this.innerText, 'codeValue', 'FIM074');">회계구분</th>
|
||||
<th class="cmn" style="width: 120px;" onclick="searchFromGridTitle('TXITM_CD', this.innerText, 'codeValue', 'FIM075');">세목코드</th>
|
||||
<th class="cmn" style="width: 200px;" onclick="searchFromGridTitle('TXITM_CD', this.innerText, 'codeValue', 'FIM075');">세목명</th>
|
||||
<th class="cmn" style="width: 100px;" onclick="searchFromGridTitle('LEVY_NO', this.innerText, 'match', 'part');">부과번호</th>
|
||||
<th class="cmn" style="width: 120px;" onclick="searchFromGridTitle('ISPY_SN', this.innerText, 'match', 'part');">분납일련번호</th>
|
||||
<th class="cmn" style="width: 120px;" onclick="searchFromGridTitle('LAST_PCPTAX', this.innerText, 'match', 'part');">최종본세</th>
|
||||
<th class="cmn" style="width: 120px;" onclick="searchFromGridTitle('LAST_ADAMT', this.innerText, 'match', 'part');">최종가산금</th>
|
||||
<th class="cmn" style="width: 120px;" onclick="searchFromGridTitle('RCVMT_SN', this.innerText, 'match', 'part');">수납일련번호</th>
|
||||
<th class="cmn" style="width: 100px;" onclick="searchFromGridTitle('RCVMT_SE_CD', this.innerText, 'codeValue', 'FIM041');">수납구분</th>
|
||||
<th class="cmn" style="width: 120px;" onclick="searchFromGridTitle('RCVMT_YMD', this.innerText, 'ymd', '');">수납일자</th>
|
||||
<th class="cmn" style="width: 120px;" onclick="searchFromGridTitle('ACNTG_YMD', this.innerText, 'ymd', '');">회계일자</th>
|
||||
<th class="cmn" style="width: 120px;" onclick="searchFromGridTitle('TSF_YMD', this.innerText, 'ymd', '');">이체일자</th>
|
||||
<th class="cmn" style="width: 120px;" onclick="searchFromGridTitle('RCVMT_AMT', this.innerText, 'match', 'part');">수납금액</th>
|
||||
<th class="cmn" style="width: 120px;" onclick="searchFromGridTitle('RCVMT_PCPTAX', this.innerText, 'match', 'part');">수납본세</th>
|
||||
<th class="cmn" style="width: 120px;" onclick="searchFromGridTitle('RCVMT_ADAMT', this.innerText, 'match', 'part');">수납가산금</th>
|
||||
<th class="cmn" style="width: 120px;" onclick="searchFromGridTitle('RCVMT_INT', this.innerText, 'match', 'part');">수납이자</th>
|
||||
<th class="cmn" style="width: 200px;" onclick="searchFromGridTitle('RCVMT_BANK_NM', this.innerText, 'match', 'part');">수납은행</th>
|
||||
<th class="cmn" style="width: 200px;" onclick="searchFromGridTitle('PAY_MTHD_SE_CD', this.innerText, 'codeValue', 'FIM045');">납부방법</th>
|
||||
<th class="cmn" style="width: 160px;" onclick="searchFromGridTitle('RCVMT_STTS_CD', this.innerText, 'codeValue', 'FIM020');">수납상태</th>
|
||||
<th class="cmn" style="width: 120px;" onclick="searchFromGridTitle('LEVY_YMD', this.innerText, 'ymd', '');">부과일자</th>
|
||||
<th class="cmn" style="width: 120px;" onclick="searchFromGridTitle('FRST_DUDT_YMD', this.innerText, 'ymd', '');">최초납기일자</th>
|
||||
<th class="cmn" style="width: 120px;" onclick="searchFromGridTitle('DUDT_YMD', this.innerText, 'ymd', '');">납기일자</th>
|
||||
<th class="cmn" style="width: 120px;" onclick="searchFromGridTitle('SZR_YMD', this.innerText, 'ymd', '');">압류일자</th>
|
||||
<th class="cmn" style="width: 200px;" onclick="searchFromGridTitle('SZR_THING', this.innerText, 'match', 'part');">압류물건</th>
|
||||
<th class="cmn" style="width: 160px;" onclick="searchFromGridTitle('RPM_SZR_VHRNO', this.innerText, 'match', 'part');">대체압류차량</th>
|
||||
<th class="cmn" style="width: 120px;" onclick="searchFromGridTitle('SZR_RMV_YMD', this.innerText, 'ymd', '');">압류해제일자</th>
|
||||
<th class="cmn" style="width: 180px;" onclick="searchFromGridTitle('CRDN_YMD', this.innerText, 'ymd', '');">단속일시</th>
|
||||
<th class="cmn" style="width: 160px;" onclick="searchFromGridTitle('VHRNO', this.innerText, 'match', 'part');">차량번호</th>
|
||||
<th class="cmn" style="width: 120px;" onclick="searchFromGridTitle('RTPYR_SE_CD', this.innerText, 'codeValue', 'FIM011');">납부자구분</th>
|
||||
<th class="cmn" style="width: 160px;" onclick="searchFromGridTitle('RTPYR_NO', this.innerText, 'ymd', '');">납부자번호</th>
|
||||
<th class="cmn" style="width: 160px;" onclick="searchFromGridTitle('RTPYR_NM', this.innerText, 'match', 'part');">납부자명</th>
|
||||
<th class="cmn" style="width: 120px;" onclick="searchFromGridTitle('CRDN_STDG_NM', this.innerText, 'match', 'part');">단속법정동</th>
|
||||
<th class="cmn" style="width: 280px;" onclick="searchFromGridTitle('CRDN_PLC', this.innerText, 'match', 'part');">단속장소</th>
|
||||
<th class="cmn" style="width: 160px;" onclick="searchFromGridTitle('CRDN_STTS_CD', this.innerText, 'codeValue', 'FIM010');">처리상태</th>
|
||||
<th class="cmn" style="width: 180px;">등록일시</th>
|
||||
<th class="cmn" style="width: 140px;">등록사용자</th>
|
||||
<th class="cmn" style="width: 180px;">수정일시</th>
|
||||
<th class="cmn" style="width: 140px;">수정사용자</th>
|
||||
<th class="cmn dummy-th"></th>
|
||||
</template>
|
||||
<template id="${infoPrefix}Row--${pageName}">
|
||||
<tr data-key="{RCVMT_ID}">
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{ROW_NUM}</td>
|
||||
<td class="cmn text-center"><input type="checkbox" class="form-check-input" name="gridCheckbox" value="{RCVMT_ID}" onchange="pageObject['${pageName}'].control.select('{RCVMT_ID}', this.checked);"></td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{TASK_SE_NM}</td>
|
||||
<td class="cmn text-center text-red" onclick="{onclick}" ondblclick="{ondblclick}">{RCVMT_RTRCN_NM}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{RCVMT_INPT_SE_NM}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{FYR}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{ACNTG_SE_CD}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{TXITM_CD}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{TXITM_NM}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{LEVY_NO}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{ISPY_SN}</td>
|
||||
<td class="cmn text-end" onclick="{onclick}" ondblclick="{ondblclick}">{LAST_PCPTAX}</td>
|
||||
<td class="cmn text-end" onclick="{onclick}" ondblclick="{ondblclick}">{LAST_ADAMT}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{RCVMT_SN}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{RCVMT_SE_NM}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{RCVMT_YMD}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{ACNTG_YMD}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{TSF_YMD}</td>
|
||||
<td class="cmn text-end fw-bold text-blue" onclick="{onclick}" ondblclick="{ondblclick}">{RCVMT_AMT}</td>
|
||||
<td class="cmn text-end" onclick="{onclick}" ondblclick="{ondblclick}">{RCVMT_PCPTAX}</td>
|
||||
<td class="cmn text-end" onclick="{onclick}" ondblclick="{ondblclick}">{RCVMT_ADAMT}</td>
|
||||
<td class="cmn text-end" onclick="{onclick}" ondblclick="{ondblclick}">{RCVMT_INT}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{RCVMT_BANK_NM}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{PAY_MTHD_SE_NM}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{RCVMT_STTS_NM}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{LEVY_YMD}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{FRST_DUDT_YMD}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{DUDT_YMD}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{SZR_YMD}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{SZR_THING}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{RPM_SZR_VHRNO}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{SZR_RMV_YMD}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{CRDN_YMD_TM}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{VHRNO}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{RTPYR_SE_NM}</td>
|
||||
<td class="cmn text-center privacy-cell" onclick="{onclick}" ondblclick="{ondblclick}">
|
||||
<span>{RTPYR_NO}</span>
|
||||
<span>*************</span>
|
||||
</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{RTPYR_NM}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{CRDN_STDG_NM}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{CRDN_PLC}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{CRDN_STTS_NM}</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}">{MDFCN_DT}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{MDFR_NM}</td>
|
||||
<td class="cmn dummy-td"></td>
|
||||
</tr>
|
||||
</template>
|
||||
<template id="${infoPrefix}NotFound--${pageName}">
|
||||
<tr class="bpv">
|
||||
<td valign="top" colspan="45" class="dataTables_empty text-center">${prefixName} 정보를 찾지 못했습니다.</td>
|
||||
</tr>
|
||||
<tr class="dpv">
|
||||
<td valign="top" colspan="45" class="dataTables_empty text-center">${prefixName} 정보를 찾지 못했습니다.</td>
|
||||
</tr>
|
||||
<tr class="eca">
|
||||
<td valign="top" colspan="45" class="dataTables_empty text-center">${prefixName} 정보를 찾지 못했습니다.</td>
|
||||
</tr>
|
||||
<tr class="pvs">
|
||||
<td valign="top" colspan="45" class="dataTables_empty text-center">${prefixName} 정보를 찾지 못했습니다.</td>
|
||||
</tr>
|
||||
<tr class="pes">
|
||||
<td valign="top" colspan="45" class="dataTables_empty text-center">${prefixName} 정보를 찾지 못했습니다.</td>
|
||||
</tr>
|
||||
</template>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- DataTables(그리드) -->
|
||||
</div> <!-- <div class="card wrapper-list"> -->
|
||||
</div> <!-- <div class="container-xxl flex-grow-1 px-0"> -->
|
||||
<!-- Content -->
|
||||
|
||||
<div class="content-backdrop fade"></div>
|
||||
</div>
|
||||
<!-- / inner page html <div class="content-wrapper"> -->
|
||||
|
||||
<script>
|
||||
/**************************************************************************
|
||||
* Global Variable
|
||||
**************************************************************************/
|
||||
pageObject["${pageName}"] = {};
|
||||
|
||||
/**************************************************************************
|
||||
* script 진입
|
||||
**************************************************************************/
|
||||
$(document).ready(function() {
|
||||
// pageObject
|
||||
let $P = pageObject["${pageName}"];
|
||||
|
||||
// FormFields
|
||||
$P.formFields = new FimsFormFields("#frmSearch--${pageName}");
|
||||
|
||||
/**************************************************************************
|
||||
* DatasetControl
|
||||
**************************************************************************/
|
||||
$P.control = new DatasetControl({
|
||||
prefix: "rcvmt"
|
||||
, prefixName: "수납"
|
||||
, keymapper: info => info ? info.RCVMT_ID : ""
|
||||
, dataGetter: obj => obj.${infoPrefix}List
|
||||
, appendData: true
|
||||
, infoSize: "lg"
|
||||
, formats: {
|
||||
RCVMT_YMD: dateFormat
|
||||
, ACNTG_YMD: dateFormat
|
||||
, PSTMRK_YMD: dateFormat
|
||||
, RCVMT_AMT: numberFormat
|
||||
, LAST_PCPTAX: numberFormat
|
||||
, LAST_ADAMT: numberFormat
|
||||
, RCVMT_PCPTAX: numberFormat
|
||||
, RCVMT_ADAMT: numberFormat
|
||||
, RCVMT_INT: numberFormat
|
||||
, LEVY_YMD: dateFormat
|
||||
, FRST_DUDT_YMD: dateFormat
|
||||
, DUDT_YMD: dateFormat
|
||||
, FFNLG_AMT: numberFormat
|
||||
, SZR_YMD: dateFormat
|
||||
, CRDN_YMD_TM: datetimeFormat
|
||||
, REG_DT: datetimeFormat
|
||||
, MDFCN_DT: datetimeFormat
|
||||
}
|
||||
});
|
||||
// $P.control 설정
|
||||
$P.control.defaultFetchSize = FETCH_XS; // 1 페이지당 조회되는 자료 건수 index.jsp에서 확인 FETCH_XS = 30
|
||||
$P.control.query = { pageNum : 1, fetchSize : $P.control.defaultFetchSize };
|
||||
$P.control.beforeCurrent = null;
|
||||
|
||||
/**************************************************************************
|
||||
* DatasetControl 이벤트
|
||||
**************************************************************************/
|
||||
// Dataset 변경 이벤트
|
||||
$P.control.onDatasetChange = (obj, option) => {
|
||||
$P.renderList(obj.${infoPrefix}Total, option);
|
||||
|
||||
$("#paging--${pageName}").setPagingInfo({
|
||||
list: $P.control.dataset
|
||||
, prefix: "paging--${pageName}"
|
||||
, start: obj.${infoPrefix}Start
|
||||
, totalSize: obj.${infoPrefix}Total
|
||||
, fetchSize: obj.${infoPrefix}Fetch
|
||||
, func: "pageObject['${pageName}'].control.load({index})"
|
||||
});
|
||||
};
|
||||
|
||||
// 현재 선택 자료 변경 이벤트
|
||||
$P.control.onCurrentChange = (item) => {
|
||||
if (!item) return;
|
||||
|
||||
let key = item.data.RCVMT_ID;
|
||||
|
||||
$("#tbody--${pageName}").setCurrentRow(key);
|
||||
};
|
||||
|
||||
// 선택(체크) 변경 이벤트
|
||||
$P.control.onSelectionChange = selected => {
|
||||
let ${infoPrefix}List = $P.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()));
|
||||
});
|
||||
|
||||
// 삭제 버튼
|
||||
// $("#btnRemove--${pageName}").prop("disabled", keys.length < 1);
|
||||
|
||||
// DataTables(그리드) 전체 선택(checkbox)
|
||||
if (keys.length < 1) {
|
||||
$("#DataTables_Table_0--${pageName} th input[type='checkbox']").prop("checked", false); // 체크 해제
|
||||
} else if (keys.length == ${infoPrefix}List.length) {
|
||||
$("#DataTables_Table_0--${pageName} th input[type='checkbox']").prop("checked", true); // 체크 설정
|
||||
} else {
|
||||
$("#DataTables_Table_0--${pageName} th input[type='checkbox']").prop("checked", false); // 체크 해제
|
||||
}
|
||||
};
|
||||
|
||||
// 삭제 callback
|
||||
$P.control.onRemove = (resp) => {
|
||||
let btnTitle = $("#btnRemove--${pageName}").attr("title");
|
||||
let showMessage = resp.rtnMsg.replace(/[S]|[F]/g, btnTitle);
|
||||
|
||||
// 메시지 출력
|
||||
dialog.alert({
|
||||
content: showMessage
|
||||
, onOK: () => { }
|
||||
});
|
||||
|
||||
if (resp.saved) { $P.fnRefreshList(); } // 자료 재조회
|
||||
}
|
||||
|
||||
// 삭제
|
||||
$P.control.remove = (params) => {
|
||||
if (!params) return;
|
||||
|
||||
ajax.post({
|
||||
url: wctx.url("/" + params.taskSeCd + "${infoPrefixUrl}" + "/010/remove.do")
|
||||
, data: params || {}
|
||||
, success: resp => $P.control.onRemove(resp)
|
||||
});
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* DataTables 이벤트
|
||||
**************************************************************************/
|
||||
// DataTables에 click, dbclick 이벤트
|
||||
$P.renderList = (totalSize, option) => {
|
||||
let ${infoPrefix}List = $P.control.dataset;
|
||||
let empty = ${infoPrefix}List.empty;
|
||||
let clsForTask = $("#frmSearch--${pageName} input[name='taskSeCd']:checked").val().toLowerCase(); // 소문자
|
||||
|
||||
// 업무별 DataTables(그리드) tr, td
|
||||
let foundContent = document.getElementById("${infoPrefix}Row--${pageName}").content;
|
||||
let foundTr = $(foundContent).find("tr")[0].cloneNode(false);
|
||||
let foundTds = $(foundContent).find("." + clsForTask + ",.cmn");
|
||||
|
||||
foundTds.each(function() {
|
||||
foundTr.appendChild(this.cloneNode(true));
|
||||
});
|
||||
|
||||
//
|
||||
let replacer = (str, dataItem) => str
|
||||
.replace(/{onclick}/gi, "pageObject['${pageName}'].control.setCurrent('" + dataItem.getValue("RCVMT_ID") + "');")
|
||||
.replace(/{ondblclick}/gi, "pageObject['${pageName}'].getTotalInfo('" + dataItem.getValue("CRDN_ID") + "');");
|
||||
|
||||
let trs = empty ? [document.getElementById("${infoPrefix}NotFound--${pageName}").content.querySelector("." + clsForTask + ",.cmn").outerHTML]
|
||||
: ${infoPrefix}List.inStrings(foundTr.outerHTML, replacer);
|
||||
|
||||
let noMore = (${infoPrefix}List.length >= totalSize);
|
||||
let initScroll = ($P.control.query.pageNum < 2);
|
||||
if(option != null && option.reloaded){
|
||||
initScroll = false;
|
||||
}
|
||||
|
||||
$("#table-responsive--${pageName}")[0].changeContent(trs.join(), initScroll, noMore);
|
||||
|
||||
// checkbox 체크 해제
|
||||
$("#DataTables_Table_0--${pageName} th input[type='checkbox']").prop("checked", false);
|
||||
|
||||
// 보안모드
|
||||
fn_securityModeToggle($("#securityMode--top").is(":checked"));
|
||||
}
|
||||
|
||||
// DataTables에 스크롤이 맨 밑으로 이동했을 때 이벤트
|
||||
$P.scrollDataList = () => {
|
||||
$P.control.load($P.control.query.pageNum + 1);
|
||||
}
|
||||
|
||||
// DataTables에 더블 클릭시 개별총정보 dialog
|
||||
$P.getTotalInfo = (crdnId) => {
|
||||
if (typeof crdnId == "undefined" || crdnId == null || crdnId == "") return;
|
||||
|
||||
let params = {
|
||||
callControlName: "pageObject['${pageName}'].control"
|
||||
, sggCd: $P.control.dataset.getValue("SGG_CD")
|
||||
, taskSeCd: $P.control.dataset.getValue("TASK_SE_CD")
|
||||
, crdnId: crdnId
|
||||
}
|
||||
|
||||
ajax.get({
|
||||
url: wctx.url("/sprt/sprt02/010/main.do")
|
||||
, data: params
|
||||
, success: resp => {
|
||||
dialog.open({
|
||||
id: "totalInfoMainDialog"
|
||||
, title: "개별총정보"
|
||||
, content: resp
|
||||
, size: "xxl"
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 사용자 함수(function)
|
||||
**************************************************************************/
|
||||
// 검색 자료 재조회
|
||||
$P.fnRefreshList = () => {
|
||||
$P.control.reload({all : true});
|
||||
}
|
||||
|
||||
// 사용자검색 callback
|
||||
$P.callbackFindUser = (userId, userNm) => {
|
||||
$("#schRgtrCd--${pageName}").val(userId); // 사용자 ID
|
||||
$("#schRgtrNm--${pageName}").val(userNm); // 사용자 명
|
||||
}
|
||||
|
||||
// 삭제사유 callback
|
||||
$P.callbackRsn = (obj) => {
|
||||
// 서버에 전송할 data(파라미터) 생성
|
||||
let params = {};
|
||||
let selected = $P.control.dataset.getKeys("selected");
|
||||
|
||||
params[$P.control.prefixed("Ids")] = selected.join(","); // IDs
|
||||
params.sggCd = $("#sggCd--${pageName}").val(); // 시군구 코드
|
||||
params.taskSeCd = $("#frmSearch--${pageName} input[name='taskSeCd']:checked").val(); // 업무 구분 코드
|
||||
params.delRsn = obj.reason; // 삭제 사유
|
||||
|
||||
$P.control.remove(params);
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 버튼 clickEvent
|
||||
**************************************************************************/
|
||||
// 업무 구분 변경 이벤트
|
||||
$P.fnResetAndChangeBiz = (taskSeCd) => {
|
||||
// 업무 구분 코드
|
||||
if (typeof taskSeCd == "undefined" || taskSeCd == null || taskSeCd == "") {
|
||||
taskSeCd = $("#layout-navbar input[name='taskSeCd']:checked").val();
|
||||
}
|
||||
|
||||
// 초기 기본 설정
|
||||
$P.initForm(taskSeCd);
|
||||
// 업무 구분별 설정
|
||||
$P.setTask(taskSeCd);
|
||||
|
||||
// dataset 초기화
|
||||
$P.control.dataset.clear();
|
||||
}
|
||||
|
||||
// 사용자검색 버튼 클릭 이벤트
|
||||
$P.fnGetFindUser = () => {
|
||||
let params = {
|
||||
openerPageName: "${pageName}"
|
||||
, callbackFuncName: "pageObject['${pageName}']['callbackFindUser']"
|
||||
}
|
||||
|
||||
ajax.get({
|
||||
url: wctx.url("/user/user02/010/main.do") + "?openerPageName=${pageName}"
|
||||
, data: params || {}
|
||||
, success: resp => {
|
||||
dialog.open({
|
||||
id: "userDialog--${pageName}"
|
||||
, title: "사용자 검색"
|
||||
, content: resp
|
||||
, size: "lg"
|
||||
, init: () => { setDialogZindex(); }
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// 검색 버튼 이벤트
|
||||
$P.fnSearchList = () => {
|
||||
// 검색조건
|
||||
$P.control.query = $P.formFields.get(); // 검색 조건
|
||||
$P.control.query.fetchSize = $P.control.defaultFetchSize; // 한번에 조회되는 자료 건수
|
||||
$P.control.query.delYn = "N"; // 삭제 여부
|
||||
|
||||
$P.control.load(1);
|
||||
}
|
||||
|
||||
// 엑셀 버튼 이벤트
|
||||
$P.fnExcel = () => {
|
||||
if ($P.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)")
|
||||
, getCellDefsForPrivacyCell);
|
||||
|
||||
$P.control.query.cellDefs = cellDefs;
|
||||
|
||||
$P.control.download();
|
||||
}
|
||||
|
||||
// 부과제외 삭제 버튼 클릭 이벤트
|
||||
$P.fnRemove = (title) => {
|
||||
// 선택 자료
|
||||
let selected = $P.control.dataset.getKeys("selected");
|
||||
|
||||
if (selected.length < 1) {
|
||||
dialog.alert({
|
||||
content: "선택하신 " + $P.control.prefixName + " 정보가 없습니다."
|
||||
, onOK: () => { }
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
// 삭제 메세지 확인
|
||||
dialog.alert({
|
||||
content: "선택하신 " + selected.length + "건의 " + $P.control.prefixName + " 정보를 삭제하시겠습니까?"
|
||||
, onOK: async() => {
|
||||
// 삭제 사유 입력
|
||||
let resp = await fetch(wctx.url("/resources/html/inputRsnDialog.html"));
|
||||
let template = await resp.text();
|
||||
|
||||
dialog.open({
|
||||
id: "inputDelRsnDialog"
|
||||
, title: title
|
||||
, size: "lg"
|
||||
, content: template
|
||||
, init: () => { setDialogZindex(); }
|
||||
, onOK: () => {
|
||||
$P.callbackRsn({ reason : $("#reason").val() });
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 초기 설정
|
||||
**************************************************************************/
|
||||
// 이벤트 설정
|
||||
$P.setEvent = () => {
|
||||
// 기본 버튼 이벤트
|
||||
$("#btnReset--${pageName}").on("click", () => $P.fnResetAndChangeBiz()); // 초기화
|
||||
$("#btnSearch--${pageName}").on("click", () => $P.fnSearchList()); // 검색
|
||||
$("#btnExcel--${pageName}").on("click", () => $P.fnExcel()); // 엑셀
|
||||
$("#btnFindUser--${pageName}").on("click", () => $P.fnGetFindUser()); // 사용자 검색
|
||||
|
||||
// 동적검색에서 엔터(Enter) 키를 누르면 검색한다.
|
||||
$("#term--${pageName}").onEnterPress(function() {
|
||||
$P.fnSearchList();
|
||||
});
|
||||
|
||||
// form-date 항목에서 키보드로 입력시 날짜 포맷팅 적용
|
||||
$("#frmSearch--${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 변경 조정 업무별 그리드가 존재 한다면.. crdn06010-main.jsp 참고
|
||||
fnMakeResizableTable($("#table-responsive--${pageName}")[0]);
|
||||
|
||||
// DataTables 스크롤 이벤트 생성
|
||||
fnMakeScrollableTable($("#table-responsive--${pageName}")[0], $P.scrollDataList);
|
||||
}
|
||||
|
||||
// 초기 화면 설정
|
||||
$P.initForm = (taskSeCd) => {
|
||||
// 화면 초기화
|
||||
$("#frmSearch--${pageName}")[0].reset();
|
||||
|
||||
// input, select 초기화
|
||||
let searchForm = $("#frmSearch--${pageName}");
|
||||
searchForm.find("input[type='radio']").not("[name='taskSeCd']").prop("checked", false);
|
||||
searchForm.find("input[type='checkbox']").prop("checked", false);
|
||||
searchForm.find("input[type='text']").val("");
|
||||
searchForm.find("input[type='hidden']").val("");
|
||||
searchForm.find("select").each(function() { $(this).find("option:eq(0)").prop("selected", true); });
|
||||
|
||||
// 최고 관리자 경우 업무구분을 선택할 수 있도록 하자.
|
||||
$("#frmSearch--${pageName} input[name='taskSeCd']").each(function(i) {
|
||||
$(this).prop("disabled", "true");
|
||||
});
|
||||
|
||||
// 기본 데이터 설정
|
||||
$("#sggCd--${pageName}").val("${sggCd}"); // 시군구 코드
|
||||
$("#frmSearch--${pageName} input[name='taskSeCd'][value='" + taskSeCd + "']").prop("checked", true); // 업무 구분 코드
|
||||
initDatepicker("frmSearch--${pageName}"); // 달력 초기화
|
||||
$("#schAcntgYmdFrom--${pageName}").datepicker("setDate", DateUtil.getDateDay(-7).date); // 회계 일자 시작
|
||||
$("#schAcntgYmdTo--${pageName}").datepicker("setDate", new Date()); // 회계 일자 종료
|
||||
$("#byOutput--${pageName}").val("동적 검색"); // 동적 검색
|
||||
$("#schRgtrNm--${pageName}").prop("readonly", true); // 사용자 이름
|
||||
}
|
||||
|
||||
// 업무 구분별 설정
|
||||
$P.setTask = (taskSeCd) => {
|
||||
// 업무구분에 따른 URL 설정
|
||||
$P.control.urls.load = wctx.url("/" + taskSeCd + "${infoPrefixUrl}" + "/010/list.do"); // 검색
|
||||
|
||||
// 업무별 조회조건
|
||||
renderForTask("frmSearch--${pageName}", taskSeCd.toLowerCase());
|
||||
|
||||
// 업무별 그리드 th
|
||||
let colContent = document.getElementById("${infoPrefix}Col--${pageName}").content;
|
||||
let cols = $(colContent).find("." + taskSeCd.toLowerCase() + ",.cmn");
|
||||
let colsOuterHTML = "";
|
||||
|
||||
cols.each(function() {
|
||||
colsOuterHTML += this.outerHTML;
|
||||
});
|
||||
$("#table-responsive--${pageName}")[0].changeColumn(colsOuterHTML);
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 최초 실행 함수
|
||||
**************************************************************************/
|
||||
// 1. 이벤트 설정
|
||||
$P.setEvent();
|
||||
|
||||
// 2. 초기 설정 및 업무 구분 변경
|
||||
$P.fnResetAndChangeBiz($("#layout-navbar input[name='taskSeCd']:checked").val());
|
||||
|
||||
// 3. 보안모드
|
||||
fn_securityModeToggle($("#securityMode--top").is(":checked"));
|
||||
});
|
||||
|
||||
</script>
|
||||
@ -1,362 +0,0 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
|
||||
<c:set var="prefixName" scope="request">수납 정보</c:set>
|
||||
|
||||
<!-- inner page html -->
|
||||
<div class="content-pop">
|
||||
<!-- Content -->
|
||||
<div class="container flex-grow-1 px-0">
|
||||
<div class="card">
|
||||
<!-- 입력 영역 -->
|
||||
<form id="frmEdit--${pageName}" name="frmEdit">
|
||||
<!-- hidden -->
|
||||
<input type="hidden" id="sggCd--${pageName}" name="sggCd" data-map="SGG_CD" />
|
||||
<input type="hidden" id="taskSeCd--${pageName}" name="taskSeCd" data-map="TASK_SE_CD" />
|
||||
<input type="hidden" id="rcvmtId--${pageName}" name="rcvmtId" data-map="RCVMT_ID" />
|
||||
<input type="hidden" id="levyId--${pageName}" name="levyId" data-map="LEVY_ID" />
|
||||
<input type="hidden" id="crdnId--${pageName}" name="crdnId" data-map="CRDN_ID" />
|
||||
|
||||
<div class="row g-1">
|
||||
<!-- 단속일시 -->
|
||||
<div class="col-md-4">
|
||||
<label for="crdnYmdTm--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">단속일시</label>
|
||||
<input type="text" class="form-control w-50" id="crdnYmdTm--${pageName}" name="crdnYmdTm" data-map="CRDN_YMD_TM" />
|
||||
</div>
|
||||
<!-- 차량번호 -->
|
||||
<div class="col-md-4">
|
||||
<label for="vhrno--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">차량번호</label>
|
||||
<input type="text" class="form-control w-40" id="vhrno--${pageName}" name="vhrno" data-map="VHRNO" />
|
||||
</div>
|
||||
<!-- 단속 상태 명 -->
|
||||
<div class="col-md-4">
|
||||
<label for="crdnSttsNm--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">단속상태</label>
|
||||
<input type="text" class="form-control w-50" id="crdnSttsNm--${pageName}" name="crdnSttsNm" data-map="CRDN_STTS_NM" />
|
||||
</div>
|
||||
<!-- 부서 코드 -->
|
||||
<div class="col-md-4">
|
||||
<label for="deptCd--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">부서코드</label>
|
||||
<input type="text" class="form-control w-30" id="deptCd--${pageName}" name="deptCd" data-map="DEPT_CD" />
|
||||
<input type="text" class="form-control w-20" id="spclBizCd--${pageName}" name="spclBizCd" data-map="SPCL_BIZ_CD" />
|
||||
</div>
|
||||
<!-- 회계 구분 코드 -->
|
||||
<div class="col-md-4">
|
||||
<label for="acntgSeCd--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">회계구분코드</label>
|
||||
<input type="text" class="form-control w-15" id="acntgSeCd--${pageName}" name="acntgSeCd" data-map="ACNTG_SE_CD" />
|
||||
</div>
|
||||
<!-- 세목 코드 -->
|
||||
<div class="col-md-4">
|
||||
<label for="txitmCd--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">세목코드</label>
|
||||
<input type="text" class="form-control w-30" id="txitmCd--${pageName}" name="txitmCd" data-map="TXITM_CD" />
|
||||
</div>
|
||||
<!-- 회계연도 -->
|
||||
<div class="col-md-4">
|
||||
<label for="fyr--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">회계연도</label>
|
||||
<input type="text" class="form-control w-20" id="fyr--${pageName}" name="fyr" data-map="FYR" />
|
||||
</div>
|
||||
<!-- 부과 번호 -->
|
||||
<div class="col-md-4">
|
||||
<label for="levyNo--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">부과번호</label>
|
||||
<input type="text" class="form-control w-30" id="levyNo--${pageName}" name="levyNo" data-map="LEVY_NO" />
|
||||
</div>
|
||||
<!-- 분납 번호 -->
|
||||
<div class="col-md-4">
|
||||
<label for="ispySn--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">분납일련번호</label>
|
||||
<input type="text" class="form-control w-15" id="ispySn--${pageName}" name="ispySn" data-map="ISPY_SN" />
|
||||
</div>
|
||||
<!-- 부과 본세 -->
|
||||
<div class="col-md-4">
|
||||
<label for="levyPcptax--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">부과본세</label>
|
||||
<input type="text" class="form-control w-30 text-end" id="levyPcptax--${pageName}" name="levyPcptax" data-map="LEVY_PCPTAX" />
|
||||
</div>
|
||||
<!-- 부과 가산금 -->
|
||||
<div class="col-md-4">
|
||||
<label for="levyAdamt--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">부과가산금</label>
|
||||
<input type="text" class="form-control w-30 text-end" id="levyAdamt--${pageName}" name="levyAdamt" data-map="LEVY_ADAMT" />
|
||||
</div>
|
||||
<!-- 분납 이자 -->
|
||||
<div class="col-md-4">
|
||||
<label for="ispyInt--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">분납이자</label>
|
||||
<input type="text" class="form-control w-30 text-end" id="ispyInt--${pageName}" name="ispyInt" data-map="ISPY_INT" />
|
||||
</div>
|
||||
|
||||
<p></p>
|
||||
|
||||
<!-- 수납 일자 -->
|
||||
<div class="col-md-4">
|
||||
<label for="rcvmtYmd--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end required">수납일자</label>
|
||||
<input type="text" class="form-control form-date" id="rcvmtYmd--${pageName}" name="rcvmtYmd" data-map="RCVMT_YMD"
|
||||
data-fmt-type="day" autocomplete="off" title="날짜 선택" maxlength="10" required />
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
</div>
|
||||
<!-- 회계 일자 -->
|
||||
<div class="col-md-4">
|
||||
<label for="acntgYmd--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">회계일자</label>
|
||||
<input type="text" class="form-control form-date" id="acntgYmd--${pageName}" name="acntgYmd" data-map="ACNTG_YMD"
|
||||
data-fmt-type="day" autocomplete="off" title="날짜 선택" maxlength="10" />
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
</div>
|
||||
<!-- 이체 일자 -->
|
||||
<div class="col-md-4">
|
||||
<label for="tsfYmd--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end required">이체일자</label>
|
||||
<input type="text" class="form-control form-date" id="tsfYmd--${pageName}" name="tsfYmd" data-map="TSF_YMD"
|
||||
data-fmt-type="day" autocomplete="off" title="날짜 선택" maxlength="10" required />
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
</div>
|
||||
<!-- 수납 구분 코드 -->
|
||||
<div class="col-md-4">
|
||||
<label for="rcvmtSeCd--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end required">수납구분</label>
|
||||
<select class="form-select" id="rcvmtSeCd--${pageName}" name="rcvmtSeCd" data-map="RCVMT_SE_CD" required>
|
||||
<c:forEach items="${FIM041List}" var="item">
|
||||
<option value="${item.code}">${item.value}</option>
|
||||
</c:forEach>
|
||||
</select>
|
||||
</div>
|
||||
<!-- 수납 금액 -->
|
||||
<div class="col-md-4">
|
||||
<label for="rcvmtAmt--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end required">수납금액</label>
|
||||
<input type="text" class="form-control w-35 text-end" id="rcvmtAmt--${pageName}" name="rcvmtAmt" data-map="RCVMT_AMT"
|
||||
data-fmt-type="number" autocomplete="off" required />
|
||||
</div>
|
||||
<!-- 수납 이자 -->
|
||||
<div class="col-md-4">
|
||||
<label for="rcvmtInt--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end required">수납이자</label>
|
||||
<input type="text" class="form-control w-35 text-end" id="rcvmtInt--${pageName}" name="rcvmtInt" data-map="RCVMT_INT"
|
||||
data-fmt-type="number" autocomplete="off" required />
|
||||
</div>
|
||||
<!-- 수납 은행 -->
|
||||
<div class="col-md-4">
|
||||
<label for="rcvmtBankNm--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">수납은행</label>
|
||||
<input type="text" class="form-control w-45" id="rcvmtBankNm--${pageName}" name="rcvmtBankNm" data-map="RCVMT_BANK_NM" autocomplete="off" />
|
||||
</div>
|
||||
<!-- 납부 방식 구분 코드 -->
|
||||
<div class="col-md-8">
|
||||
<label for="payMthdSeCd--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">납부매체</label>
|
||||
<select class="form-select" id="payMthdSeCd--${pageName}" name="payMthdSeCd" data-map="PAY_MTHD_SE_CD">
|
||||
<c:forEach items="${FIM045List}" var="item">
|
||||
<option value="${item.code}">${item.value}</option>
|
||||
</c:forEach>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<!-- 입력 영역 -->
|
||||
|
||||
<!-- 업무 버튼 및 건수 표시 -->
|
||||
<div>
|
||||
<span class="container-page-btn">
|
||||
<!-- 업무 버튼 -->
|
||||
<span class="container-window-btn-right">
|
||||
<button type="button" class="btn btn-primary w-px-80" id="btnSave--${pageName}" title="저장" onclick="fnSave${pageName}()">
|
||||
저장
|
||||
</button>
|
||||
</span>
|
||||
</span>
|
||||
</div>
|
||||
<!-- 업무 버튼 및 건수 표시 -->
|
||||
</div> <!-- <div class="card"> -->
|
||||
</div> <!-- <div class="container flex-grow-1 px-0"> -->
|
||||
<!-- Content -->
|
||||
</div>
|
||||
<!-- / inner page html <div class="content-pop"> -->
|
||||
|
||||
<script>
|
||||
/**************************************************************************
|
||||
* Global Variable
|
||||
**************************************************************************/
|
||||
pageObject["${pageName}"] = {};
|
||||
|
||||
/**************************************************************************
|
||||
* script 진입
|
||||
**************************************************************************/
|
||||
$(document).ready(function() {
|
||||
// pageObject
|
||||
let $P = pageObject["${pageName}"];
|
||||
|
||||
// infoDialog 호출 용도(view 조회(편집불가), create 등록, update 수정)
|
||||
$P.callPurpose = "${callPurpose}";
|
||||
// FormFields
|
||||
$P.formFields = new FimsFormFields("#frmEdit--${pageName}");
|
||||
|
||||
/**************************************************************************
|
||||
* DatasetControl
|
||||
**************************************************************************/
|
||||
$P.control = new DatasetControl({
|
||||
prefix: "rcvmt"
|
||||
, prefixName: "수납"
|
||||
, keymapper: info => info ? info.RCVMT_ID : ""
|
||||
, dataGetter: obj => obj.${infoPrefix}Info
|
||||
, formats: {
|
||||
CRDN_YMD_TM: datetimeFormat
|
||||
, LEVY_PCPTAX: numberFormat
|
||||
, LEVY_ADAMT: numberFormat
|
||||
, ISPY_INT: numberFormat
|
||||
, RCVMT_PCPTAX: numberFormat
|
||||
, RCVMT_ADAMT: numberFormat
|
||||
, RCVMT_INT: numberFormat
|
||||
}
|
||||
});
|
||||
|
||||
/**************************************************************************
|
||||
* DatasetControl 이벤트
|
||||
**************************************************************************/
|
||||
// 현재 선택 자료 변경 이벤트
|
||||
$P.control.onCurrentChange = (item) => {
|
||||
if (!item) return;
|
||||
|
||||
// Dataset 셋팅
|
||||
$P.formFields.set($P.control, item);
|
||||
|
||||
// 업무구분에 따른 URL 변경
|
||||
$P.fnSetURL(item.data.TASK_SE_CD);
|
||||
|
||||
// 호출용도가 등록 이라면..
|
||||
if ($P.callPurpose == "create") {
|
||||
$("#rcvmtYmd--${pageName}").datepicker("setDate", new Date()); // 수납 일자
|
||||
$("#acntgYmd--${pageName}").datepicker("setDate", new Date()); // 회계 일자
|
||||
$("#tsfYmd--${pageName}").datepicker("setDate", new Date()); // 이체 일자
|
||||
$("#rcvmtInt--${pageName}").val("0"); // 수납 이자
|
||||
}
|
||||
}
|
||||
|
||||
// 저장 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
|
||||
, init: () => { setDialogZindex(); }
|
||||
, onOK: () => { }
|
||||
});
|
||||
|
||||
if (resp.saved) {
|
||||
dialog.close($P.control.prefix + "Dialog--${openerPageName}");
|
||||
}
|
||||
}
|
||||
|
||||
// 저장
|
||||
$P.control.save = (info) => {
|
||||
if (!info) return;
|
||||
|
||||
let create = ($P.callPurpose == "create");
|
||||
|
||||
if (create) {
|
||||
info.rcvmtInptSeCd = "03"; // 수납 입력 구분 코드(FIM044) : 03 수기
|
||||
}
|
||||
|
||||
ajax.post({
|
||||
url: !create ? $P.control.urls.update : $P.control.urls.create
|
||||
, data: info || {}
|
||||
, success: resp => $P.control.onSave(resp)
|
||||
});
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 사용자 함수
|
||||
**************************************************************************/
|
||||
// 업무구분에 따른 URL 설정
|
||||
$P.fnSetURL = (taskSeCd) => {
|
||||
$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 (!customValidate($("#frmEdit--${pageName}").find("input, select, textarea"))) return;
|
||||
|
||||
// 수납금액 확인
|
||||
let rcvmtAmt = $("#rcvmtAmt--${pageName}").val();
|
||||
if (rcvmtAmt == "" || Number(rcvmtAmt) < 10) {
|
||||
dialog.alert({
|
||||
content: "수납금액은 10원 이상으로 입력되어야 합니다."
|
||||
, onOK: () => { }
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
dialog.alert({
|
||||
content: "현재 " + $P.control.prefixName + " 정보를 저장하시겠습니까?"
|
||||
, init: () => { 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 = () => {
|
||||
|
||||
|
||||
// 달력 초기화
|
||||
initDatepicker("frmEdit--${pageName}");
|
||||
$("#rcvmtYmd--${pageName}").datepicker("setDate", new Date()); // 수납 일자
|
||||
$("#pstmrkYmd--${pageName}").datepicker("setDate", new Date()); // 소인 일자
|
||||
$("#acntgYmd--${pageName}").datepicker("setDate", new Date()); // 회계 일자
|
||||
|
||||
// 화면 활성화 설정
|
||||
$("#crdnYmdTm--${pageName}").prop("readonly", true); // 단속 일시
|
||||
$("#vhrno--${pageName}").prop("readonly", true); // 차량번호
|
||||
$("#crdnSttsNm--${pageName}").prop("readonly", true); // 단속 상태
|
||||
$("#acntgSeCd--${pageName}").prop("readonly", true); // 회계 구분 코드
|
||||
$("#txitmCd--${pageName}").prop("readonly", true); // 세목 코드
|
||||
$("#fyr--${pageName}").prop("readonly", true); // 회계연도
|
||||
$("#levyNo--${pageName}").prop("readonly", true); // 부과 번호
|
||||
$("#ispySn--${pageName}").prop("readonly", true); // 분납 순번
|
||||
$("#levyPcptax--${pageName}").prop("readonly", true); // 부과 본세
|
||||
$("#levyAdamt--${pageName}").prop("readonly", true); // 부과 가산금
|
||||
$("#ispyInt--${pageName}").prop("readonly", true); // 분납이자
|
||||
|
||||
// View로 호출
|
||||
if ($P.callPurpose == "view") {
|
||||
// input 요소들을 disabled
|
||||
$("#frmEdit--${pageName}").find("input,textarea,select").prop("disabled", true);
|
||||
// button 요소들을 disabled
|
||||
$("#rcvmtYmd--${pageName}").prop("disabled", true); // 수납 일자 달력 버튼
|
||||
$("#pstmrkYmd--${pageName}").prop("disabled", true); // 소인 일자 달력 버튼
|
||||
$("#acntgYmd--${pageName}").prop("disabled", true); // 회계 일자 달력 버튼
|
||||
$("#btnSave--${pageName}").prop("disabled", true); // 저장 버튼
|
||||
}
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 최초 실행 함수
|
||||
**************************************************************************/
|
||||
// 1. 이벤트 설정
|
||||
$P.setEvent();
|
||||
|
||||
// 2. 초기 화면 설정
|
||||
$P.initForm();
|
||||
|
||||
// 3. Dataset 설정
|
||||
$P.control.setData([${rcvmtInfo}]);
|
||||
});
|
||||
|
||||
</script>
|
||||
@ -1,783 +0,0 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
|
||||
<!-- inner page html -->
|
||||
<div class="content-wrapper">
|
||||
<!-- Content -->
|
||||
<div class="container-xxl flex-grow-1 px-0">
|
||||
<c:set var="prefixName" scope="request">감액 관리</c:set>
|
||||
|
||||
<!-- Page Body -->
|
||||
<div class="card">
|
||||
<div class="wrapper-list">
|
||||
<!-- 상단 버튼 -->
|
||||
<div class="container-page-btn">
|
||||
<button type="button" class="btn btn-outline-dark w-px-120" id="btnReset--${pageName}" title="초기화">
|
||||
초기화
|
||||
</button>
|
||||
<span class="container-window-btn-right">
|
||||
<button type="button" class="btn btn-search w-px-120" id="btnSearch--${pageName}" title="검색">
|
||||
검색
|
||||
</button>
|
||||
<button type="button" class="btn btn-excel w-px-120" id="btnExcel--${pageName}" title="엑셀">
|
||||
엑셀
|
||||
</button>
|
||||
</span>
|
||||
</div>
|
||||
<!-- / 상단 버튼 -->
|
||||
|
||||
<!-- 검색 조건 영역 -->
|
||||
<form id="frmSearch--${pageName}" name="frmSearch">
|
||||
<!-- hidden -->
|
||||
<input type="hidden" id="sggCd--${pageName}" name="sggCd" />
|
||||
|
||||
<!-- 메인 조건 -->
|
||||
<div class="container-search">
|
||||
<div class="row g-1">
|
||||
<!-- 업무 구분 코드 -->
|
||||
<div class="col-12">
|
||||
<span class="form-label fw-bold form-search-title text-end">업무구분</span>
|
||||
<span class="form-search-linebox">
|
||||
<c:forEach items="${taskListForSgg}" var="item">
|
||||
<label>
|
||||
<input type="radio" class="form-check-input" name="taskSeCd" alt="업무구분"
|
||||
value="${item.code}" onchange="pageObject['${pageName}'].fnResetAndChangeBiz(this.value);">
|
||||
${item.value}
|
||||
</label>
|
||||
</c:forEach>
|
||||
</span>
|
||||
</div>
|
||||
<!-- 감액 일자 -->
|
||||
<div class="col-6">
|
||||
<span class="form-label fw-bold form-search-title text-end">감액일자</span>
|
||||
<span class="form-search-linebox">
|
||||
<input type="text" class="form-control form-date" id="schRdcamtYmdFrom--${pageName}" name="schRdcamtYmdFrom"
|
||||
data-fmt-type="day" autocomplete="off" title="시작 날짜 선택" />
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
~
|
||||
<input type="text" class="form-control form-date" id="schRdcamtYmdTo--${pageName}" name="schRdcamtYmdTo"
|
||||
data-fmt-type="day" autocomplete="off" title="종료 날짜 선택" />
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
</span>
|
||||
</div>
|
||||
<!-- 감액 구분 코드 -->
|
||||
<div class="col-6">
|
||||
<label class="form-label fw-bold form-search-title text-end" for="schRdcamtSeCd--${pageName}">감액구분</label>
|
||||
<select class="form-select w-px-100" id="schRdcamtSeCd--${pageName}" name="schRdcamtSeCd">
|
||||
<option value="">전체</option>
|
||||
<c:forEach items="${FIM085List}" var="item">
|
||||
<option value="${item.code}">${item.value}</option>
|
||||
</c:forEach>
|
||||
</select>
|
||||
</div>
|
||||
<!-- 감액 사유 코드 -->
|
||||
<div class="col-6">
|
||||
<label class="form-label fw-bold form-search-title text-end" for="schRdcamtRsnCd--${pageName}">감액사유</label>
|
||||
<select class="form-select w-px-100" id="schRdcamtRsnCd--${pageName}" name="schRdcamtRsnCd">
|
||||
<option value="">전체</option>
|
||||
<c:forEach items="${FIM085List}" var="item">
|
||||
<option value="${item.code}">${item.value}</option>
|
||||
</c:forEach>
|
||||
</select>
|
||||
</div>
|
||||
<!-- 단속 일자 -->
|
||||
<div class="col-6">
|
||||
<span class="form-label fw-bold form-search-title text-end">단속일자</span>
|
||||
<span class="form-search-linebox">
|
||||
<input type="text" class="form-control form-date" id="schCrdnYmdFrom--${pageName}" name="schCrdnYmdFrom"
|
||||
data-fmt-type="day" autocomplete="off" title="시작 날짜 선택" />
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
~
|
||||
<input type="text" class="form-control form-date" id="schCrdnYmdTo--${pageName}" name="schCrdnYmdTo"
|
||||
data-fmt-type="day" autocomplete="off" title="종료 날짜 선택" />
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
</span>
|
||||
</div>
|
||||
<!-- 차량번호 -->
|
||||
<div class="col-6">
|
||||
<label class="form-label fw-bold form-search-title text-end" for="schVhrno--${pageName}">차량번호</label>
|
||||
<input type="text" class="form-control w-px-160" id="schVhrno--${pageName}" name="schVhrno" autocomplete="off" />
|
||||
</div>
|
||||
<!-- 납부자명 -->
|
||||
<div class="col-6">
|
||||
<label class="form-label fw-bold form-search-title text-end" for="schRtpyrNm--${pageName}">납부자명</label>
|
||||
<input type="text" class="form-control w-px-160" id="schRtpyrNm--${pageName}" name="schRtpyrNm" autocomplete="off" />
|
||||
</div>
|
||||
<!-- -->
|
||||
<div class="col-6">
|
||||
</div>
|
||||
<!-- 동적검색 -->
|
||||
<div class="col-6">
|
||||
<input type="hidden" id="by--${pageName}" name="by" />
|
||||
<input type="text" class="form-control" id="byOutput--${pageName}" value="동적 검색" readonly />
|
||||
<input type="hidden" id="mainOption--${pageName}" name="mainOption" />
|
||||
<input type="hidden" id="subOption--${pageName}" name="subOption" />
|
||||
<input type="text" class="form-control w-px-320" id="term--${pageName}" name="term" autocomplete="off" />
|
||||
<!-- 상세 검색조건 버튼 -->
|
||||
<span class="flr">
|
||||
<button type="button" class="btn btn-open-detail" data-bs-toggle="collapse" data-bs-target="#searchDetail--${pageName}">
|
||||
<i class="bx bx-chevron-down"></i>
|
||||
상세검색
|
||||
</button>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div> <!-- / 메인 조건 -->
|
||||
|
||||
<!-- 상세 조건 -->
|
||||
<div id="searchDetail--${pageName}" class="container-search container-search-detail collapse">
|
||||
<div class="row g-1">
|
||||
<!-- 등록일자, 수정일자 -->
|
||||
<div class="col-6">
|
||||
<select class="form-select text-center" id="schRegDateOpt--${pageName}" name="schRegDateOpt">
|
||||
<option value="regDt">등록일자</option>
|
||||
<option value="mdfcnDt">수정일자</option>
|
||||
</select>
|
||||
<span class="form-search-linebox">
|
||||
<input type="text" class="form-control form-date" id="schRegDateFrom--${pageName}" name="schRegDateFrom"
|
||||
data-fmt-type="day" title="시작 날짜 선택" />
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
~
|
||||
<input type="text" class="form-control form-date" id="schRegDateTo--${pageName}" name="schRegDateTo"
|
||||
data-fmt-type="day" title="종료 날짜 선택">
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
</span>
|
||||
</div>
|
||||
<!-- 등록자명, 수정자명 -->
|
||||
<div class="col-6">
|
||||
<select class="form-select text-center" id="schRgtrOpt--${pageName}" name="schRgtrOpt">
|
||||
<option value="rgtr">등록자</option>
|
||||
<option value="mdfr">수정자</option>
|
||||
</select>
|
||||
<input type="hidden" id="schRgtrCd--${pageName}" name="schRgtrCd" />
|
||||
<input type="text" class="form-control" id="schRgtrNm--${pageName}" name="schRgtrNm" />
|
||||
<button type="button" class="btn btn-sm btn-outline-dark" id="btnFindUser--${pageName}" title="사용자 검색">
|
||||
검색
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div> <!-- / 상세 조건 -->
|
||||
</form> <!-- / 검색 조건 영역 -->
|
||||
|
||||
<!-- 업무 버튼 및 건수 표시 -->
|
||||
<div>
|
||||
<span class="container-page-btn">
|
||||
<!-- 건수, 페이지 표시 -->
|
||||
<div class="d-flex flex-row justify-content-between">
|
||||
<span class="dataTables_info" id="paging--${pageName}PagingInfo" role="status" aria-live="polite"></span>
|
||||
<ul class="pagination pagination-primary" id="paging--${pageName}">
|
||||
</ul>
|
||||
</div>
|
||||
<span class="container-window-btn-right">
|
||||
<!-- 업무 버튼 -->
|
||||
<button type="button" class="btn btn-primary w-px-120" id="btnUpdateRdcamt--${pageName}" title="감액 수정">
|
||||
감액 수정
|
||||
</button>
|
||||
<button type="button" class="btn btn-primary w-px-120" id="btnRemoveRdcamt--${pageName}" title="감액 삭제">
|
||||
감액 삭제
|
||||
</button>
|
||||
</span>
|
||||
</span>
|
||||
</div>
|
||||
<!-- / 업무 버튼 및 건수 표시 -->
|
||||
|
||||
<!-- DataTables(그리드) -->
|
||||
<div class="card-datatable text-nowrap">
|
||||
<div class="dataTables_wrapper dt-bootstrap5 no-footer" id="DataTables_Table_0_wrapper--${pageName}">
|
||||
<div class="table-responsive ox-scroll oy-scroll h-px-500" id="table-responsive--${pageName}">
|
||||
<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">
|
||||
<tr id="theadTr--${pageName}"
|
||||
data-by="by--${pageName}" data-by-output="byOutput--${pageName}" data-main-option="mainOption--${pageName}" data-sub-option="subOption--${pageName}">
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="tbody--${pageName}">
|
||||
</tbody>
|
||||
|
||||
<template id="${infoPrefix}Col--${pageName}">
|
||||
<th class="cmn" style="width: 72px;">No.</th>
|
||||
<th class="cmn" style="width: 56px;"><input type="checkbox" class="form-check-input" id="gridAllCheckbox--${pageName}" onchange="pageObject['${pageName}'].control.select(this.checked);" /></th>
|
||||
<th class="cmn" style="width: 160px;">업무구분</th>
|
||||
<th class="cmn" style="width: 120px;" onclick="searchFromGridTitle('LEVY_EXCL_YMD', this.innerText, 'ymd', '');">부과제외일자</th>
|
||||
<th class="cmn" style="width: 120px;" onclick="searchFromGridTitle('LEVY_EXCL_SE_CD', this.innerText, 'codeValue', 'FIM021');">부과제외구분</th>
|
||||
<th class="cmn" style="width: 200px;" onclick="searchFromGridTitle('LEVY_EXCL_RSN_CD', this.innerText, 'codeValue', 'FIM022');">부과제외사유</th>
|
||||
<th class="cmn" style="width: 280px;" onclick="searchFromGridTitle('ETC_CN', this.innerText, 'match', 'part');">기타내용</th>
|
||||
<th class="cmn" style="width: 160px;" onclick="searchFromGridTitle('CVLCPT_APLY_NO', this.innerText, 'match', 'part');">민원신청번호</th>
|
||||
<th class="cmn" style="width: 160px;" onclick="searchFromGridTitle('CVLCPT_RCPT_NO', this.innerText, 'match', 'part');">민원접수번호</th>
|
||||
<th class="cmn" style="width: 120px;" onclick="searchFromGridTitle('CVLCPT_RCPT_YMD', this.innerText, 'ymd', '');">민원접수일자</th>
|
||||
<th class="cmn" style="width: 180px;" onclick="searchFromGridTitle('CRDN_YMD', this.innerText, 'ymd', '');">단속일시</th>
|
||||
<th class="cmn" style="width: 160px;" onclick="searchFromGridTitle('VHRNO', this.innerText, 'match', 'part');">차량번호</th>
|
||||
<th class="cmn" style="width: 120px;" onclick="searchFromGridTitle('RTPYR_SE_CD', this.innerText, 'codeValue', 'FIM011');">납부자구분</th>
|
||||
<th class="cmn" style="width: 160px;" onclick="searchFromGridTitle('RTPYR_NO', this.innerText, 'ymd', '');">납부자번호</th>
|
||||
<th class="cmn" style="width: 200px;" onclick="searchFromGridTitle('RTPYR_NM', this.innerText, 'match', 'part');">납부자명</th>
|
||||
<th class="cmn" style="width: 120px;" onclick="searchFromGridTitle('CRDN_STDG_NM', this.innerText, 'match', 'part');">단속법정동</th>
|
||||
<th class="cmn" style="width: 280px;" onclick="searchFromGridTitle('CRDN_PLC', this.innerText, 'match', 'part');">단속장소</th>
|
||||
<th class="bpv" style="width: 280px;" onclick="searchFromGridTitle('DTL_CRDN_PLC', this.innerText, 'match', 'part');">상세단속장소</th>
|
||||
<th class="cmn" style="width: 160px;" onclick="searchFromGridTitle('VLTN_ARTCL', this.innerText, 'match', 'part');">위반항목</th>
|
||||
<th class="cmn" style="width: 120px;" onclick="searchFromGridTitle('FFNLG_CRDN_AMT', this.innerText, 'match', 'part');">단속원금</th>
|
||||
<th class="cmn" style="width: 160px;" onclick="searchFromGridTitle('CRDN_STTS_CD', this.innerText, 'codeValue', 'FIM010');">처리상태</th>
|
||||
<th class="pvs" style="width: 140px;" onclick="searchFromGridTitle('CRDN_SPAREA_CD', this.innerText, 'codeValue', 'FIM007');">단속특별구역</th>
|
||||
<th class="eca" style="width: 140px;" onclick="searchFromGridTitle('USE_FUEL_CD', this.innerText, 'codeValue', 'LVS005');">사용연료</th>
|
||||
<th class="dpv" style="width: 140px;" onclick="searchFromGridTitle('PRK_PSBLTY_RSLT_CD', this.innerText, 'codeValue', 'FIM034');">주차가능여부</th>
|
||||
<th class="cmn" style="width: 100px;" onclick="searchFromGridTitle('ZIP', this.innerText, 'match', 'part');">우편번호</th>
|
||||
<th class="cmn" style="width: 280px;" onclick="searchFromGridTitle('ADDR', this.innerText, 'match', 'part');">주소</th>
|
||||
<th class="cmn" style="width: 320px;" onclick="searchFromGridTitle('DTL_ADDR', this.innerText, 'match', 'part');">상세주소</th>
|
||||
<th class="cmn" style="width: 180px;">등록일시</th>
|
||||
<th class="cmn" style="width: 140px;">등록사용자</th>
|
||||
<th class="cmn" style="width: 180px;">수정일시</th>
|
||||
<th class="cmn" style="width: 140px;">수정사용자</th>
|
||||
<th class="cmn dummy-th"></th>
|
||||
</template>
|
||||
<template id="${infoPrefix}Row--${pageName}">
|
||||
<tr data-key="{LEVY_EXCL_ID}">
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{ROW_NUM}</td>
|
||||
<td class="cmn text-center"><input type="checkbox" class="form-check-input" name="gridCheckbox" value="{LEVY_EXCL_ID}" onchange="pageObject['${pageName}'].control.select('{LEVY_EXCL_ID}', this.checked);" /></td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{TASK_SE_NM}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{LEVY_EXCL_YMD}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{LEVY_EXCL_SE_NM}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{LEVY_EXCL_RSN_NM}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{ETC_CN}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{CVLCPT_APLY_NO}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{CVLCPT_RCPT_NO}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{CVLCPT_RCPT_YMD}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{CRDN_YMD_TM}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{VHRNO}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{RTPYR_SE_NM}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{RTPYR_NO}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{RTPYR_NM}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{CRDN_STDG_NM}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{CRDN_PLC}</td>
|
||||
<td class="bpv text-start" onclick="{onclick}" ondblclick="{ondblclick}">{DTL_CRDN_PLC}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{VLTN_ARTCL}</td>
|
||||
<td class="cmn text-end" onclick="{onclick}" ondblclick="{ondblclick}">{FFNLG_CRDN_AMT}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{CRDN_STTS_NM}</td>
|
||||
<td class="pvs text-center" onclick="{onclick}" ondblclick="{ondblclick}">{CRDN_SPAREA_NM}</td>
|
||||
<td class="eca text-center" onclick="{onclick}" ondblclick="{ondblclick}">{USE_FUEL_NM}</td>
|
||||
<td class="dpv text-center" onclick="{onclick}" ondblclick="{ondblclick}">{PRK_PSBLTY_RSLT_NM}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{ZIP}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{ADDR}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{DTL_ADDR}</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}">{MDFCN_DT}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{MDFR_NM}</td>
|
||||
<td class="cmn dummy-td"></td>
|
||||
</tr>
|
||||
</template>
|
||||
<template id="${infoPrefix}NotFound--${pageName}">
|
||||
<tr class="bpv">
|
||||
<td valign="top" colspan="29" class="dataTables_empty text-center">${prefixName} 정보를 찾지 못했습니다.</td>
|
||||
</tr>
|
||||
<tr class="dpv">
|
||||
<td valign="top" colspan="29" class="dataTables_empty text-center">${prefixName} 정보를 찾지 못했습니다.</td>
|
||||
</tr>
|
||||
<tr class="eca">
|
||||
<td valign="top" colspan="29" class="dataTables_empty text-center">${prefixName} 정보를 찾지 못했습니다.</td>
|
||||
</tr>
|
||||
<tr class="pvs">
|
||||
<td valign="top" colspan="29" class="dataTables_empty text-center">${prefixName} 정보를 찾지 못했습니다.</td>
|
||||
</tr>
|
||||
<tr class="pes">
|
||||
<td valign="top" colspan="29" class="dataTables_empty text-center">${prefixName} 정보를 찾지 못했습니다.</td>
|
||||
</tr>
|
||||
</template>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- / DataTables(그리드) -->
|
||||
</div> <!-- <div class="wrapper-list"> -->
|
||||
</div> <!-- <div class="card"> -->
|
||||
</div> <!-- <div class="container-xxl flex-grow-1 px-0"> -->
|
||||
<!-- / Content -->
|
||||
|
||||
<div class="content-backdrop fade"></div>
|
||||
</div>
|
||||
<!-- / inner page html <div class="content-wrapper"> -->
|
||||
|
||||
<script>
|
||||
/**************************************************************************
|
||||
* Global Variable
|
||||
**************************************************************************/
|
||||
pageObject["${pageName}"] = {};
|
||||
|
||||
/**************************************************************************
|
||||
* script 진입
|
||||
**************************************************************************/
|
||||
$(document).ready(function() {
|
||||
// pageObject
|
||||
var $P = pageObject["${pageName}"];
|
||||
|
||||
// URL
|
||||
$P.PrefixUrl = "/rdca/rdca01";
|
||||
// FormFields
|
||||
$P.formFields = new FimsFormFields("#frmSearch--${pageName}");
|
||||
|
||||
/**************************************************************************
|
||||
* DatasetControl
|
||||
**************************************************************************/
|
||||
$P.control = new DatasetControl({
|
||||
prefix : "rdcamt"
|
||||
, prefixName : "감액"
|
||||
, infoSize : "md"
|
||||
, keymapper : info => info ? info.RDAMT_ID : ""
|
||||
, dataGetter : obj => obj.${infoPrefix}List
|
||||
, appendData : true
|
||||
, formats : {
|
||||
LEVY_EXCL_YMD : dateFormat
|
||||
, CRDN_YMD_TM : datetimeFormat
|
||||
, CVLCPT_RCPT_YMD : dateFormat
|
||||
, FFNLG_CRDN_AMT : numberFormat
|
||||
, REG_DT : datetimeFormat
|
||||
, MDFCN_DT : datetimeFormat
|
||||
}
|
||||
});
|
||||
// $P.control 설정
|
||||
$P.control.defaultFetchSize = FETCH_XS; // 1 페이지당 조회되는 자료 건수 index.jsp에서 확인 FETCH_XS = 30
|
||||
$P.control.query = { pageNum : 1, fetchSize : $P.control.defaultFetchSize };
|
||||
$P.control.beforeCurrent = null;
|
||||
|
||||
/**************************************************************************
|
||||
* DatasetControl 이벤트
|
||||
**************************************************************************/
|
||||
// Dataset 변경 이벤트
|
||||
$P.control.onDatasetChange = (obj, option) => {
|
||||
$P.renderList(obj.${infoPrefix}Total, option);
|
||||
|
||||
$("#paging--${pageName}").setPagingInfo({
|
||||
list : $P.control.dataset
|
||||
, prefix : "paging--${pageName}"
|
||||
, start : obj.${infoPrefix}Start
|
||||
, totalSize : obj.${infoPrefix}Total
|
||||
, fetchSize : obj.${infoPrefix}Fetch
|
||||
, func : "$P.control.load({index})"
|
||||
});
|
||||
|
||||
|
||||
};
|
||||
|
||||
// 현재 선택 자료 변경 이벤트
|
||||
$P.control.onCurrentChange = item => {
|
||||
if (!item) return;
|
||||
|
||||
let key = item.data.LEVY_EXCL_ID;
|
||||
|
||||
$("#tbody--${pageName}").setCurrentRow(key);
|
||||
};
|
||||
|
||||
// 선택(체크) 변경 이벤트
|
||||
$P.control.onSelectionChange = selected => {
|
||||
let ${infoPrefix}List = $P.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()));
|
||||
});
|
||||
|
||||
$("#btnRemoveRdcamt--${pageName}").prop("disabled", keys.length < 1);
|
||||
};
|
||||
|
||||
// 수정 dialog
|
||||
$P.control.getInfo = (params) => {
|
||||
if (!params) return;
|
||||
|
||||
ajax.get({
|
||||
url : $P.control.urls.getInfo
|
||||
, data : params || {}
|
||||
, success : resp => {
|
||||
dialog.open({
|
||||
id : $P.control.prefixed("Dialog")
|
||||
, title : dialogTitle
|
||||
, content : resp
|
||||
, size : $P.control.infoSize
|
||||
, onClose : () => { $P.refreshList(); }
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// 삭제 callback
|
||||
$P.control.onRemove = (resp) => {
|
||||
let btnTitle = $("#btnRemoveRdcamt--${pageName}").attr("title");
|
||||
let showMessage = resp.rtnMsg.replace(/[S]|[F]/g, btnTitle);
|
||||
|
||||
// 메시지 출력
|
||||
dialog.alert({
|
||||
content : showMessage
|
||||
, onOK : () => { }
|
||||
});
|
||||
|
||||
if (resp.saved) {
|
||||
$P.refreshList(); // 자료 재조회
|
||||
}
|
||||
}
|
||||
|
||||
// 삭제
|
||||
$P.control.remove = (params) => {
|
||||
if (!params) return;
|
||||
|
||||
ajax.post({
|
||||
url : $P.control.urls.remove
|
||||
, data : params
|
||||
, success : resp => $P.control.onRemove(resp)
|
||||
});
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* DataTables 이벤트
|
||||
**************************************************************************/
|
||||
// DataTables에 click, dbclick 이벤트
|
||||
$P.renderList = (totalSize, option) => {
|
||||
let ${infoPrefix}List = $P.control.dataset;
|
||||
let empty = ${infoPrefix}List.empty;
|
||||
let clsForTask = $("#frmSearch--${pageName} input[name='taskSeCd']:checked").val().toLowerCase(); // 소문자
|
||||
|
||||
// 업무별 DataTables(그리드) tr, td
|
||||
let foundContent = document.getElementById("${infoPrefix}Row--${pageName}").content;
|
||||
let foundTr = $(foundContent).find("tr")[0].cloneNode(false);
|
||||
let foundTds = $(foundContent).find("." + clsForTask + ",.cmn");
|
||||
|
||||
foundTds.each(function() {
|
||||
foundTr.appendChild(this.cloneNode(true));
|
||||
});
|
||||
|
||||
//
|
||||
let replacer = (str, dataItem) => str
|
||||
.replace(/{onclick}/gi, "pageObject['${pageName}'].control.setCurrent('" + dataItem.getValue("LEVY_EXCL_ID") + "');")
|
||||
.replace(/{ondblclick}/gi, "pageObject['${pageName}'].getTotalInfo('" + dataItem.getValue("CRDN_ID") + "');");
|
||||
|
||||
let trs = empty ? [document.getElementById("${infoPrefix}NotFound--${pageName}").content.querySelector("." + clsForTask + ",.cmn").outerHTML]
|
||||
: ${infoPrefix}List.inStrings(foundTr.outerHTML, replacer);
|
||||
|
||||
let noMore = (${infoPrefix}List.length >= totalSize);
|
||||
let initScroll = ($P.control.query.pageNum < 2);
|
||||
if(option != null && option.reloaded){
|
||||
initScroll = false;
|
||||
}
|
||||
|
||||
$("#table-responsive--${pageName}")[0].changeContent(trs.join(), initScroll, noMore);
|
||||
|
||||
// checkbox 체크 해제
|
||||
$("#DataTables_Table_0--${pageName} th input[type='checkbox']").prop("checked", false);
|
||||
|
||||
// 보안모드
|
||||
fn_securityModeToggle($("#securityMode--top").is(":checked"));
|
||||
}
|
||||
|
||||
// DataTables에 스크롤이 맨 밑으로 이동했을 때 이벤트
|
||||
$P.scrollDataList = () => {
|
||||
|
||||
|
||||
$P.control.load($P.control.query.pageNum + 1);
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 사용자 함수(function)
|
||||
**************************************************************************/
|
||||
// callback 사용자 검색
|
||||
$P.callbackFindUser = (userId, userNm) => {
|
||||
$("#schRgtrCd--${pageName}").val(userId); // 사용자 ID
|
||||
$("#schRgtrNm--${pageName}").val(userNm); // 사용자 명
|
||||
}
|
||||
|
||||
// 사용자 검색
|
||||
$P.getFindUser = () => {
|
||||
let params = {
|
||||
openerPageName : "${pageName}"
|
||||
, callbackFuncName : "pageObject['${pageName}']['callbackFindUser']"
|
||||
}
|
||||
|
||||
ajax.get({
|
||||
url : wctx.url("/user/user02/010/main.do")
|
||||
, data : params || {}
|
||||
, success : resp => {
|
||||
dialog.open({
|
||||
id : "userDialog"
|
||||
, title : "사용자 검색"
|
||||
, content : resp
|
||||
, size : "lg"
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// 개별총정보 dialog
|
||||
$P.getTotalInfo = (crdnId) => {
|
||||
if (typeof crdnId == "undefined" || crdnId == null || crdnId == "") return;
|
||||
|
||||
let params = {
|
||||
callControlName: "pageObject['${pageName}'].control"
|
||||
, sggCd: $("#sggCd--${pageName}").val() // 시군구 코드
|
||||
, taskSeCd: $("#frmSearch--${pageName} 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"
|
||||
, init : () => { }
|
||||
, onClose : () => { }
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// 사유 callback
|
||||
$P.callbackRsn = (obj) => {
|
||||
// 서버에 전송할 data(파라미터) 생성
|
||||
let params = {};
|
||||
params[$P.control.prefixed("IDs")] = selected.join(","); // IDs
|
||||
params.delRsn = obj.reason; // 삭제 사유
|
||||
|
||||
$P.control.remove(params);
|
||||
}
|
||||
|
||||
// 검색 자료 재조회
|
||||
$P.refreshList = () => {
|
||||
$P.control.reload({all : true});
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 버튼 clickEvent
|
||||
**************************************************************************/
|
||||
// 업무 구분 변경
|
||||
$P.fnResetAndChangeBiz = (taskSeCd) => {
|
||||
// 업무 구분 코드
|
||||
if (typeof taskSeCd == "undefined" || taskSeCd == null || taskSeCd == "") {
|
||||
taskSeCd = $("#layout-navbar input[name='taskSeCd']:checked").val();
|
||||
}
|
||||
|
||||
// 초기 기본 설정
|
||||
$P.initForm();
|
||||
// 기본 데이터 설정
|
||||
$P.initData(taskSeCd);
|
||||
// 업무 구분별 설정
|
||||
$P.setTask(taskSeCd);
|
||||
|
||||
// dataset 초기화
|
||||
$P.control.dataset.clear();
|
||||
}
|
||||
|
||||
// 검색 버튼 이벤트
|
||||
$P.fnSearchList = () => {
|
||||
// 검색조건
|
||||
$P.control.query = $P.formFields.get();
|
||||
$P.control.query.fetchSize = $P.control.defaultFetchSize; // 한번에 조회되는 자료 건수
|
||||
$P.control.query.delYn = "N"; // 삭제 여부
|
||||
|
||||
$P.control.load(1);
|
||||
}
|
||||
|
||||
// 엑셀 버튼 이벤트
|
||||
$P.fnExcel = () => {
|
||||
if ($P.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)")
|
||||
, getCellDefsForPrivacyCell);
|
||||
|
||||
$P.control.query.cellDefs = cellDefs;
|
||||
|
||||
$P.control.download();
|
||||
}
|
||||
|
||||
// 사용자 조회 버튼 이벤트
|
||||
$P.fnFindUser = () => {
|
||||
$P.getFindUser();
|
||||
}
|
||||
|
||||
// 수정 버튼 이벤트
|
||||
$P.fnUpdateRdcamt = () => {
|
||||
// 감액 ID
|
||||
let rdamtId = $P.control.dataset.getValue("RDAMT_ID");
|
||||
// 감액 ID 가 없다면.. return
|
||||
if (typeof rdamtId == "undefined" || rdamtId == null || rdamtId == "") return;
|
||||
|
||||
let params = {
|
||||
title : title
|
||||
, callPurpose : "update"
|
||||
, rdamtId : rdamtId // 감액 ID
|
||||
, sggCd : $P.control.dataset.getValue("SGG_CD") // 시군구 코드
|
||||
, taskSeCd : $P.control.dataset.getValue("TASK_SE_CD") // 업무 구분 코드
|
||||
, rdcamtSeCd : $P.control.dataset.getValue("RDCAMT_SE_CD") // 감액 구분 코드
|
||||
, rdcamtRsnCd : $P.control.dataset.getValue("RDCAMT_RSN_CD") // 감액 사유 코드
|
||||
};
|
||||
|
||||
$P.control.getInfo(params);
|
||||
}
|
||||
|
||||
// 삭제 버튼 이벤트
|
||||
$P.fnRemoveRdcamt = () => {
|
||||
// 선택 자료
|
||||
let selected = $P.control.dataset.getKeys("selected");
|
||||
|
||||
if (selected.length < 1) return;
|
||||
|
||||
// 삭제 메세지 확인
|
||||
dialog.alert({
|
||||
content : "선택하신 " + selected.length + "건의 " + $P.control.prefixName + " 정보를 삭제하시겠습니까?"
|
||||
, onOK : async() => {
|
||||
// 삭제 사유 입력
|
||||
var resp = await fetch(wctx.url("/resources/html/inputRsnDialog.html"));
|
||||
var template = await resp.text();
|
||||
|
||||
dialog.open({
|
||||
id : "inputDelRsnDialog",
|
||||
title: "삭제",
|
||||
size : "lg",
|
||||
content: template,
|
||||
init : () => {
|
||||
setDialogZindex();
|
||||
},
|
||||
onOK : () => {
|
||||
$P.callbackRsn({ reason : $("#reason").val() });
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 초기 설정
|
||||
**************************************************************************/
|
||||
// 이벤트 설정
|
||||
$P.setEvent = () => {
|
||||
// 기본 버튼 이벤트
|
||||
$("#btnReset--${pageName}").on("click", () => $P.fnResetAndChangeBiz()); // 초기화
|
||||
$("#btnSearch--${pageName}").on("click", () => $P.fnSearchList()); // 검색
|
||||
$("#btnExcel--${pageName}").on("click", () => $P.fnExcel()); // 엑셀
|
||||
$("#btnFindUser--${pageName}").on("click", () => $P.fnFindUser()); // 사용자 검색
|
||||
|
||||
// 동적검색에서 엔터(Enter) 키를 누르면 검색한다.
|
||||
$("#term--${pageName}").onEnterPress(function() {
|
||||
$P.fnSearchList();
|
||||
});
|
||||
|
||||
// form-date 항목에서 키보드로 입력시 날짜 포맷팅 적용
|
||||
$("#frmSearch--${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);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// 감액 수정 버튼 이벤트
|
||||
$("#btnUpdateRdcamt--${pageName}").on("click", function() {
|
||||
$P.fnUpdateRdcamt($(this).attr("title"));
|
||||
});
|
||||
// 감액 삭제 버튼 이벤트
|
||||
$("#btnRemoveRdcamt--${pageName}").on("click", function() {
|
||||
$P.fnRemoveRdcamt($(this).attr("title"));
|
||||
});
|
||||
|
||||
// DataTables width 변경 조정 업무별 그리드가 존재 한다면.. crdn06010-main.jsp 참고
|
||||
fnMakeResizableTable($("#table-responsive--${pageName}")[0]);
|
||||
|
||||
// DataTables 스크롤 이벤트 생성
|
||||
fnMakeScrollableTable($("#table-responsive--${pageName}")[0], $P.scrollDataList);
|
||||
}
|
||||
|
||||
// 초기 화면 설정
|
||||
$P.initForm = () => {
|
||||
// 화면 초기화
|
||||
$("#frmSearch--${pageName}")[0].reset();
|
||||
|
||||
// input, select 초기화
|
||||
let searchForm = $("#frmSearch--${pageName}");
|
||||
searchForm.find("input[type='radio']").not("[name='taskSeCd']").prop("checked", false);
|
||||
searchForm.find("input[type='checkbox']").prop("checked", false);
|
||||
searchForm.find("input[type='text']").val("");
|
||||
searchForm.find("input[type='hidden']").val("");
|
||||
searchForm.find("select").each(function() { $(this).find("option:eq(0)").prop("selected", true); });
|
||||
|
||||
// 최고 관리자 경우 업무구분을 선택할 수 있도록 하자.
|
||||
$("#frmSearch--${pageName} input[name='taskSeCd']").each(function(i) {
|
||||
$(this).prop("disabled", "true");
|
||||
});
|
||||
|
||||
// 달력 초기화
|
||||
initDatepicker("frmSearch--${pageName}");
|
||||
$("#schRdcamtYmdFrom--${pageName}").datepicker("setDate", new Date());
|
||||
$("#schRdcamtYmdTo--${pageName}").datepicker("setDate", new Date());
|
||||
|
||||
// 동적 검색
|
||||
$("#byOutput--${pageName}").val("동적 검색");
|
||||
|
||||
// 사용자 이름
|
||||
$("#schRgtrNm--${pageName}").prop("readonly", true);
|
||||
}
|
||||
|
||||
// 기본 데이터 설정
|
||||
$P.initData = (taskSeCd) => {
|
||||
// 시군구 코드
|
||||
$("#sggCd--${pageName}").val("${sggCd}");
|
||||
// 업무 구분 코드
|
||||
$("#frmSearch--${pageName} input[name='taskSeCd'][value='" + taskSeCd + "']").prop("checked", true);
|
||||
// 일자
|
||||
$("#schRdcamtYmdFrom--${pageName}").datepicker("setDate", DateUtil.getDateDay(-7).date);
|
||||
$("#schRdcamtYmdTo--${pageName}").datepicker("setDate", new Date());
|
||||
}
|
||||
|
||||
// 업무 구분별 설정
|
||||
$P.setTask = (taskSeCd) => {
|
||||
let clsForTask = taskSeCd.toLowerCase();
|
||||
|
||||
// 업무별 조회조건
|
||||
renderForTask("frmSearch--${pageName}", clsForTask);
|
||||
|
||||
// 업무별 그리드 th
|
||||
let colContent = document.getElementById("${infoPrefix}Col--${pageName}").content;
|
||||
let cols = $(colContent).find("." + clsForTask + ",.cmn");
|
||||
let colsOuterHTML = "";
|
||||
|
||||
cols.each(function() {
|
||||
colsOuterHTML += this.outerHTML;
|
||||
});
|
||||
$("#table-responsive--${pageName}")[0].changeColumn(colsOuterHTML);
|
||||
|
||||
// URL 설정
|
||||
$P.setURL(taskSeCd);
|
||||
}
|
||||
|
||||
// 업무구분에 따른 URL 설정
|
||||
$P.setURL = (taskSeCd) => {
|
||||
$P.control.urls.load = wctx.url("/" + taskSeCd + $P.PrefixUrl + "/010/list.do"); // 조회
|
||||
$P.control.urls.remove = wctx.url("/" + taskSeCd + $P.PrefixUrl + "/010/remove.do"); // 삭제
|
||||
$P.control.urls.getInfo = wctx.url("/" + taskSeCd + $P.PrefixUrl + "/020/info.do"); // 수정
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 최초 실행 함수
|
||||
**************************************************************************/
|
||||
// 1. 이벤트 설정
|
||||
$P.setEvent();
|
||||
|
||||
// 2. 초기 설정 및 업무 구분 변경
|
||||
$P.fnResetAndChangeBiz($("#layout-navbar input[name='taskSeCd']:checked").val());
|
||||
|
||||
// 3. 보안모드
|
||||
fn_securityModeToggle($("#securityMode--top").is(":checked"));
|
||||
});
|
||||
|
||||
</script>
|
||||
@ -1,274 +0,0 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
|
||||
<!-- inner page html -->
|
||||
<div class="content-pop">
|
||||
<!-- Content -->
|
||||
<div class="container flex-grow-1 px-0">
|
||||
<c:set var="prefixName" scope="request">감액 정보</c:set>
|
||||
|
||||
<!-- Page Body -->
|
||||
<div class="card">
|
||||
<!-- 입력 영역 -->
|
||||
<form id="frmEdit--${pageName}" name="frmEdit">
|
||||
<!-- hidden -->
|
||||
<input type="hidden" id="crdnId--${pageName}" name="crdnId" data-map="CRDN_ID" />
|
||||
<input type="hidden" id="sggCd--${pageName}" name="sggCd" data-map="SGG_CD" />
|
||||
<input type="hidden" id="taskSeCd--${pageName}" name="taskSeCd" data-map="TASK_SE_CD" />
|
||||
<input type="hidden" id="levyExclId--${pageName}" name="levyExclId" data-map="LEVY_EXCL_ID" />
|
||||
|
||||
<div class="row g-1">
|
||||
<!-- 단속일시 -->
|
||||
<div class="col-md-12">
|
||||
<label for="crdnYmdTm--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">단속일시</label>
|
||||
<input type="text" class="form-control w-35" id="crdnYmdTm--${pageName}" name="crdnYmdTm" data-map="CRDN_YMD_TM" data-fmt-type="dt" />
|
||||
</div>
|
||||
<!-- 차량번호 -->
|
||||
<div class="col-md-12">
|
||||
<label for="vhrno--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">차량번호</label>
|
||||
<input type="text" class="form-control w-px-120" id="vhrno--${pageName}" name="vhrno" data-map="VHRNO" autocomplete="off" />
|
||||
</div>
|
||||
<!-- 부과 제외 구분 -->
|
||||
<div class="col-md-12">
|
||||
<label for="levyExclSeNm--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end required">부과제외구분</label>
|
||||
<input type="text" class="form-control w-px-120" id="levyExclSeNm--${pageName}" autocomplete="off" />
|
||||
<input type="hidden" id="levyExclSeCd--${pageName}" name="levyExclSeCd" data-map="LEVY_EXCL_SE_CD" />
|
||||
</div>
|
||||
<!-- 부과 제외 일자 -->
|
||||
<div class="col-md-12">
|
||||
<label for="levyExclYmd--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end required">부과제외일자</label>
|
||||
<input type="text" class="form-control form-date" id="levyExclYmd--${pageName}" name="levyExclYmd" data-map="LEVY_EXCL_YMD"
|
||||
data-fmt-type="day" autocomplete="off" title="날짜 선택" maxlength="10" required />
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white" id="btnLevyExclYmd--${pageName}"></button>
|
||||
</div>
|
||||
<!-- 부과 제외 사유 -->
|
||||
<div class="col-md-12">
|
||||
<label for="levyExclRsnCd--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end required">부과제외사유</label>
|
||||
<select class="form-select" id="levyExclRsnCd--${pageName}" name="levyExclRsnCd" data-map="LEVY_EXCL_RSN_CD" required>
|
||||
<option value="">선택하세요</option>
|
||||
<c:forEach items="${FIM022List}" var="item">
|
||||
<option value="${item.code}">${item.value}</option>
|
||||
</c:forEach>
|
||||
</select>
|
||||
</div>
|
||||
<!-- 기타 내용 -->
|
||||
<div class="col-md-12">
|
||||
<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-70" id="etcCn--${pageName}" name="etcCn" data-map="ETC_CN" autocomplete="off" rows="3" data-maxlengthb="1000"></textarea>
|
||||
</div>
|
||||
</div>
|
||||
</form> <!-- /입력 영역 -->
|
||||
</div> <!-- <div class="card"> -->
|
||||
|
||||
<!-- 업무 버튼 표시 -->
|
||||
<div>
|
||||
<span class="container-page-btn">
|
||||
<span class="container-window-btn-right">
|
||||
<!-- 업무 버튼 -->
|
||||
<button type="button" class="btn btn-primary w-px-80" id="btnSave--${pageName}" title="저장">
|
||||
저장
|
||||
</button>
|
||||
</span>
|
||||
</span>
|
||||
</div>
|
||||
<!-- / 업무 버튼 표시 -->
|
||||
|
||||
</div> <!-- / Content <div class="container flex-grow-1 px-0"> -->
|
||||
</div> <!-- / inner page html <div class="content-pop"> -->
|
||||
|
||||
<script>
|
||||
/**************************************************************************
|
||||
* Global Variable
|
||||
**************************************************************************/
|
||||
pageObject["${pageName}"] = {};
|
||||
|
||||
// infoDialog 호출 용도(view 조회(편집불가), create 등록, update 수정)
|
||||
var ${pageName}CallPurpose = "${callPurpose}";
|
||||
|
||||
// 공통 코드
|
||||
var FIM021 = new CommonCodes(${FIM021}, true);
|
||||
var FIM022 = new CommonCodes(${FIM022}, true);
|
||||
|
||||
/**************************************************************************
|
||||
* script 진입
|
||||
**************************************************************************/
|
||||
$(document).ready(function() {
|
||||
// pageObject
|
||||
var $P = pageObject["${pageName}"];
|
||||
|
||||
// URL
|
||||
$P.PrefixUrl = "/excl/excl01";
|
||||
// FormFields
|
||||
$P.formFields = new FimsFormFields("#frmEdit--${pageName}");
|
||||
|
||||
/**************************************************************************
|
||||
* DatasetControl
|
||||
**************************************************************************/
|
||||
$P.control = new DatasetControl({
|
||||
prefix : "levyExcl"
|
||||
, prefixName : "부과제외"
|
||||
, keymapper : info => info ? info.LEVY_EXCL_ID : ""
|
||||
, dataGetter : obj => obj.levyExclInfo
|
||||
, urls : {
|
||||
create : wctx.url("/" + $P.PrefixUrl + "/020/create.do") // 등록
|
||||
, update : wctx.url("/" + $P.PrefixUrl + "/020/update.do") // 수정
|
||||
}
|
||||
});
|
||||
|
||||
/**************************************************************************
|
||||
* DatasetControl 이벤트
|
||||
**************************************************************************/
|
||||
$P.control.onCurrentChange = item => {
|
||||
if (!item) return;
|
||||
|
||||
// Dataset 셋팅
|
||||
$P.formFields.set($P.control,item);
|
||||
|
||||
// 업무구분에 따른 URL 변경
|
||||
$P.setURL(item.data.TASK_SE_CD);
|
||||
|
||||
// 부과제외구분에 따른 부과제외사유 설정
|
||||
$P.setFim021(item.data.LEVY_EXCL_SE_CD, item.data.LEVY_EXCL_RSN_CD);
|
||||
|
||||
// 호출용도가 등록 이라면..
|
||||
if (${pageName}CallPurpose = "create") {
|
||||
$("#levyExclYmd--${pageName}").datepicker("setDate", new Date());
|
||||
}
|
||||
}
|
||||
|
||||
// 저장 callback
|
||||
$P.control.onSave = (resp) => {
|
||||
let dialogTitle = $("#" + $P.control.prefix + "Dialog").find("h5.modal-title").html();
|
||||
let showMessage = resp.rtnMsg.replace(/[S]|[F]/g, dialogTitle);
|
||||
|
||||
// 메시지 출력
|
||||
dialog.alert({
|
||||
content : showMessage
|
||||
, onOK : () => { }
|
||||
});
|
||||
|
||||
if (resp.saved) {
|
||||
dialog.close($P.control.prefix + "Dialog");
|
||||
|
||||
if ("${savedCallbackFuncName}" != "") {
|
||||
${savedCallbackFuncName}(resp.saved);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 저장
|
||||
$P.control.save = (info) => {
|
||||
if (!info) return;
|
||||
|
||||
let create = isEmpty(info.levyExclId);
|
||||
|
||||
// 민원 접수 관리에서 호출했다면..
|
||||
if (create && "${saveCallbackFuncName}" != "") {
|
||||
${saveCallbackFuncName}(info);
|
||||
} else {
|
||||
ajax.post({
|
||||
url : !create ? $P.control.urls.update : $P.control.urls.create
|
||||
, data : info
|
||||
, success : resp => $P.control.onSave(resp)
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 사용자 함수(function)
|
||||
**************************************************************************/
|
||||
// 부과제외 구분에 따른 부과제외 사유 코드 설정
|
||||
$P.setFim021 = (seCode, rsnCode) => {
|
||||
let cmnCode = FIM021[seCode];
|
||||
|
||||
$("#levyExclSeCd--${pageName}").val(cmnCode.code);
|
||||
$("#levyExclSeNm--${pageName}").val(cmnCode.value);
|
||||
|
||||
let reasons = FIM022.list().filter(reason => "2" == seCode ? reason.code > "200" : reason.code < "200");
|
||||
$("#levyExclRsnCd--${pageName}").html(reasons.map(reason => "<option value='" + reason.code + "'>" + reason.value + "</option>").join());
|
||||
|
||||
if (typeof rsnCode != "undefined" && rsnCode != "") {
|
||||
$("#levyExclRsnCd--${pageName}").val(rsnCode);
|
||||
}
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 버튼 clickEvent
|
||||
**************************************************************************/
|
||||
// 저장 버튼 클릭 이벤트
|
||||
$P.fnSave = () => {
|
||||
// validate 확인
|
||||
if (!customValidate($("#frmEdit--${pageName}").find("input, select, textarea"))) return;
|
||||
|
||||
dialog.alert({
|
||||
content : "현재 " + $P.control.prefixName + " 정보를 저장하시겠습니까?"
|
||||
, onOK : () => {
|
||||
$P.control.save($P.formFields.get());
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 초기 셋팅
|
||||
**************************************************************************/
|
||||
// 이벤트 설정
|
||||
$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 = () => {
|
||||
|
||||
|
||||
// 달력 초기화
|
||||
initDatepicker("frmEdit--${pageName}");
|
||||
$("#levyExclYmd--${pageName}").datepicker("setDate", new Date());
|
||||
|
||||
// 화면 활성화 설정
|
||||
$("#crdnYmdTm--${pageName}").prop("readonly", true); // 단속 일시
|
||||
$("#vhrno--${pageName}").prop("readonly", true); // 차량번호
|
||||
$("#levyExclSeNm--${pageName}").prop("readonly", true); // 부과 제외 구분
|
||||
|
||||
if (${pageName}CallPurpose == "view") {
|
||||
// input 요소들을 disabled
|
||||
$("#frmEdit--${pageName}").find("input,textarea,select").prop("disabled", true);
|
||||
// button 요소들을 disabled
|
||||
$("#btnLevyExclYmd--${pageName}").prop("disabled", true); // 부과제외 일자 달력 버튼
|
||||
$("#btnSave--${pageName}").prop("disabled", true); // 저장 버튼
|
||||
}
|
||||
}
|
||||
|
||||
// 업무구분에 따른 URL 설정
|
||||
$P.setURL = (taskSeCd) => {
|
||||
$P.control.urls.create = wctx.url("/" + taskSeCd + $P.PrefixUrl + "/020/create.do"); // 등록
|
||||
$P.control.urls.update = wctx.url("/" + taskSeCd + $P.PrefixUrl + "/020/update.do"); // 수정
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 최초 실행 함수
|
||||
**************************************************************************/
|
||||
// 1. 이벤트 설정
|
||||
$P.setEvent();
|
||||
|
||||
// 2. 초기 화면 설정
|
||||
$P.initForm();
|
||||
|
||||
// 3. Dataset 설정
|
||||
$P.control.setData([${levyExclInfo}]);
|
||||
});
|
||||
|
||||
</script>
|
||||
@ -1,464 +0,0 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
|
||||
<c:set var="prefixName" scope="request">임대기업</c:set>
|
||||
|
||||
<!-- inner page html -->
|
||||
<div class="content-wrapper">
|
||||
<!-- Content -->
|
||||
<div class="container-xxl flex-grow-1 px-0">
|
||||
<div class="card wrapper-list">
|
||||
<!-- 상단 버튼 -->
|
||||
<div class="container-page-btn">
|
||||
<button type="button" class="btn btn-outline-dark w-px-120" id="btnReset--${pageName}" title="초기화">
|
||||
초기화
|
||||
</button>
|
||||
<span class="container-window-btn-right">
|
||||
<button type="button" class="btn btn-search w-px-120" id="btnSearch--${pageName}" title="검색">
|
||||
검색
|
||||
</button>
|
||||
<button type="button" class="btn btn-excel w-px-120" id="btnExcel--${pageName}" title="엑셀">
|
||||
엑셀
|
||||
</button>
|
||||
</span>
|
||||
</div>
|
||||
<!-- 상단 버튼 -->
|
||||
|
||||
<!-- 검색 조건 영역 -->
|
||||
<form id="frmSearch--${pageName}" name="frmSearch">
|
||||
<!-- hidden -->
|
||||
<input type="hidden" id="sggCd--${pageName}" name="sggCd" />
|
||||
<input type="hidden" id="userId--${pageName}" name="userId" />
|
||||
|
||||
<!-- 메인 조건 -->
|
||||
<div class="container-search">
|
||||
<div class="row g-1">
|
||||
<!-- 사용자 계정 -->
|
||||
<div class="col-4">
|
||||
<label class="form-label fw-bold form-search-title w-px-120 text-end" for="schUserAcnt--${pageName}">사용자계정</label>
|
||||
<input type="text" class="form-control w-px-160" id="schUserAcnt--${pageName}" name="schUserAcnt" readonly autocomplete="off" />
|
||||
</div>
|
||||
</div>
|
||||
</div> <!-- 메인 조건 -->
|
||||
</form>
|
||||
<!-- 검색 조건 영역 -->
|
||||
|
||||
<!-- 업무 버튼 및 건수 표시 -->
|
||||
<div>
|
||||
<span class="container-page-btn">
|
||||
<!-- 건수, 페이지 표시 -->
|
||||
<div class="d-flex flex-row justify-content-between">
|
||||
<span class="dataTables_info" id="paging--${pageName}PagingInfo" role="status" aria-live="polite"></span>
|
||||
<ul class="pagination pagination-primary" id="paging--${pageName}">
|
||||
</ul>
|
||||
</div>
|
||||
<!-- 업무 버튼 -->
|
||||
<span class="container-window-btn-right">
|
||||
<button type="button" class="btn btn-primary w-px-120" id="btnCreate--${pageName}" title="대여기업 등록">
|
||||
대여기업 등록
|
||||
</button>
|
||||
<button type="button" class="btn btn-primary w-px-120" id="btnRemove--${pageName}" title="대여기업 삭제">
|
||||
대여기업 삭제
|
||||
</button>
|
||||
</span>
|
||||
</span>
|
||||
</div>
|
||||
<!-- 업무 버튼 및 건수 표시 -->
|
||||
|
||||
<!-- DataTables(그리드) -->
|
||||
<div class="card-datatable text-nowrap">
|
||||
<div class="dataTables_wrapper dt-bootstrap5 no-footer" id="DataTables_Table_0_wrapper--${pageName}">
|
||||
<div class="table-responsive ox-scroll oy-scroll h-px-500" id="table-responsive--${pageName}">
|
||||
<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">
|
||||
<tr id="theadTr--${pageName}"
|
||||
data-by="by--${pageName}" data-by-output="byOutput--${pageName}" data-main-option="mainOption--${pageName}" data-sub-option="subOption--${pageName}">
|
||||
<th class="cmn" style="width: 72px;">No.</th>
|
||||
<th class="cmn" style="width: 56px;"><input type="checkbox" class="form-check-input" id="gridAllCheckbox--${pageName}" onchange="pageObject['${pageName}'].control.select(this.checked);" /></th>
|
||||
<th class="cmn" style="width: 120px;" onclick="searchFromGridTitle('ENT_SE_CD', this.innerText, 'codeValue', 'FIM088');">기업구분</th>
|
||||
<th class="cmn" style="width: 160px;" onclick="searchFromGridTitle('ENT_NM', this.innerText, 'ymd', '');">기업명</th>
|
||||
<th class="cmn" style="width: 200px;" onclick="searchFromGridTitle('ENT_NO', this.innerText, 'match', 'part');">법인(사업자)번호</th>
|
||||
<th class="cmn" style="width: 160px;" onclick="searchFromGridTitle('ENT_TELNO', this.innerText, 'match', 'part');">전화번호</th>
|
||||
<th class="cmn" style="width: 120px;" onclick="searchFromGridTitle('ENT_FXNO', this.innerText, 'match', 'part');">팩스번호</th>
|
||||
<th class="cmn" style="width: 280px;" onclick="searchFromGridTitle('ENT_EML_ADDR', this.innerText, 'match', 'part');">이메일주소</th>
|
||||
<th class="cmn" style="width: 100px;" onclick="searchFromGridTitle('ENT_ZIP', this.innerText, 'match', 'part');">우편번호</th>
|
||||
<th class="cmn" style="width: 280px;" onclick="searchFromGridTitle('ENT_ADDR', this.innerText, 'match', 'part');">주소</th>
|
||||
<th class="cmn" style="width: 320px;" onclick="searchFromGridTitle('ENT_DTL_ADDR', this.innerText, 'match', 'part');">상세주소</th>
|
||||
<th class="cmn" style="width: 180px;">등록일시</th>
|
||||
<th class="cmn" style="width: 140px;">등록사용자</th>
|
||||
<th class="cmn dummy-th"></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="tbody--${pageName}">
|
||||
</tbody>
|
||||
<template id="${infoPrefix}Row--${pageName}">
|
||||
<tr data-key="{ENT_ID}">
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{ROW_NUM}</td>
|
||||
<td class="cmn text-center"><input type="checkbox" class="form-check-input" name="gridCheckbox" value="{ENT_ID}" onchange="pageObject['${pageName}'].control.select('{ENT_ID}', this.checked);"></td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{ENT_SE_NM}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{ENT_NM}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{ENT_NO}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{ENT_TELNO}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{ENT_FXNO}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{ENT_EML_ADDR}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{ENT_ZIP}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{ENT_ADDR}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{ENT_DTL_ADDR}</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 dummy-td"></td>
|
||||
</tr>
|
||||
</template>
|
||||
<template id="${infoPrefix}NotFound--${pageName}">
|
||||
<tr class="odd">
|
||||
<td valign="top" colspan="14" class="dataTables_empty text-center">${prefixName} 정보를 찾지 못했습니다.</td>
|
||||
</tr>
|
||||
</template>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- DataTables(그리드) -->
|
||||
</div> <!-- <div class="card wrapper-list"> -->
|
||||
</div> <!-- <div class="container-xxl flex-grow-1 px-0"> -->
|
||||
<!-- Content -->
|
||||
|
||||
<div class="content-backdrop fade"></div>
|
||||
</div>
|
||||
<!-- / inner page html <div class="content-wrapper"> -->
|
||||
|
||||
<script>
|
||||
/**************************************************************************
|
||||
* Global Variable
|
||||
**************************************************************************/
|
||||
pageObject["${pageName}"] = {};
|
||||
|
||||
/**************************************************************************
|
||||
* script 진입
|
||||
**************************************************************************/
|
||||
$(document).ready(function() {
|
||||
// pageObject
|
||||
let $P = pageObject["${pageName}"];
|
||||
|
||||
// FormFields
|
||||
$P.formFields = new FimsFormFields("#frmSearch--${pageName}");
|
||||
|
||||
/**************************************************************************
|
||||
* DatasetControl
|
||||
**************************************************************************/
|
||||
$P.control = new DatasetControl({
|
||||
prefix: "rentEnt"
|
||||
, prefixName: "임대기업"
|
||||
, keymapper: info => info ? info.ENT_ID : ""
|
||||
, dataGetter: obj => obj.${infoPrefix}List
|
||||
, appendData: true
|
||||
, infoSize: "md"
|
||||
, formats: {
|
||||
REG_DT: datetimeFormat
|
||||
}
|
||||
});
|
||||
// $P.control 설정
|
||||
$P.control.defaultFetchSize = FETCH_XS; // 1 페이지당 조회되는 자료 건수 index.jsp에서 확인 FETCH_XS = 30
|
||||
$P.control.query = { pageNum : 1, fetchSize : $P.control.defaultFetchSize };
|
||||
$P.control.beforeCurrent = null;
|
||||
|
||||
/**************************************************************************
|
||||
* DatasetControl 이벤트
|
||||
**************************************************************************/
|
||||
// Dataset 변경 이벤트
|
||||
$P.control.onDatasetChange = (obj, option) => {
|
||||
$P.renderList(obj.${infoPrefix}Total, option);
|
||||
|
||||
$("#paging--${pageName}").setPagingInfo({
|
||||
list: $P.control.dataset
|
||||
, prefix: "paging--${pageName}"
|
||||
, start: obj.${infoPrefix}Start
|
||||
, totalSize: obj.${infoPrefix}Total
|
||||
, fetchSize: obj.${infoPrefix}Fetch
|
||||
, func: "pageObject['${pageName}'].control.load({index})"
|
||||
});
|
||||
};
|
||||
|
||||
// 현재 선택 자료 변경 이벤트
|
||||
$P.control.onCurrentChange = (item) => {
|
||||
if (!item) return;
|
||||
|
||||
let key = item.data.ENT_ID;
|
||||
|
||||
$("#tbody--${pageName}").setCurrentRow(key);
|
||||
};
|
||||
|
||||
// 선택(체크) 변경 이벤트
|
||||
$P.control.onSelectionChange = (selected) => {
|
||||
let ${infoPrefix}List = $P.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()));
|
||||
});
|
||||
|
||||
// 삭제 버튼
|
||||
$("#btnRemove--${pageName}").prop("disabled", keys.length < 1);
|
||||
|
||||
// DataTables(그리드) 전체 선택(checkbox)
|
||||
if (keys.length < 1) {
|
||||
$("#DataTables_Table_0--${pageName} th input[type='checkbox']").prop("checked", false); // 체크 해제
|
||||
} else if (keys.length == ${infoPrefix}List.length) {
|
||||
$("#DataTables_Table_0--${pageName} th input[type='checkbox']").prop("checked", true); // 체크 설정
|
||||
} else {
|
||||
$("#DataTables_Table_0--${pageName} th input[type='checkbox']").prop("checked", false); // 체크 해제
|
||||
}
|
||||
};
|
||||
|
||||
// 상세정보 dialog
|
||||
$P.control.getInfo = (gdntcId) => {
|
||||
let dialogTitle = "";
|
||||
let params = {};
|
||||
|
||||
if (typeof gdntcId == "undefined" || gdntcId == null || gdntcId == "") {
|
||||
dialogTitle = $P.control.prefixName + " 등록";
|
||||
|
||||
params.callPurpose = "create";
|
||||
params.sggCd = $("#sggCd--${pageName}").val(); // 시군구 코드
|
||||
params.taskSeCd = $("#frmSearch--${pageName} input[name='taskSeCd']:checked").val(); // 업무 구분 코드
|
||||
} else {
|
||||
dialogTitle = $P.control.prefixName + " 수정";
|
||||
|
||||
params.callPurpose = "update";
|
||||
params.sggCd = $("#sggCd--${pageName}").val(); // 시군구 코드
|
||||
params.taskSeCd = $("#frmSearch--${pageName} input[name='taskSeCd']:checked").val(); // 업무 구분 코드
|
||||
params.gdntcId = gdntcId;
|
||||
}
|
||||
|
||||
ajax.get({
|
||||
url: wctx.url("/" + params.taskSeCd + "${infoPrefixUrl}" + "/020/info.do") + "?openerPageName=${pageName}"
|
||||
, data: params || {}
|
||||
, success: resp => {
|
||||
dialog.open({
|
||||
id: $P.control.prefixed("Dialog--${pageName}")
|
||||
, title: dialogTitle
|
||||
, content: resp
|
||||
, size: $P.control.infoSize
|
||||
, onClose : () => { $P.fnRefreshList(); } // 자료 재조회
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// 삭제 callback
|
||||
$P.control.onRemove = (resp) => {
|
||||
let btnTitle = $("#btnRemove--${pageName}").attr("title");
|
||||
let showMessage = resp.rtnMsg.replace(/[S]|[F]/g, btnTitle);
|
||||
|
||||
// 메시지 출력
|
||||
dialog.alert({
|
||||
content: showMessage
|
||||
, init: () => { setDialogZindex(); }
|
||||
, onOK: () => { }
|
||||
});
|
||||
|
||||
if (resp.saved) { $P.fnRefreshList(); } // 자료 재조회
|
||||
}
|
||||
|
||||
// 삭제
|
||||
$P.control.remove = (params) => {
|
||||
if (!params) return;
|
||||
|
||||
ajax.post({
|
||||
url: wctx.url("/" + params.taskSeCd + "${infoPrefixUrl}" + "/010/remove.do")
|
||||
, data: params || {}
|
||||
, success: resp => $P.control.onRemove(resp)
|
||||
});
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* DataTables 이벤트
|
||||
**************************************************************************/
|
||||
// DataTables에 click, dbclick 이벤트
|
||||
$P.renderList = (totalSize, option) => {
|
||||
let ${infoPrefix}List = $P.control.dataset;
|
||||
let empty = ${infoPrefix}List.empty;
|
||||
|
||||
let trs = empty ?
|
||||
[document.getElementById("${infoPrefix}NotFound--${pageName}").innerHTML] : <%-- from template#${infoPrefix}NotFound --%>
|
||||
${infoPrefix}List.inStrings(
|
||||
document.getElementById("${infoPrefix}Row--${pageName}").innerHTML, <%-- from template#${infoPrefix}Row --%>
|
||||
(str, dataItem) => str
|
||||
.replace(/{onclick}/gi, "pageObject['${pageName}'].control.setCurrent('" + dataItem.getValue("ENT_ID") + "');")
|
||||
.replace(/{ondblclick}/gi, "pageObject['${pageName}'].control.getInfo('" + dataItem.getValue("ENT_ID") + "');")
|
||||
);
|
||||
|
||||
let noMore = (${infoPrefix}List.length >= totalSize);
|
||||
let initScroll = ($P.control.query.pageNum < 2);
|
||||
if(option != null && option.reloaded){
|
||||
initScroll = false;
|
||||
}
|
||||
|
||||
$("#table-responsive--${pageName}")[0].changeContent(trs.join(), initScroll, noMore);
|
||||
|
||||
// checkbox 체크 해제
|
||||
$("#DataTables_Table_0--${pageName} th input[type='checkbox']").prop("checked", false);
|
||||
|
||||
//보안모드
|
||||
fn_securityModeToggle($("#securityMode--top").is(":checked"));
|
||||
}
|
||||
|
||||
// DataTables에 스크롤이 맨 밑으로 이동했을 때 이벤트
|
||||
$P.scrollDataList = () => {
|
||||
$P.control.load($P.control.query.pageNum + 1);
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 사용자 함수(function)
|
||||
**************************************************************************/
|
||||
// 검색 자료 재조회
|
||||
$P.fnRefreshList = () => {
|
||||
$P.control.reload({all : true});
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 버튼 clickEvent
|
||||
**************************************************************************/
|
||||
// 업무 구분 변경 이벤트
|
||||
$P.fnResetAndChangeBiz = () => {
|
||||
// 초기 기본 설정
|
||||
$P.initForm();
|
||||
// 업무 구분별 설정
|
||||
$P.setTask();
|
||||
|
||||
// dataset 초기화
|
||||
$P.control.dataset.clear();
|
||||
}
|
||||
|
||||
// 검색 버튼 이벤트
|
||||
$P.fnSearchList = () => {
|
||||
// 검색조건
|
||||
$P.control.query = $P.formFields.get(); // 검색 조건
|
||||
$P.control.query.fetchSize = $P.control.defaultFetchSize; // 한번에 조회되는 자료 건수
|
||||
$P.control.query.delYn = "N"; // 삭제 여부
|
||||
|
||||
$P.control.load(1);
|
||||
}
|
||||
|
||||
// 엑셀 버튼 이벤트
|
||||
$P.fnExcel = () => {
|
||||
if ($P.control.dataset.empty) {
|
||||
dialog.alert({
|
||||
content: "검색된 자료가 없습니다."
|
||||
, init: () => { setDialogZindex(); }
|
||||
, 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)")
|
||||
, getCellDefsForPrivacyCell);
|
||||
|
||||
$P.control.query.cellDefs = cellDefs;
|
||||
|
||||
$P.control.download();
|
||||
}
|
||||
|
||||
// 전자우편 안내문 등록 버튼 이벤트
|
||||
$P.fnCreate = (title) => {
|
||||
$P.control.getInfo();
|
||||
}
|
||||
|
||||
// 삭제 버튼 이벤트
|
||||
$P.fnRemove = (title) => {
|
||||
let selected = $P.control.dataset.getKeys("selected");
|
||||
|
||||
if (selected.length < 1) return;
|
||||
|
||||
let params = {};
|
||||
params.sggCd = $("#sggCd--${pageName}").val(); // 시군구 코드
|
||||
params.taskSeCd = $("#frmSearch--${pageName} input[name='taskSeCd']:checked").val(); // 업무 구분 코드
|
||||
params.gdntcIds = selected.join(","); // params[$P.control.prefixed("IDs")] = selected.join(",");
|
||||
|
||||
dialog.alert({
|
||||
content: "선택한 " + $P.control.prefixName + " 정보를 삭제하시겠습니까?"
|
||||
, onOK: () => {
|
||||
$P.control.remove(params);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 초기 설정
|
||||
**************************************************************************/
|
||||
// 이벤트 설정
|
||||
$P.setEvent = () => {
|
||||
// 기본 버튼 이벤트
|
||||
$("#btnReset--${pageName}").on("click", () => $P.fnResetAndChangeBiz()); // 초기화
|
||||
$("#btnSearch--${pageName}").on("click", () => $P.fnSearchList()); // 검색
|
||||
$("#btnExcel--${pageName}").on("click", () => $P.fnExcel()); // 엑셀
|
||||
|
||||
// form-date 항목에서 키보드로 입력시 날짜 포맷팅 적용
|
||||
$("#frmSearch--${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);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// 버튼 이벤트
|
||||
$("#btnCreate--${pageName}").on("click", function() {
|
||||
$P.fnCreate($(this).attr("title")); // 등록
|
||||
});
|
||||
$("#btnRemove--${pageName}").on("click", function() {
|
||||
$P.fnRemove($(this).attr("title")); // 삭제
|
||||
});
|
||||
|
||||
// DataTables width 변경 조정 업무별 그리드가 존재 한다면.. crdn06010-main.jsp 참고
|
||||
fnMakeResizableTable($("#table-responsive--${pageName}")[0]);
|
||||
|
||||
// DataTables 스크롤 이벤트 생성
|
||||
fnMakeScrollableTable($("#table-responsive--${pageName}")[0], $P.scrollDataList);
|
||||
}
|
||||
|
||||
// 초기 화면 설정
|
||||
$P.initForm = () => {
|
||||
// 화면 초기화
|
||||
$("#frmSearch--${pageName}")[0].reset();
|
||||
|
||||
// input, select 초기화
|
||||
let searchForm = $("#frmSearch--${pageName}");
|
||||
searchForm.find("input[type='checkbox']").prop("checked", false);
|
||||
searchForm.find("input[type='text']").val("");
|
||||
searchForm.find("input[type='hidden']").val("");
|
||||
searchForm.find("select").each(function() { $(this).find("option:eq(0)").prop("selected", true); });
|
||||
|
||||
// 기본 데이터 설정
|
||||
$("#sggCd--${pageName}").val("${sggCd}"); // 시군구 코드
|
||||
$("#userId--${pageName}").val("${userId}"); // 사용자 ID
|
||||
$("#schUserAcnt--${pageName}").val("${userAcnt}"); // 사용자 계정
|
||||
}
|
||||
|
||||
// 업무 구분별 설정
|
||||
$P.setTask = () => {
|
||||
// 업무구분에 따른 URL 설정
|
||||
$P.control.urls.load = wctx.url("${infoPrefixUrl}" + "/010/list.do"); // 검색
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 최초 실행 함수
|
||||
**************************************************************************/
|
||||
// 1. 이벤트 설정
|
||||
$P.setEvent();
|
||||
|
||||
// 2. 초기 설정 및 업무 구분 변경
|
||||
$P.fnResetAndChangeBiz();
|
||||
|
||||
// 3. 보안모드
|
||||
fn_securityModeToggle($("#securityMode--top").is(":checked"));
|
||||
});
|
||||
|
||||
</script>
|
||||
@ -1,811 +0,0 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
|
||||
<c:set var="prefixName" scope="request">계고장 발송 대상</c:set>
|
||||
|
||||
<!-- inner page html -->
|
||||
<div class="content-wrapper">
|
||||
<!-- Content -->
|
||||
<div class="container-xxl flex-grow-1 px-0">
|
||||
<div class="card wrapper-list">
|
||||
<!-- 상단 버튼 -->
|
||||
<div class="container-page-btn">
|
||||
<button type="button" class="btn btn-outline-dark w-px-120" id="btnReset--${pageName}" title="초기화">
|
||||
초기화
|
||||
</button>
|
||||
<span class="container-window-btn-right">
|
||||
<button type="button" class="btn btn-search w-px-120" id="btnSearch--${pageName}" title="검색">
|
||||
검색
|
||||
</button>
|
||||
<button type="button" class="btn btn-excel w-px-120" id="btnExcel--${pageName}" title="엑셀">
|
||||
엑셀
|
||||
</button>
|
||||
</span>
|
||||
</div>
|
||||
<!-- 상단 버튼 -->
|
||||
|
||||
<!-- 검색 조건 영역 -->
|
||||
<form id="frmSearch--${pageName}" name="frmSearch">
|
||||
<!-- hidden -->
|
||||
<input type="hidden" id="sggCd--${pageName}" name="sggCd" />
|
||||
|
||||
<!-- 메인 조건 -->
|
||||
<div class="container-search">
|
||||
<div class="row g-1">
|
||||
<!-- 업무 구분 -->
|
||||
<div class="col-12">
|
||||
<span class="form-label fw-bold form-search-title w-px-120 text-end">업무구분</span>
|
||||
<span class="form-search-linebox">
|
||||
<c:forEach items="${taskListForSgg}" var="item">
|
||||
<label>
|
||||
<input type="radio" class="form-check-input" name="taskSeCd" alt="업무구분"
|
||||
value="${item.code}" onchange="pageObject['${pageName}'].fnResetAndChangeBiz(this.value);">
|
||||
${item.value}
|
||||
</label>
|
||||
</c:forEach>
|
||||
</span>
|
||||
</div>
|
||||
<!-- 계고 일자 -->
|
||||
<div class="col-6">
|
||||
<label class="form-label fw-bold form-search-title w-px-120 text-end" for="schLevyExclYmdFrom--${pageName}">계고일자</label>
|
||||
<span class="form-search-linebox">
|
||||
<input type="text" class="form-control form-date" id="schLevyExclYmdFrom--${pageName}" name="schLevyExclYmdFrom"
|
||||
data-fmt-type="day" title="시작 날짜 선택" />
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
~
|
||||
<input type="text" class="form-control form-date" id="schLevyExclYmdTo--${pageName}" name="schLevyExclYmdTo"
|
||||
data-fmt-type="day" title="종료 날짜 선택" />
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
</span>
|
||||
</div>
|
||||
<!-- 계고 사유 -->
|
||||
<div class="col-6">
|
||||
<label class="form-label fw-bold form-search-title w-px-120 text-end" for="schLevyExclRsnCd--${pageName}">계고사유</label>
|
||||
<select class="form-select w-px-200" id="schLevyExclRsnCd--${pageName}" name="schLevyExclRsnCd">
|
||||
<option value="">전체</option>
|
||||
<c:forEach items="${FIM022List}" var="item">
|
||||
<option value="${item.code}">${item.value}</option>
|
||||
</c:forEach>
|
||||
</select>
|
||||
</div>
|
||||
<!-- 위반 항목 -->
|
||||
<div class="col-6">
|
||||
<label class="form-label fw-bold form-search-title w-px-120 text-end" for="schVltnCd--${pageName}">위반항목</label>
|
||||
<select class="form-select w-px-160" id="schVltnCd--${pageName}" name="schVltnCd">
|
||||
<option value="">전체</option>
|
||||
<c:forEach items="${FIM004List}" var="item">
|
||||
<option value="${item.code}">${item.value}</option>
|
||||
</c:forEach>
|
||||
</select>
|
||||
</div>
|
||||
<!-- 동적검색 -->
|
||||
<div class="col-6">
|
||||
<input type="hidden" id="by--${pageName}" name="by" />
|
||||
<input type="text" class="form-control fw-bold w-px-120 text-end" id="byOutput--${pageName}" value="동적 검색" readonly />
|
||||
<input type="hidden" id="mainOption--${pageName}" name="mainOption" />
|
||||
<input type="hidden" id="subOption--${pageName}" name="subOption" />
|
||||
<input type="text" class="form-control w-px-400" id="term--${pageName}" name="term" autocomplete="off" />
|
||||
<!-- 상세 검색조건 버튼 -->
|
||||
<span class="flr">
|
||||
<button type="button" class="btn btn-open-detail" data-bs-toggle="collapse" data-bs-target="#searchDetail--${pageName}">
|
||||
<i class="bx bx-chevron-down"></i>
|
||||
상세검색
|
||||
</button>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div> <!-- 메인 조건 -->
|
||||
|
||||
<!-- 상세 조건 -->
|
||||
<div id="searchDetail--${pageName}" class="container-search container-search-detail collapse">
|
||||
<div class="row g-1">
|
||||
<!-- 단속일자 -->
|
||||
<div class="col-4">
|
||||
<label class="form-label fw-bold form-search-title w-px-120 text-end" for="schCrdnYmdFrom--${pageName}">단속일자</label>
|
||||
<span class="form-search-linebox">
|
||||
<input type="text" class="form-control form-date" id="schCrdnYmdFrom--${pageName}" name="schCrdnYmdFrom"
|
||||
data-fmt-type="day" autocomplete="off" title="시작 날짜 선택" />
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
~
|
||||
<input type="text" class="form-control form-date" id="schCrdnYmdTo--${pageName}" name="schCrdnYmdTo"
|
||||
data-fmt-type="day" autocomplete="off" title="종료 날짜 선택" />
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
</span>
|
||||
</div>
|
||||
<!-- 차량번호 -->
|
||||
<div class="col-4">
|
||||
<label class="form-label fw-bold form-search-title w-px-120 text-end" for="schVhrno--${pageName}">차량번호</label>
|
||||
<input type="text" class="form-control w-px-160" id="schVhrno--${pageName}" name="schVhrno" autocomplete="off" />
|
||||
</div>
|
||||
<!-- 납부자번호 -->
|
||||
<div class="col-4">
|
||||
<label class="form-label fw-bold form-search-title w-px-120 text-end" for="schRtpyrNm--${pageName}">납부자번호</label>
|
||||
<input type="text" class="form-control w-px-160" id="schRtpyrNm--${pageName}" name="schRtpyrNm" autocomplete="off" />
|
||||
</div>
|
||||
<!-- 납부자명 -->
|
||||
<div class="col-4">
|
||||
<label class="form-label fw-bold form-search-title w-px-120 text-end" for="schRtpyrNo--${pageName}">납부자명</label>
|
||||
<input type="text" class="form-control w-px-160" id="schRtpyrNo--${pageName}" name="schRtpyrNo" autocomplete="off" />
|
||||
</div>
|
||||
<!-- 등록일자, 수정일자 -->
|
||||
<div class="col-4">
|
||||
<select class="form-select w-px-120 text-center" id="schRegDateOpt--${pageName}" name="schRegDateOpt">
|
||||
<option value="regDt">등록일자</option>
|
||||
<option value="mdfcnDt">수정일자</option>
|
||||
</select>
|
||||
<span class="form-search-linebox">
|
||||
<input type="text" class="form-control form-date" id="schRegDateFrom--${pageName}" name="schRegDateFrom"
|
||||
data-fmt-type="day" title="시작 날짜 선택" />
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
~
|
||||
<input type="text" class="form-control form-date" id="schRegDateTo--${pageName}" name="schRegDateTo"
|
||||
data-fmt-type="day" title="종료 날짜 선택">
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
</span>
|
||||
</div>
|
||||
<!-- 등록자명, 수정자명 -->
|
||||
<div class="col-4">
|
||||
<select class="form-select w-px-120 text-center" id="schRgtrOpt--${pageName}" name="schRgtrOpt">
|
||||
<option value="rgtr">등록자</option>
|
||||
<option value="mdfr">수정자</option>
|
||||
</select>
|
||||
<input type="hidden" id="schRgtrCd--${pageName}" name="schRgtrCd" />
|
||||
<input type="text" class="form-control w-px-160" id="schRgtrNm--${pageName}" name="schRgtrNm" />
|
||||
<button type="button" class="btn btn-sm btn-outline-dark" id="btnFindUser--${pageName}" title="사용자 검색">검색</button>
|
||||
</div>
|
||||
</div>
|
||||
</div> <!-- 상세 조건 -->
|
||||
</form>
|
||||
<!-- 검색 조건 영역 -->
|
||||
|
||||
<!-- 업무 버튼 및 건수 표시 -->
|
||||
<div>
|
||||
<span class="container-page-btn">
|
||||
<!-- 건수, 페이지 표시 -->
|
||||
<div class="d-flex flex-row justify-content-between">
|
||||
<span class="dataTables_info" id="paging--${pageName}PagingInfo" role="status" aria-live="polite"></span>
|
||||
<ul class="pagination pagination-primary" id="paging--${pageName}">
|
||||
</ul>
|
||||
</div>
|
||||
<!-- 업무 버튼 -->
|
||||
<span class="container-window-btn-right">
|
||||
<button type="button" class="btn btn-primary w-px-120" id="btnUpdateWrng--${pageName}" title="계고 수정">
|
||||
계고 수정
|
||||
</button>
|
||||
<button type="button" class="btn btn-primary w-px-120" id="btnCreateSlctnTrgtInfo--${pageName}" title="선택 발송대상 등록">
|
||||
선택 대상 등록
|
||||
</button>
|
||||
<button type="button" class="btn btn-primary w-px-120" id="btnCreateWholTrgtInfo--${pageName}" title="선택 발송대상 등록">
|
||||
전체 대상 등록
|
||||
</button>
|
||||
</span>
|
||||
</span>
|
||||
</div>
|
||||
<!-- 업무 버튼 및 건수 표시 -->
|
||||
|
||||
<!-- DataTables(그리드) -->
|
||||
<div class="card-datatable text-nowrap">
|
||||
<div class="dataTables_wrapper dt-bootstrap5 no-footer" id="DataTables_Table_0_wrapper--${pageName}">
|
||||
<div class="table-responsive ox-scroll oy-scroll h-px-500" id="table-responsive--${pageName}">
|
||||
<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">
|
||||
<tr id="theadTr--${pageName}"
|
||||
data-by="by--${pageName}" data-by-output="byOutput--${pageName}" data-main-option="mainOption--${pageName}" data-sub-option="subOption--${pageName}">
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="tbody--${pageName}">
|
||||
</tbody>
|
||||
|
||||
<template id="${infoPrefix}Col--${pageName}">
|
||||
<th class="cmn" style="width: 72px;">No.</th>
|
||||
<th class="cmn" style="width: 56px;"><input type="checkbox" class="form-check-input" id="gridAllCheckbox--${pageName}" onchange="pageObject['${pageName}'].control.select(this.checked);" /></th>
|
||||
<th class="cmn" style="width: 160px;" onclick="searchFromGridTitle('TASK_SE_CD', this.innerText, 'codeValue', 'FIM054');">업무구분</th>
|
||||
<th class="cmn" style="width: 120px;" onclick="searchFromGridTitle('LEVY_EXCL_YMD', this.innerText, 'ymd', '');">계고일자</th>
|
||||
<th class="cmn" style="width: 160px;" onclick="searchFromGridTitle('LEVY_EXCL_RSN_CD', this.innerText, 'codeValue', 'FIM022');">계고사유</th>
|
||||
<th class="cmn" style="width: 240px;" onclick="searchFromGridTitle('ETC_CN', this.innerText, 'match', 'part');">기타내용</th>
|
||||
<th class="cmn" style="width: 180px;" onclick="searchFromGridTitle('CVLCPT_APLY_NO', this.innerText, 'match', 'part');">민원신청번호</th>
|
||||
<th class="cmn" style="width: 180px;" onclick="searchFromGridTitle('CVLCPT_RCPT_NO', this.innerText, 'match', 'part');">민원접수번호</th>
|
||||
<th class="cmn" style="width: 140px;" onclick="searchFromGridTitle('CVLCPT_RCPT_YMD', this.innerText, 'ymd', '');">민원접수일자</th>
|
||||
<th class="cmn" style="width: 160px;" onclick="searchFromGridTitle('CVLCPT_PRCS_PIC_NM', this.innerText, 'match', 'part');">민원처리담당자</th>
|
||||
<th class="cmn" style="width: 200px;" onclick="searchFromGridTitle('CVLCPT_PRCS_CD', this.innerText, 'codeValue', 'FIM017');">민원처리결과</th>
|
||||
<th class="cmn" style="width: 180px;" onclick="searchFromGridTitle('CRDN_YMD', this.innerText, 'ymd', '');">단속일시</th>
|
||||
<th class="cmn" style="width: 140px;" onclick="searchFromGridTitle('VHRNO', this.innerText, 'match', 'part');">차량번호</th>
|
||||
<th class="cmn" style="width: 120px;" onclick="searchFromGridTitle('RTPYR_SE_CD', this.innerText, 'codeValue', 'FIM011');">납부자구분</th>
|
||||
<th class="cmn" style="width: 160px;" onclick="searchFromGridTitle('RTPYR_NO', this.innerText, 'ymd', '');">납부자번호</th>
|
||||
<th class="cmn" style="width: 200px;" onclick="searchFromGridTitle('RTPYR_NM', this.innerText, 'match', 'part');">납부자명</th>
|
||||
<th class="cmn" style="width: 160px;" onclick="searchFromGridTitle('VLTN_ARTCL', this.innerText, 'match', 'part');">위반항목</th>
|
||||
<th class="cmn" style="width: 160px;" onclick="searchFromGridTitle('CRDN_STDG_NM', this.innerText, 'match', 'part');">단속법정동</th>
|
||||
<th class="cmn" style="width: 280px;" onclick="searchFromGridTitle('CRDN_PLC', this.innerText, 'match', 'part');">단속장소</th>
|
||||
<th class="bpv" style="width: 280px;" onclick="searchFromGridTitle('DTL_CRDN_PLC', this.innerText, 'match', 'part');">상세단속장소</th>
|
||||
<th class="cmn" style="width: 120px;" onclick="searchFromGridTitle('FFNLG_CRDN_AMT', this.innerText, 'match', 'part');">단속원금</th>
|
||||
<th class="cmn" style="width: 160px;" onclick="searchFromGridTitle('CRDN_STTS_CD', this.innerText, 'codeValue', 'FIM010');">처리상태</th>
|
||||
<th class="pvs" style="width: 140px;" onclick="searchFromGridTitle('CRDN_SPAREA_CD', this.innerText, 'codeValue', 'FIM007');">단속특별구역</th>
|
||||
<th class="eca" style="width: 140px;" onclick="searchFromGridTitle('USE_FUEL_CD', this.innerText, 'codeValue', 'LVS005');">사용연료</th>
|
||||
<th class="dpv" style="width: 140px;" onclick="searchFromGridTitle('PRK_PSBLTY_RSLT_CD', this.innerText, 'codeValue', 'FIM034');">주차가능여부</th>
|
||||
<th class="cmn" style="width: 100px;" onclick="searchFromGridTitle('ZIP', this.innerText, 'match', 'part');">우편번호</th>
|
||||
<th class="cmn" style="width: 280px;" onclick="searchFromGridTitle('ADDR', this.innerText, 'match', 'part');">주소</th>
|
||||
<th class="cmn" style="width: 320px;" onclick="searchFromGridTitle('DTL_ADDR', this.innerText, 'match', 'part');">상세주소</th>
|
||||
<th class="cmn" style="width: 180px;">등록일시</th>
|
||||
<th class="cmn" style="width: 140px;">등록사용자</th>
|
||||
<th class="cmn" style="width: 180px;">수정일시</th>
|
||||
<th class="cmn" style="width: 140px;">수정사용자</th>
|
||||
<th class="cmn dummy-th"></th>
|
||||
</template>
|
||||
<template id="${infoPrefix}Row--${pageName}">
|
||||
<tr data-key="{CRDN_ID}">
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{ROW_NUM}</td>
|
||||
<td class="cmn text-center"><input type="checkbox" class="form-check-input" name="gridCheckbox" value="{CRDN_ID}" onchange="pageObject['${pageName}'].control.select('{CRDN_ID}', this.checked);" /></td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{TASK_SE_NM}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{LEVY_EXCL_YMD}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{LEVY_EXCL_RSN_NM}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{ETC_CN}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{CVLCPT_APLY_NO}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{CVLCPT_RCPT_NO}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{CVLCPT_RCPT_YMD}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{CVLCPT_PRCS_PIC_NM}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{CVLCPT_PRCS_NM}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{CRDN_YMD_TM}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{VHRNO}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{RTPYR_SE_NM}</td>
|
||||
<td class="cmn text-center privacy-cell" onclick="{onclick}" ondblclick="{ondblclick}">
|
||||
<span>{RTPYR_NO}</span>
|
||||
<span>*************</span>
|
||||
</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{RTPYR_NM}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{VLTN_ARTCL}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{CRDN_STDG_NM}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{CRDN_PLC}</td>
|
||||
<td class="bpv text-start" onclick="{onclick}" ondblclick="{ondblclick}">{DTL_CRDN_PLC}</td>
|
||||
<td class="cmn text-end" onclick="{onclick}" ondblclick="{ondblclick}">{FFNLG_CRDN_AMT}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{CRDN_STTS_NM}</td>
|
||||
<td class="pvs text-center" onclick="{onclick}" ondblclick="{ondblclick}">{CRDN_SPAREA_NM}</td>
|
||||
<td class="eca text-center" onclick="{onclick}" ondblclick="{ondblclick}">{USE_FUEL_NM}</td>
|
||||
<td class="dpv text-center" onclick="{onclick}" ondblclick="{ondblclick}">{PRK_PSBLTY_RSLT_NM}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{ZIP}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{ADDR}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{DTL_ADDR}</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}">{MDFCN_DT}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{MDFR_NM}</td>
|
||||
<td class="cmn dummy-td"></td>
|
||||
</tr>
|
||||
</template>
|
||||
<template id="${infoPrefix}NotFound--${pageName}">
|
||||
<tr class="bpv">
|
||||
<td valign="top" colspan="33" class="dataTables_empty text-center">${prefixName} 정보를 찾지 못했습니다.</td>
|
||||
</tr>
|
||||
<tr class="dpv">
|
||||
<td valign="top" colspan="33" class="dataTables_empty text-center">${prefixName} 정보를 찾지 못했습니다.</td>
|
||||
</tr>
|
||||
<tr class="eca">
|
||||
<td valign="top" colspan="33" class="dataTables_empty text-center">${prefixName} 정보를 찾지 못했습니다.</td>
|
||||
</tr>
|
||||
<tr class="pvs">
|
||||
<td valign="top" colspan="33" class="dataTables_empty text-center">${prefixName} 정보를 찾지 못했습니다.</td>
|
||||
</tr>
|
||||
<tr class="pes">
|
||||
<td valign="top" colspan="33" class="dataTables_empty text-center">${prefixName} 정보를 찾지 못했습니다.</td>
|
||||
</tr>
|
||||
</template>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- DataTables(그리드) -->
|
||||
</div> <!-- <div class="card wrapper-list"> -->
|
||||
</div> <!-- <div class="container-xxl flex-grow-1 px-0"> -->
|
||||
<!-- Content -->
|
||||
|
||||
<div class="content-backdrop fade"></div>
|
||||
</div>
|
||||
<!-- / inner page html <div class="content-wrapper"> -->
|
||||
|
||||
<script>
|
||||
/**************************************************************************
|
||||
* Global Variable
|
||||
**************************************************************************/
|
||||
pageObject["${pageName}"] = {};
|
||||
|
||||
// 공통 코드
|
||||
var FIM022 = new CommonCodes(${FIM022}, true); // 부과 제외 사유 코드
|
||||
var FIM004 = new CommonCodes(${FIM004}, true); // 주정차위반 내역 코드
|
||||
var FIM005 = new CommonCodes(${FIM005}, true); // 전용차로위반 내역 코드
|
||||
var FIM006 = new CommonCodes(${FIM006}, true); // 장애인주차위반 내역 코드
|
||||
var FIM061 = new CommonCodes(${FIM061}, true); // 전기차 충전구역 및 충전방해 위반 코드
|
||||
var FIM064 = new CommonCodes(${FIM064}, true); // 화물자동차 밤샘주차 위반 코드
|
||||
|
||||
/**************************************************************************
|
||||
* script 진입
|
||||
**************************************************************************/
|
||||
$(document).ready(function() {
|
||||
// pageObject
|
||||
let $P = pageObject["${pageName}"];
|
||||
|
||||
// FormFields
|
||||
$P.formFields = new FimsFormFields("#frmSearch--${pageName}");
|
||||
|
||||
/**************************************************************************
|
||||
* DatasetControl
|
||||
**************************************************************************/
|
||||
$P.control = new DatasetControl({
|
||||
prefix: "wrngTrgt"
|
||||
, prefixName: "계고장 발송 대상"
|
||||
, keymapper: info => info ? info.CRDN_ID : ""
|
||||
, dataGetter: obj => obj.${infoPrefix}List
|
||||
, appendData: true
|
||||
, infoSize: "xl"
|
||||
, formats: {
|
||||
CVLCPT_RCPT_YMD: dateFormat
|
||||
, LEVY_EXCL_YMD: dateFormat
|
||||
, CRDN_YMD_TM: datetimeFormat
|
||||
, FFNLG_CRDN_AMT: numberFormat
|
||||
, REG_DT: datetimeFormat
|
||||
, MDFCN_DT: datetimeFormat
|
||||
}
|
||||
});
|
||||
// $P.control 설정
|
||||
$P.control.defaultFetchSize = FETCH_XS; // 1 페이지당 조회되는 자료 건수 index.jsp에서 확인 FETCH_XS = 30
|
||||
$P.control.query = { pageNum : 1, fetchSize : $P.control.defaultFetchSize };
|
||||
$P.control.beforeCurrent = null;
|
||||
|
||||
/**************************************************************************
|
||||
* DatasetControl 이벤트
|
||||
**************************************************************************/
|
||||
// Dataset 변경 이벤트
|
||||
$P.control.onDatasetChange = (obj, option) => {
|
||||
$P.renderList(obj.${infoPrefix}Total, option);
|
||||
|
||||
$("#paging--${pageName}").setPagingInfo({
|
||||
list: $P.control.dataset
|
||||
, prefix: "paging--${pageName}"
|
||||
, start: obj.${infoPrefix}Start
|
||||
, totalSize: obj.${infoPrefix}Total
|
||||
, fetchSize: obj.${infoPrefix}Fetch
|
||||
, func: "pageObject['${pageName}'].control.load({index})"
|
||||
});
|
||||
|
||||
|
||||
};
|
||||
|
||||
// 현재 선택 자료 변경 이벤트
|
||||
$P.control.onCurrentChange = (item) => {
|
||||
if (!item) return;
|
||||
|
||||
let key = item.data.CRDN_ID;
|
||||
|
||||
$("#tbody--${pageName}").setCurrentRow(key);
|
||||
};
|
||||
|
||||
// 선택(체크) 변경 이벤트
|
||||
$P.control.onSelectionChange = (selected) => {
|
||||
let ${infoPrefix}List = $P.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()));
|
||||
});
|
||||
|
||||
// 선택 대상 등록 버튼
|
||||
$("#btnCreateSlctnTrgtInfo--${pageName}").prop("disabled", keys.length < 1);
|
||||
|
||||
// DataTables(그리드) 전체 선택(checkbox)
|
||||
if (keys.length < 1) {
|
||||
$("#DataTables_Table_0--${pageName} th input[type='checkbox']").prop("checked", false); // 체크 해제
|
||||
} else if (keys.length == ${infoPrefix}List.length) {
|
||||
$("#DataTables_Table_0--${pageName} th input[type='checkbox']").prop("checked", true); // 체크 설정
|
||||
} else {
|
||||
$("#DataTables_Table_0--${pageName} th input[type='checkbox']").prop("checked", false); // 체크 해제
|
||||
}
|
||||
};
|
||||
|
||||
// 계고장 발송 등록 dialog
|
||||
$P.control.getInfo = (params) => {
|
||||
if (!params) return;
|
||||
|
||||
let dialogTitle = "";
|
||||
|
||||
if (params.callPurpose == "create") {
|
||||
dialogTitle = $P.control.prefixName + " 등록";
|
||||
} else if (params.callPurpose == "update") {
|
||||
dialogTitle = $P.control.prefixName + " 수정";
|
||||
} else {
|
||||
dialogTitle = $P.control.prefixName + " 정보";
|
||||
}
|
||||
|
||||
ajax.get({
|
||||
url: wctx.url("/" + params.taskSeCd + "${infoPrefixUrl}" + "/020/info.do") + "?openerPageName=${pageName}"
|
||||
, data: params || {}
|
||||
, success: resp => {
|
||||
dialog.open({
|
||||
id: $P.control.prefixed("Dialog--${pageName}")
|
||||
, title: dialogTitle
|
||||
, content: resp
|
||||
, size: $P.control.infoSize
|
||||
, onClose: () => { $P.fnRefreshList(); }
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* DataTables 이벤트
|
||||
**************************************************************************/
|
||||
// DataTables에 click, dbclick 이벤트
|
||||
$P.renderList = (totalSize, option) => {
|
||||
let ${infoPrefix}List = $P.control.dataset;
|
||||
let empty = ${infoPrefix}List.empty;
|
||||
let clsForTask = $("#frmSearch--${pageName} input[name='taskSeCd']:checked").val().toLowerCase(); // 소문자
|
||||
|
||||
// 업무별 그리드 td
|
||||
let foundContent = document.getElementById("${infoPrefix}Row--${pageName}").content;
|
||||
let foundTr = $(foundContent).find("tr")[0].cloneNode(false);
|
||||
let foundTds = $(foundContent).find("." + clsForTask + ",.cmn");
|
||||
|
||||
foundTds.each(function() {
|
||||
foundTr.appendChild(this.cloneNode(true));
|
||||
});
|
||||
|
||||
//
|
||||
let replacer = (str, dataItem) => str
|
||||
.replace(/{onclick}/gi, "pageObject['${pageName}'].control.setCurrent('" + dataItem.getValue("CRDN_ID") + "');")
|
||||
.replace(/{ondblclick}/gi, "pageObject['${pageName}'].getTotalInfo('" + dataItem.getValue("CRDN_ID") + "');");
|
||||
|
||||
let trs = empty ? [document.getElementById("${infoPrefix}NotFound--${pageName}").content.querySelector("." + clsForTask + ",.cmn").outerHTML]
|
||||
: ${infoPrefix}List.inStrings(foundTr.outerHTML, replacer);
|
||||
|
||||
let noMore = (${infoPrefix}List.length >= totalSize);
|
||||
let initScroll = ($P.control.query.pageNum < 2);
|
||||
if(option != null && option.reloaded){
|
||||
initScroll = false;
|
||||
}
|
||||
|
||||
$("#table-responsive--${pageName}")[0].changeContent(trs.join(), initScroll, noMore);
|
||||
|
||||
// checkbox 체크 해제
|
||||
$("#DataTables_Table_0--${pageName} th input[type='checkbox']").prop("checked", false);
|
||||
|
||||
//보안모드
|
||||
fn_securityModeToggle($("#securityMode--top").is(":checked"));
|
||||
}
|
||||
|
||||
// DataTables에 스크롤이 맨 밑으로 이동했을 때 이벤트
|
||||
$P.scrollDataList = () => {
|
||||
|
||||
|
||||
$P.control.load($P.control.query.pageNum + 1);
|
||||
}
|
||||
|
||||
// DataTables에 더블 클릭시 개별총정보 dialog
|
||||
$P.getTotalInfo = (crdnId) => {
|
||||
if (typeof crdnId == "undefined" || crdnId == null || crdnId == "") return;
|
||||
|
||||
let params = {
|
||||
callControlName: "pageObject['${pageName}'].control"
|
||||
, sggCd: $P.control.dataset.getValue("SGG_CD")
|
||||
, taskSeCd: $P.control.dataset.getValue("TASK_SE_CD")
|
||||
, crdnId: crdnId
|
||||
}
|
||||
|
||||
ajax.get({
|
||||
url: wctx.url("/sprt/sprt02/010/main.do")
|
||||
, data: params
|
||||
, success: resp => {
|
||||
dialog.open({
|
||||
id: "totalInfoMainDialog"
|
||||
, title: "개별총정보"
|
||||
, content: resp
|
||||
, size: "xxl"
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 사용자 함수(function)
|
||||
**************************************************************************/
|
||||
// 검색 자료 재조회
|
||||
$P.fnRefreshList = () => {
|
||||
$P.control.query.crdnIds = null;
|
||||
$P.control.reload({all : true});
|
||||
}
|
||||
|
||||
// 사용자검색 callback
|
||||
$P.callbackFindUser = (userId, userNm) => {
|
||||
$("#schRgtrCd--${pageName}").val(userId); // 사용자 ID
|
||||
$("#schRgtrNm--${pageName}").val(userNm); // 사용자 명
|
||||
}
|
||||
|
||||
// 계고 수정 dialog -> callback 추가
|
||||
$P.getLevyExclInfo = (params) => {
|
||||
if (!params) return;
|
||||
|
||||
ajax.get({
|
||||
url: wctx.url("/" + params.taskSeCd + "/excl/excl01/020/info.do?openerPageName=${pageName}")
|
||||
, data: params || {}
|
||||
, success: resp => {
|
||||
dialog.open({
|
||||
id: "levyExclDialog"
|
||||
, title: "부과제외 정보"
|
||||
, content: resp
|
||||
, size: "md"
|
||||
, onClose: () => { $P.fnRefreshList(); }
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 버튼 clickEvent
|
||||
**************************************************************************/
|
||||
// 업무 구분 변경
|
||||
$P.fnResetAndChangeBiz = (taskSeCd) => {
|
||||
// 업무 구분 코드
|
||||
if (typeof taskSeCd == "undefined" || taskSeCd == null || taskSeCd == "") {
|
||||
taskSeCd = $("#layout-navbar input[name='taskSeCd']:checked").val();
|
||||
}
|
||||
|
||||
// 초기 기본 설정
|
||||
$P.initForm(taskSeCd);
|
||||
// 업무 구분별 설정
|
||||
$P.setTask(taskSeCd);
|
||||
|
||||
// dataset 초기화
|
||||
$P.control.dataset.clear();
|
||||
}
|
||||
|
||||
// 사용자검색 버튼 클릭 이벤트
|
||||
$P.fnGetFindUser = () => {
|
||||
let params = {
|
||||
openerPageName: "${pageName}"
|
||||
, callbackFuncName: "pageObject['${pageName}']['callbackFindUser']"
|
||||
}
|
||||
|
||||
ajax.get({
|
||||
url: wctx.url("/user/user02/010/main.do") + "?openerPageName=${pageName}"
|
||||
, data: params || {}
|
||||
, success: resp => {
|
||||
dialog.open({
|
||||
id: "userDialog--${pageName}"
|
||||
, title: "사용자 검색"
|
||||
, content: resp
|
||||
, size: "lg"
|
||||
, init: () => { setDialogZindex(); }
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// 검색 버튼 이벤트
|
||||
$P.fnSearchList = () => {
|
||||
// 검색조건
|
||||
$P.control.query = $P.formFields.get(); // 검색 조건
|
||||
$P.control.query.fetchSize = $P.control.defaultFetchSize; // 한번에 조회되는 자료 건수
|
||||
$P.control.query.crdnSttsCd = "83"; // 단속 처리 상태 - 83:계고
|
||||
$P.control.query.delYn = "N"; // 삭제 여부
|
||||
|
||||
$P.control.load(1);
|
||||
}
|
||||
|
||||
// 엑셀 버튼 이벤트
|
||||
$P.fnExcel = () => {
|
||||
if ($P.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)")
|
||||
, getCellDefsForPrivacyCell);
|
||||
|
||||
$P.control.query.cellDefs = cellDefs;
|
||||
|
||||
$P.control.download();
|
||||
}
|
||||
|
||||
// 계고 수정 버튼 이벤트
|
||||
$P.fnUpdateWrng = (title) => {
|
||||
let levyExclId = $P.control.dataset.getValue("LEVY_EXCL_ID");
|
||||
// 부과제외 ID 가 없다면.. return
|
||||
if (typeof levyExclId == "undefined" || levyExclId == null || levyExclId == "") return;
|
||||
|
||||
let params = {
|
||||
title: title
|
||||
, callPurpose: "update"
|
||||
, sggCd: $P.control.dataset.getValue("SGG_CD") // 시군구 코드
|
||||
, taskSeCd: $P.control.dataset.getValue("TASK_SE_CD") // 업무 구분 코드
|
||||
, levyExclId: levyExclId // 부과제외 ID
|
||||
, levyExclSeCd: $P.control.dataset.getValue("LEVY_EXCL_SE_CD") // 부과제외 구분 코드
|
||||
};
|
||||
|
||||
$P.getLevyExclInfo(params);
|
||||
}
|
||||
|
||||
// 선택 발송대상 등록 버튼 이벤트
|
||||
$P.fnCreateSlctnTrgtInfo = () => {
|
||||
// 선택 자료
|
||||
let selected = $P.control.dataset.getKeys("selected");
|
||||
|
||||
if (selected.length < 1) return;
|
||||
|
||||
// 파라미터 설정
|
||||
let params = $P.control.query; // 검색 조건
|
||||
params.callPurpose = "create"; // 호출 용도 (등록)
|
||||
params.crdnIds = selected.join(","); // crdnIds
|
||||
if (params.taskSeCd == "DPV" && params.schVltnCd == "05") {
|
||||
params.sndngSeCd = "12"; // 발송 구분 코드 - 12 계고장 구형표지
|
||||
} else {
|
||||
params.sndngSeCd = "11"; // 발송 구분 코드 - 11 계고장
|
||||
}
|
||||
params.rsndYn = "N"; // 재발송 여부
|
||||
params.delYn = "N"; // 삭제 여부
|
||||
|
||||
$P.control.getInfo(params);
|
||||
}
|
||||
|
||||
// 전체 발송대상 등록 버튼 이벤트
|
||||
$P.fnCreateWholTrgtInfo = () => {
|
||||
if ($P.control.dataset.empty) {
|
||||
dialog.alert({
|
||||
content: "검색된 자료가 없습니다."
|
||||
, onOK: () => { }
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
// 파라미터 설정
|
||||
let params = $P.control.query; // 검색 조건
|
||||
params.callPurpose = "create"; // 호출 용도 (등록)
|
||||
if (params.taskSeCd == "DPV" && params.schVltnCd == "05") {
|
||||
params.sndngSeCd = "12"; // 발송 구분 코드 - 12 계고장 구형표지
|
||||
} else {
|
||||
params.sndngSeCd = "11"; // 발송 구분 코드 - 11 계고장
|
||||
}
|
||||
params.rsndYn = "N"; // 재발송 여부
|
||||
params.delYn = "N"; // 삭제 여부
|
||||
|
||||
$P.control.getInfo(params);
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 초기 셋팅
|
||||
**************************************************************************/
|
||||
// 이벤트 설정
|
||||
$P.setEvent = () => {
|
||||
// 기본 버튼 이벤트
|
||||
$("#btnReset--${pageName}").on("click", () => $P.fnResetAndChangeBiz()); // 초기화
|
||||
$("#btnSearch--${pageName}").on("click", () => $P.fnSearchList()); // 검색
|
||||
$("#btnExcel--${pageName}").on("click", () => $P.fnExcel()); // 엑셀
|
||||
$("#btnFindUser--${pageName}").on("click", () => $P.fnGetFindUser()); // 사용자 검색
|
||||
|
||||
// 동적검색에서 엔터(Enter) 키를 누르면 검색한다.
|
||||
$("#term--${pageName}").onEnterPress(function() {
|
||||
$P.fnSearchList();
|
||||
});
|
||||
|
||||
// form-date 항목에서 키보드로 입력시 날짜 포맷팅 적용
|
||||
$("#frmSearch--${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);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// 업무 버튼 이벤트
|
||||
$("#btnUpdateWrng--${pageName}").on("click", function() {
|
||||
$P.fnUpdateWrng($(this).attr("title")); // 계고 수정
|
||||
});
|
||||
$("#btnCreateSlctnTrgtInfo--${pageName}").on("click", function() {
|
||||
$P.fnCreateSlctnTrgtInfo($(this).attr("title")); // 선택 대상 등록
|
||||
});
|
||||
$("#btnCreateWholTrgtInfo--${pageName}").on("click", function() {
|
||||
$P.fnCreateWholTrgtInfo($(this).attr("title")); // 전체 대상 등록
|
||||
});
|
||||
|
||||
// DataTables width 변경 조정
|
||||
fnMakeResizableTable($("#table-responsive--${pageName}")[0]);
|
||||
|
||||
// DataTables 스크롤 이벤트 생성
|
||||
fnMakeScrollableTable($("#table-responsive--${pageName}")[0], $P.scrollDataList);
|
||||
}
|
||||
|
||||
// 초기 화면 설정
|
||||
$P.initForm = (taskSeCd) => {
|
||||
// 화면 초기화
|
||||
$("#frmSearch--${pageName}")[0].reset();
|
||||
|
||||
// input, select 초기화
|
||||
let searchForm = $("#frmSearch--${pageName}");
|
||||
searchForm.find("input[type='radio']").not("[name='taskSeCd']").prop("checked", false);
|
||||
searchForm.find("input[type='checkbox']").prop("checked", false);
|
||||
searchForm.find("input[type='text']").val("");
|
||||
searchForm.find("input[type='hidden']").val("");
|
||||
searchForm.find("select").each(function() { $(this).find("option:eq(0)").prop("selected", true); });
|
||||
|
||||
// 최고 관리자 경우 업무구분을 선택할 수 있도록 하자.
|
||||
$("#frmSearch--${pageName} input[name='taskSeCd']").each(function(i) {
|
||||
$(this).prop("disabled", "true");
|
||||
});
|
||||
|
||||
// 기본 데이터 설정
|
||||
$("#sggCd--${pageName}").val("${sggCd}"); // 시군구 코드
|
||||
$("#frmSearch--${pageName} input[name='taskSeCd'][value='" + taskSeCd + "']").prop("checked", true); // 업무 구분 코드
|
||||
initDatepicker("frmSearch--${pageName}"); // 달력 초기화
|
||||
$("#schLevyExclYmdFrom--${pageName}").datepicker("setDate", DateUtil.getDateDay(-7).date);
|
||||
$("#schLevyExclYmdTo--${pageName}").datepicker("setDate", new Date());
|
||||
$("#byOutput--${pageName}").val("동적 검색"); // 동적 검색
|
||||
$("#schRgtrNm--${pageName}").prop("readonly", true); // 사용자 이름
|
||||
}
|
||||
|
||||
// 업무 구분별 설정
|
||||
$P.setTask = (taskSeCd) => {
|
||||
// 업무구분에 따른 URL 설정
|
||||
$P.control.urls.load = wctx.url("/" + taskSeCd + "${infoPrefixUrl}" + "/010/list.do"); // 조회
|
||||
|
||||
// 계고 사유에 "전체" 추가
|
||||
let reasons = FIM022.list().filter(reason => reason.code > "200");
|
||||
$("#schLevyExclRsnCd--${pageName}").empty();
|
||||
$("#schLevyExclRsnCd--${pageName}").append("<option value=''>" + "전체" + "</option>");
|
||||
$("#schLevyExclRsnCd--${pageName}").append(reasons.map(reason => "<option value='" + reason.code + "'>" + reason.value + "</option>").join());
|
||||
|
||||
// 업무별 조회조건
|
||||
renderForTask("frmSearch--${pageName}", taskSeCd.toLowerCase());
|
||||
|
||||
// 업무에 따른 위반 내용
|
||||
let vltnIdCode = [];
|
||||
if (taskSeCd == "PVS") { // 주정차 위반
|
||||
vltnIdCode = FIM004.list();
|
||||
} else if (taskSeCd == "BPV") { // 전용차로 위반
|
||||
vltnIdCode = FIM005.list();
|
||||
} else if (taskSeCd == "DPV") { // 장애인 전용
|
||||
vltnIdCode = FIM006.list();
|
||||
} else if (taskSeCd == "ECA") { // 전기차 주차 위반
|
||||
vltnIdCode = FIM061.list();
|
||||
} else if (taskSeCd == "PES") { // 밤샘 주차 위반
|
||||
vltnIdCode = FIM064.list();
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
|
||||
// 위반 항목
|
||||
$("#schVltnCd--${pageName}").empty();
|
||||
$("#schVltnCd--${pageName}").append("<option value=''>" + "전체" + "</option>");
|
||||
$(vltnIdCode).each(function(index, item) {
|
||||
$("#schVltnCd--${pageName}").append("<option value='" + vltnIdCode[index].code +"'>" + vltnIdCode[index].value + "</option>");
|
||||
});
|
||||
|
||||
// 업무별 그리드 th
|
||||
let colContent = document.getElementById("${infoPrefix}Col--${pageName}").content;
|
||||
let cols = $(colContent).find("." + taskSeCd.toLowerCase() + ",.cmn");
|
||||
let colsOuterHTML = "";
|
||||
|
||||
cols.each(function() {
|
||||
colsOuterHTML += this.outerHTML;
|
||||
});
|
||||
$("#table-responsive--${pageName}")[0].changeColumn(colsOuterHTML);
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 최초 실행 함수
|
||||
**************************************************************************/
|
||||
// 1. 이벤트 설정
|
||||
$P.setEvent();
|
||||
|
||||
// 2. 초기 설정 및 업무 구분 변경
|
||||
$P.fnResetAndChangeBiz($("#layout-navbar input[name='taskSeCd']:checked").val());
|
||||
|
||||
// 3. 보안모드
|
||||
fn_securityModeToggle($("#securityMode--top").is(":checked"));
|
||||
});
|
||||
//# sourceURL=sndb01010-main.jsp
|
||||
</script>
|
||||
@ -1,433 +0,0 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
|
||||
<c:set var="prefixName" scope="request">계고장 발송 대상 정보</c:set>
|
||||
|
||||
<!-- inner page html -->
|
||||
<div class="wrapper-pop">
|
||||
<!-- Content -->
|
||||
<div class="container flex-grow-1 px-0">
|
||||
|
||||
<!-- Page Body -->
|
||||
<div class="card">
|
||||
<!-- 입력 영역 -->
|
||||
<form id="frmEdit--${pageName}" name="frmEdit">
|
||||
<div class="row g-1">
|
||||
<!-- 총 건수 -->
|
||||
<div class="col-md-12 text-end px-2">
|
||||
<label class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">총건수 / 총금액</label>
|
||||
<input type="text" class="form-control w-px-80 text-end" id="tnocs--${pageName}" name="tnocs" data-fmt-type="number" readonly />
|
||||
<input type="text" class="form-control w-px-140 text-end" id="gramt--${pageName}" name="gramt" data-fmt-type="number" readonly />
|
||||
</div>
|
||||
<!-- 문서 번호 -->
|
||||
<div class="col-md-4">
|
||||
<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" autocomplete="off" />
|
||||
</div>
|
||||
<!-- 발송 일자 -->
|
||||
<div class="col-md-4">
|
||||
<label for="sndngYmd--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end required">발송일자</label>
|
||||
<input type="text" class="form-control form-date" id="sndngYmd--${pageName}" name="sndngYmd"
|
||||
data-fmt-type="day" title="날짜 선택" maxlength="10" required />
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
</div>
|
||||
<!-- 발송 종료 일자 -->
|
||||
<div class="col-md-4" id="divSndngEndYmd--${pageName}">
|
||||
<label for="sndngEndYmd--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">납기일자</label>
|
||||
<input type="text" class="form-control form-date" id="sndngEndYmd--${pageName}" name="sndngEndYmd"
|
||||
data-fmt-type="day" title="날짜 선택" maxlength="10" />
|
||||
<button type="button" id="btnSndngEndYmd--${pageName}" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
</div>
|
||||
<!-- 제목 명 -->
|
||||
<div class="col-md-12">
|
||||
<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" autocomplete="off" />
|
||||
</div>
|
||||
<!-- 기타 내용 -->
|
||||
<div class="col-md-12">
|
||||
<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" autocomplete="off"></textarea>
|
||||
</div>
|
||||
</div> <!-- <div class="row g-1"> -->
|
||||
</form>
|
||||
<!-- 입력 영역 -->
|
||||
|
||||
<!-- 업무 버튼 및 건수 표시 -->
|
||||
<div>
|
||||
<span class="container-page-btn">
|
||||
<!-- 건수, 페이지 표시 -->
|
||||
<div class="d-flex flex-row justify-content-between">
|
||||
<span class="dataTables_info" id="paging--${pageName}PagingInfo" role="status" aria-live="polite"></span>
|
||||
<ul class="pagination pagination-primary" id="paging--${pageName}">
|
||||
</ul>
|
||||
</div>
|
||||
<!-- 업무 버튼 -->
|
||||
<span class="container-window-btn-right">
|
||||
<button type="button" class="btn btn-primary w-px-120" id="btnSave--${pageName}" title="발송 저장">
|
||||
저장
|
||||
</button>
|
||||
</span>
|
||||
</span>
|
||||
</div> <!-- 업무 버튼 및 건수 표시 -->
|
||||
|
||||
<!-- DataTables(그리드) -->
|
||||
<div class="card-datatable text-nowrap">
|
||||
<div class="dataTables_wrapper dt-bootstrap5 no-footer" id="DataTables_Table_0_wrapper--${pageName}">
|
||||
<div class="table-responsive ox-scroll oy-scroll h-px-300" id="table-responsive--${pageName}">
|
||||
<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">
|
||||
<tr id="theadTr--${pageName}"
|
||||
data-by="by--${pageName}" data-by-output="byOutput--${pageName}" data-main-option="mainOption--${pageName}" data-sub-option="subOption--${pageName}">
|
||||
<th class="cmn" style="width: 72px;">No.</th>
|
||||
<th class="cmn" style="width: 120px;">계고일자</th>
|
||||
<th class="cmn" style="width: 160px;">계고사유</th>
|
||||
<th class="cmn" style="width: 180px;">민원신청번호</th>
|
||||
<th class="cmn" style="width: 180px;">민원접수번호</th>
|
||||
<th class="cmn" style="width: 120px;">민원접수일자</th>
|
||||
<th class="cmn" style="width: 200px;">민원처리결과</th>
|
||||
<th class="cmn" style="width: 180px;">단속일시</th>
|
||||
<th class="cmn" style="width: 140px;">차량번호</th>
|
||||
<th class="cmn" style="width: 160px;">위반항목</th>
|
||||
<th class="cmn" style="width: 160px;">단속법정동</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: 200px;">납부자명</th>
|
||||
<th class="cmn" style="width: 120px;">납부자생일</th>
|
||||
<th class="cmn" style="width: 100px;">우편번호</th>
|
||||
<th class="cmn" style="width: 280px;">주소</th>
|
||||
<th class="cmn" style="width: 320px;">상세주소</th>
|
||||
<th class="cmn" style="width: 180px;">등록일시</th>
|
||||
<th class="cmn" style="width: 140px;">등록사용자</th>
|
||||
<th class="cmn" style="width: 180px;">수정일시</th>
|
||||
<th class="cmn" style="width: 140px;">수정사용자</th>
|
||||
<th class="cmn dummy-th"></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="tbody--${pageName}">
|
||||
</tbody>
|
||||
<template id="${infoPrefix}Row--${pageName}">
|
||||
<tr data-key="{CRDN_ID}">
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{ROW_NUM}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{LEVY_EXCL_YMD}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{LEVY_EXCL_RSN_NM}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{CVLCPT_APLY_NO}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{CVLCPT_RCPT_NO}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{CVLCPT_RCPT_YMD}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{CVLCPT_PRCS_NM}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{CRDN_YMD_TM}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{VHRNO}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{VLTN_ARTCL}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{CRDN_STDG_NM}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{CRDN_PLC}</td>
|
||||
<td class="cmn text-end" onclick="{onclick}" ondblclick="{ondblclick}">{FFNLG_CRDN_AMT}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{CRDN_STTS_NM}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{RTPYR_NM}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{RTPYR_BRDT_MASK}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{ZIP}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{ADDR}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{DTL_ADDR}</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}">{MDFCN_DT}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{MDFR_NM}</td>
|
||||
<td class="cmn dummy-td"></td>
|
||||
</tr>
|
||||
</template>
|
||||
<template id="${infoPrefix}NotFound--${pageName}">
|
||||
<tr class="odd">
|
||||
<td valign="top" colspan="24" class="dataTables_empty text-center">${prefixName} 정보를 찾지 못했습니다.</td>
|
||||
</tr>
|
||||
</template>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div> <!-- DataTables(그리드) -->
|
||||
</div> <!-- <div class="card"> -->
|
||||
<!-- Page Body -->
|
||||
|
||||
</div> <!-- <div class="container flex-grow-1 px-0"> -->
|
||||
<!-- Content -->
|
||||
</div>
|
||||
<!-- / inner page html <div class="content-pop"> -->
|
||||
|
||||
<script>
|
||||
/**************************************************************************
|
||||
* Global Variable
|
||||
**************************************************************************/
|
||||
pageObject["${pageName}"] = {};
|
||||
|
||||
/**************************************************************************
|
||||
* script 진입
|
||||
**************************************************************************/
|
||||
$(document).ready(function() {
|
||||
// pageObject
|
||||
let $P = pageObject["${pageName}"];
|
||||
|
||||
// infoDialog 호출 용도(view 조회(편집불가), create 등록, update 수정)
|
||||
$P.callPurpose = "${callPurpose}";
|
||||
// FormFields
|
||||
$P.formFields = new FimsFormFields("#frmEdit--${pageName}");
|
||||
// main 의 검색 조건을 그대로 유지
|
||||
$P.mainQuery = ${mainQuery};
|
||||
|
||||
/**************************************************************************
|
||||
* DatasetControl
|
||||
**************************************************************************/
|
||||
$P.control = new DatasetControl({
|
||||
prefix: "wrngTrgt"
|
||||
, prefixName: "계고장 발송 대상"
|
||||
, keymapper: info => info ? info.CRDN_ID : ""
|
||||
, dataGetter: obj => obj.${infoPrefix}List
|
||||
, appendData: true
|
||||
, formats: {
|
||||
TNOCS: numberFormat
|
||||
, GRAMT: numberFormat
|
||||
, LEVY_EXCL_YMD: dateFormat
|
||||
, CVLCPT_RCPT_YMD: dateFormat
|
||||
, CRDN_YMD_TM: datetimeFormat
|
||||
, FFNLG_CRDN_AMT: numberFormat
|
||||
, REG_DT: datetimeFormat
|
||||
, MDFCN_DT: datetimeFormat
|
||||
}
|
||||
});
|
||||
// $P.control 설정
|
||||
$P.control.defaultFetchSize = FETCH_XS; // 1 페이지당 조회되는 자료 건수 index.jsp에서 확인 FETCH_XS = 30
|
||||
$P.control.query = { pageNum : 1, fetchSize : $P.control.defaultFetchSize };
|
||||
$P.control.beforeCurrent = null;
|
||||
|
||||
/**************************************************************************
|
||||
* DatasetControl 이벤트
|
||||
**************************************************************************/
|
||||
// Dataset 변경 이벤트
|
||||
$P.control.onDatasetChange = (obj, option) => {
|
||||
$P.renderList(obj.${infoPrefix}Total, option);
|
||||
|
||||
$("#paging--${pageName}").setPagingInfo({
|
||||
list: $P.control.dataset
|
||||
, prefix: "paging--${pageName}"
|
||||
, start: obj.${infoPrefix}Start
|
||||
, totalSize: obj.${infoPrefix}Total
|
||||
, fetchSize: obj.${infoPrefix}Fetch
|
||||
, func: "pageObject['${pageName}'].control.load({index})"
|
||||
});
|
||||
};
|
||||
|
||||
// 현재 선택 자료 변경 이벤트
|
||||
$P.control.onCurrentChange = (item) => {
|
||||
if (!item) return;
|
||||
|
||||
let key = item.data.CRDN_ID;
|
||||
|
||||
$("#tbody--${pageName}").setCurrentRow(key);
|
||||
};
|
||||
|
||||
// 저장 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
|
||||
, init: () => { setDialogZindex(); }
|
||||
, onOK: () => { }
|
||||
});
|
||||
|
||||
if (resp.saved) {
|
||||
dialog.close($P.control.prefix + "Dialog--${openerPageName}");
|
||||
}
|
||||
}
|
||||
|
||||
// 저장
|
||||
$P.control.save = (info) => {
|
||||
if (!info) return;
|
||||
|
||||
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)
|
||||
});
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* DataTables 이벤트
|
||||
**************************************************************************/
|
||||
// DataTables에 click, dbclick 이벤트
|
||||
$P.renderList = (totalSize, option) => {
|
||||
let ${infoPrefix}List = $P.control.dataset;
|
||||
let empty = ${infoPrefix}List.empty;
|
||||
|
||||
let trs = empty ?
|
||||
[document.getElementById("${infoPrefix}NotFound--${pageName}").innerHTML] : <%-- from template#${infoPrefix}NotFound --%>
|
||||
${infoPrefix}List.inStrings(
|
||||
document.getElementById("${infoPrefix}Row--${pageName}").innerHTML, <%-- from template#${infoPrefix}Row --%>
|
||||
(str, dataItem) => str
|
||||
.replace(/{onclick}/gi, "pageObject['${pageName}'].control.setCurrent('" + dataItem.getValue("CRDN_ID") + "');")
|
||||
.replace(/{ondblclick}/gi, "pageObject['${pageName}'].getTotalInfo('" + dataItem.getValue("CRDN_ID") + "');")
|
||||
);
|
||||
|
||||
let noMore = (${infoPrefix}List.length >= totalSize);
|
||||
let initScroll = ($P.control.query.pageNum < 2);
|
||||
if (option != null && option.reloaded) {
|
||||
initScroll = false;
|
||||
}
|
||||
|
||||
$("#table-responsive--${pageName}")[0].changeContent(trs.join(), initScroll, noMore);
|
||||
|
||||
//보안모드
|
||||
fn_securityModeToggle($("#securityMode--top").is(":checked"));
|
||||
}
|
||||
|
||||
// DataTables에 스크롤이 맨 밑으로 이동했을 때 이벤트
|
||||
$P.scrollDataList = () => {
|
||||
$P.control.load($P.control.query.pageNum + 1);
|
||||
}
|
||||
|
||||
// DataTables에 더블 클릭시 개별총정보 dialog
|
||||
$P.getTotalInfo = (crdnId) => {
|
||||
if (typeof crdnId == "undefined" || crdnId == null || crdnId == "") return;
|
||||
|
||||
let params = {
|
||||
callControlName: "pageObject['${pageName}'].control"
|
||||
, callPurpose: "view"
|
||||
, sggCd: $P.control.dataset.getValue("SGG_CD")
|
||||
, taskSeCd: $P.control.dataset.getValue("TASK_SE_CD")
|
||||
, crdnId: crdnId
|
||||
}
|
||||
|
||||
ajax.get({
|
||||
url: wctx.url("/sprt/sprt02/010/main.do")
|
||||
, data: params
|
||||
, success: resp => {
|
||||
dialog.open({
|
||||
id: "totalInfoMainDialog"
|
||||
, title: "개별총정보"
|
||||
, content: resp
|
||||
, size: "xxl"
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 사용자 함수(function)
|
||||
**************************************************************************/
|
||||
// 초기 데이터 설정
|
||||
$P.initData = () => {
|
||||
// 총건수 / 총금액
|
||||
$("#tnocs--${pageName}").val(${wrngTrgtTotal});
|
||||
$("#gramt--${pageName}").val($P.control.dataset.getValue("GRAMT"));
|
||||
// 발송 종료 일자
|
||||
$("#sndngEndYmd--${pageName}").val("");
|
||||
$("#sndngEndYmd--${pageName}").prop("disabled", true);
|
||||
$("#divSndngEndYmd--${pageName}").hide();
|
||||
|
||||
// 제목
|
||||
let ttlNm = $P.control.dataset.getValue("TASK_SE_NM");
|
||||
if ($P.mainQuery.schVltnCd != null && $P.mainQuery.schVltnCd != "") { // 위반항목이 '전체'가 아니라면..
|
||||
ttlNm = ttlNm + " " + $P.control.dataset.getValue("VLTN_ARTCL");
|
||||
}
|
||||
$("#ttlNm--${pageName}").val(ttlNm + " " + "계고장");
|
||||
|
||||
// 업무구분에 따른 URL 설정
|
||||
$P.control.urls.create = wctx.url("/" + $P.mainQuery.taskSeCd + "${infoPrefixUrl}" + "/020/createList.do"); // 등록
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 버튼 clickEvent
|
||||
**************************************************************************/
|
||||
// 저장
|
||||
$P.fnSave = () => {
|
||||
// validate 확인
|
||||
if (!customValidate($("#frmEdit--${pageName}").find("input, select, textarea"))) return;
|
||||
|
||||
dialog.alert({
|
||||
content: "현재 " + $P.control.prefixName + " 정보를 저장하시겠습니까?"
|
||||
, init: () => { setDialogZindex(); }
|
||||
, onOK: () => {
|
||||
// 검색조건과 저장 파라미터 객체를 합친다.
|
||||
let params = $.extend({}, $P.mainQuery, $P.formFields.get());
|
||||
params.sndngRegSeCd = "01"; // 발송 등록 구분 코드(SNDNG_REG_SE_CD) - 01: 일괄
|
||||
params.rsndYn = "N"; // 재발송 여부
|
||||
params.delYn = "N"; // 삭제 여부
|
||||
|
||||
$P.control.save(params);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 초기 셋팅
|
||||
**************************************************************************/
|
||||
// 이벤트 설정
|
||||
$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()); // 저장
|
||||
|
||||
// DataTables width 변경 조정
|
||||
fnMakeResizableTable($("#table-responsive--${pageName}")[0]);
|
||||
|
||||
// DataTables 스크롤 이벤트 생성
|
||||
fnMakeScrollableTable($("#table-responsive--${pageName}")[0], $P.scrollDataList);
|
||||
|
||||
/* 출처: https://nowonbun.tistory.com/538 [명월 일지:티스토리]
|
||||
show.bs.modal : 모달이 열릴 때 바로 실행되는 이벤트입니다.
|
||||
shown.bs.modal : 모달의 열림이 끝나고 실행되는 이벤트입니다.
|
||||
hide.bs.modal : 모달이 닫힐 때 바로 실행되는 이벤트입니다.
|
||||
hidden.bs.modal : 모달의 닫힘이 끝나고 실행되는 이벤트입니다.
|
||||
*/
|
||||
// DataTables 스크롤을 위해서 다이얼로그 화면이 생성된 후 Dataset을 설정한다.
|
||||
$("#${infoPrefix}Dialog--${openerPageName}").on("shown.bs.modal", function (e) {
|
||||
$P.control.setData({
|
||||
${infoPrefix}List: ${wrngTrgtList}
|
||||
, ${infoPrefix}Start: ${wrngTrgtStart}
|
||||
, ${infoPrefix}Fetch: ${wrngTrgtFetch}
|
||||
, ${infoPrefix}Total: ${wrngTrgtTotal}
|
||||
});
|
||||
|
||||
// 초기 데이터 설정
|
||||
$P.initData();
|
||||
});
|
||||
}
|
||||
|
||||
// 초기 화면 설정
|
||||
$P.initForm = () => {
|
||||
// 화면 초기화
|
||||
$("#frmEdit--${pageName}")[0].reset();
|
||||
|
||||
// 달력 초기화
|
||||
initDatepicker("frmEdit--${pageName}");
|
||||
$("#sndngYmd--${pageName}").datepicker("setDate", new Date());
|
||||
$("#sndngEndYmd--${pageName}").datepicker("setDate", new Date());
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 최초 실행 함수
|
||||
**************************************************************************/
|
||||
// 1. 이벤트 설정
|
||||
$P.setEvent();
|
||||
|
||||
// 2. 초기 화면 설정
|
||||
$P.initForm();
|
||||
|
||||
// 3. 보안모드
|
||||
fn_securityModeToggle($("#securityMode--top").is(":checked"));
|
||||
});
|
||||
|
||||
</script>
|
||||
@ -1,639 +0,0 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
|
||||
<c:set var="prefixName" scope="request">계고장 발송 현황</c:set>
|
||||
|
||||
<!-- inner page html -->
|
||||
<div class="content-wrapper">
|
||||
<!-- Content -->
|
||||
<div class="container-xxl flex-grow-1 px-0">
|
||||
<div class="card wrapper-list">
|
||||
<!-- 상단 버튼 -->
|
||||
<div class="container-page-btn">
|
||||
<button type="button" class="btn btn-outline-dark w-px-120" id="btnReset--${pageName}" title="초기화">
|
||||
초기화
|
||||
</button>
|
||||
<span class="container-window-btn-right">
|
||||
<button type="button" class="btn btn-search w-px-120" id="btnSearch--${pageName}" title="검색">
|
||||
검색
|
||||
</button>
|
||||
<button type="button" class="btn btn-excel w-px-120" id="btnExcel--${pageName}" title="엑셀">
|
||||
엑셀
|
||||
</button>
|
||||
</span>
|
||||
</div>
|
||||
<!-- 상단 버튼 -->
|
||||
|
||||
<!-- 검색 조건 영역 -->
|
||||
<form id="frmSearch--${pageName}" name="frmSearch">
|
||||
<!-- hidden -->
|
||||
<input type="hidden" id="sggCd--${pageName}" name="sggCd" />
|
||||
|
||||
<!-- 메인 조건 -->
|
||||
<div class="container-search">
|
||||
<div class="row g-1">
|
||||
<!-- 업무 구분 -->
|
||||
<div class="col-12">
|
||||
<span class="form-label fw-bold form-search-title w-px-120 text-end">업무구분</span>
|
||||
<span class="form-search-linebox">
|
||||
<c:forEach items="${taskListForSgg}" var="item">
|
||||
<label>
|
||||
<input type="radio" class="form-check-input" name="taskSeCd" alt="업무구분"
|
||||
value="${item.code}" onchange="pageObject['${pageName}'].fnResetAndChangeBiz(this.value);">
|
||||
${item.value}
|
||||
</label>
|
||||
</c:forEach>
|
||||
</span>
|
||||
</div>
|
||||
<!-- 발송 일자 -->
|
||||
<div class="col-6">
|
||||
<label class="form-label fw-bold form-search-title w-px-120 text-end" for="schSndngYmdFrom--${pageName}">발송일자</label>
|
||||
<span class="form-search-linebox">
|
||||
<input type="text" class="form-control form-date" id="schSndngYmdFrom--${pageName}" name="schSndngYmdFrom"
|
||||
data-fmt-type="day" title="시작 날짜 선택" />
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
~
|
||||
<input type="text" class="form-control form-date" id="schSndngYmdTo--${pageName}" name="schSndngYmdTo"
|
||||
data-fmt-type="day" title="종료 날짜 선택" />
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
</span>
|
||||
</div>
|
||||
<!-- 발송 등록 구분 코드 -->
|
||||
<div class="col-6">
|
||||
<label class="form-label fw-bold form-search-title w-px-120 text-end" for="schSndngRegSeCd--${pageName}">등록구분</label>
|
||||
<select class="form-select w-px-80" id="schSndngRegSeCd--${pageName}" name="schSndngRegSeCd">
|
||||
<c:forEach items="${FIM067List}" var="item">
|
||||
<option value="${item.code}">${item.value}</option>
|
||||
</c:forEach>
|
||||
</select>
|
||||
</div>
|
||||
<!-- -->
|
||||
<div class="col-6">
|
||||
</div>
|
||||
<!-- 동적 검색 -->
|
||||
<div class="col-6">
|
||||
<input type="hidden" id="by--${pageName}" name="by" />
|
||||
<input type="text" class="form-control fw-bold w-px-120 text-end" id="byOutput--${pageName}" value="동적 검색" readonly />
|
||||
<input type="hidden" id="mainOption--${pageName}" name="mainOption" />
|
||||
<input type="hidden" id="subOption--${pageName}" name="subOption" />
|
||||
<input type="text" class="form-control w-px-400" id="term--${pageName}" name="term" autocomplete="off" />
|
||||
<!-- 상세 검색조건 버튼 -->
|
||||
<span class="flr">
|
||||
<button type="button" class="btn btn-open-detail" data-bs-toggle="collapse" data-bs-target="#searchDetail--${pageName}">
|
||||
<i class="bx bx-chevron-down"></i>
|
||||
상세검색
|
||||
</button>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div> <!-- 메인 조건 -->
|
||||
|
||||
<!-- 상세 조건 -->
|
||||
<div id="searchDetail--${pageName}" class="container-search container-search-detail collapse">
|
||||
<div class="row g-1">
|
||||
<!-- 등록일자, 수정일자 -->
|
||||
<div class="col-6">
|
||||
<select class="form-select w-px-120 text-center" id="schRegDateOpt--${pageName}" name="schRegDateOpt">
|
||||
<option value="regDt">등록일자</option>
|
||||
<option value="mdfcnDt">수정일자</option>
|
||||
</select>
|
||||
<span class="form-search-linebox">
|
||||
<input type="text" class="form-control form-date" id="schRegDateFrom--${pageName}" name="schRegDateFrom"
|
||||
data-fmt-type="day" title="시작 날짜 선택" />
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
~
|
||||
<input type="text" class="form-control form-date" id="schRegDateTo--${pageName}" name="schRegDateTo"
|
||||
data-fmt-type="day" title="종료 날짜 선택">
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
</span>
|
||||
</div>
|
||||
<!-- 등록자명, 수정자명 -->
|
||||
<div class="col-6">
|
||||
<select class="form-select w-px-120 text-center" id="schRgtrOpt--${pageName}" name="schRgtrOpt">
|
||||
<option value="rgtr">등록자</option>
|
||||
<option value="mdfr">수정자</option>
|
||||
</select>
|
||||
<input type="hidden" id="schRgtrCd--${pageName}" name="schRgtrCd" />
|
||||
<input type="text" class="form-control w-px-160" id="schRgtrNm--${pageName}" name="schRgtrNm" />
|
||||
<button type="button" class="btn btn-sm btn-outline-dark" id="btnFindUser--${pageName}" title="사용자 검색">검색</button>
|
||||
</div>
|
||||
</div>
|
||||
</div> <!-- 상세 조건 -->
|
||||
</form>
|
||||
<!-- 검색 조건 영역 -->
|
||||
|
||||
<!-- 업무 버튼 및 건수 표시 -->
|
||||
<div>
|
||||
<span class="container-page-btn">
|
||||
<!-- 건수, 페이지 표시 -->
|
||||
<div class="d-flex flex-row justify-content-between">
|
||||
<span class="dataTables_info" id="paging--${pageName}PagingInfo" role="status" aria-live="polite"></span>
|
||||
<ul class="pagination pagination-primary" id="paging--${pageName}">
|
||||
</ul>
|
||||
</div>
|
||||
<!-- 업무 버튼 -->
|
||||
<span class="container-window-btn-right">
|
||||
<button type="button" class="btn btn-primary w-px-120" id="btnRemove--${pageName}" title="계고장 발송 삭제">
|
||||
발송 삭제
|
||||
</button>
|
||||
</span>
|
||||
</span>
|
||||
</div>
|
||||
<!-- 업무 버튼 및 건수 표시 -->
|
||||
|
||||
<!-- DataTables(그리드) -->
|
||||
<div class="card-datatable text-nowrap">
|
||||
<div class="dataTables_wrapper dt-bootstrap5 no-footer" id="DataTables_Table_0_wrapper--${pageName}">
|
||||
<div class="table-responsive ox-scroll oy-scroll h-px-500" id="table-responsive--${pageName}">
|
||||
<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">
|
||||
<tr id="theadTr--${pageName}"
|
||||
data-by="by--${pageName}" data-by-output="byOutput--${pageName}" data-main-option="mainOption--${pageName}" data-sub-option="subOption--${pageName}">
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="tbody--${pageName}">
|
||||
</tbody>
|
||||
|
||||
<template id="${infoPrefix}Col--${pageName}">
|
||||
<th class="cmn" style="width: 72px;">No.</th>
|
||||
<th class="cmn" style="width: 56px;"><input type="checkbox" class="form-check-input" id="gridAllCheckbox--${pageName}" onchange="pageObject['${pageName}'].control.select(this.checked);" /></th>
|
||||
<th class="cmn" style="width: 160px;" onclick="searchFromGridTitle('TASK_SE_CD', this.innerText, 'codeValue', 'FIM054');">업무구분</th>
|
||||
<th class="cmn" style="width: 120px;" onclick="searchFromGridTitle('SNDNG_REG_SE_CD', this.innerText, 'codeValue', 'FIM067');">등록구분</th>
|
||||
<th class="cmn" style="width: 160px;" onclick="searchFromGridTitle('SNDNG_SE_CD', this.innerText, 'codeValue', 'FIM067');">발송구분</th>
|
||||
<th class="cmn" style="width: 160px;" onclick="searchFromGridTitle('VLTN_ARTCL', this.innerText, 'match', 'part');">위반항목</th>
|
||||
<th class="cmn" style="width: 120px;" onclick="searchFromGridTitle('SNDNG_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: 140px;" onclick="searchFromGridTitle('GRAMT', 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: 140px;">등록사용자</th>
|
||||
<th class="cmn" style="width: 180px;">수정일시</th>
|
||||
<th class="cmn" style="width: 140px;">수정사용자</th>
|
||||
<th class="cmn dummy-th"></th>
|
||||
</template>
|
||||
<template id="${infoPrefix}Row--${pageName}">
|
||||
<tr data-key="{SNDNG_ID}">
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{ROW_NUM}</td>
|
||||
<td class="cmn text-center"><input type="checkbox" class="form-check-input" name="gridCheckbox" value="{SNDNG_ID}" onchange="pageObject['${pageName}'].control.select('{SNDNG_ID}', this.checked);" /></td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{TASK_SE_NM}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{SNDNG_REG_SE_NM}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{SNDNG_SE_NM}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{VLTN_ARTCL}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{SNDNG_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}">{GRAMT}</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}">{RGTR_NM}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{MDFCN_DT}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{MDFR_NM}</td>
|
||||
<td class="cmn dummy-td"></td>
|
||||
</tr>
|
||||
</template>
|
||||
<template id="${infoPrefix}NotFound--${pageName}">
|
||||
<tr class="odd">
|
||||
<td valign="top" colspan="17" class="dataTables_empty text-center">${prefixName} 정보를 찾지 못했습니다.</td>
|
||||
</tr>
|
||||
</template>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- DataTables(그리드) -->
|
||||
</div> <!-- <div class="card wrapper-list"> -->
|
||||
</div> <!-- <div class="container-xxl flex-grow-1 px-0"> -->
|
||||
<!-- Content -->
|
||||
|
||||
<div class="content-backdrop fade"></div>
|
||||
</div>
|
||||
<!-- / inner page html <div class="content-wrapper"> -->
|
||||
|
||||
<script>
|
||||
/**************************************************************************
|
||||
* Global Variable
|
||||
**************************************************************************/
|
||||
pageObject["${pageName}"] = {};
|
||||
|
||||
/**************************************************************************
|
||||
* script 진입
|
||||
**************************************************************************/
|
||||
$(document).ready(function() {
|
||||
// pageObject
|
||||
let $P = pageObject["${pageName}"];
|
||||
|
||||
// FormFields
|
||||
$P.formFields = new FimsFormFields("#frmSearch--${pageName}");
|
||||
|
||||
/**************************************************************************
|
||||
* DatasetControl
|
||||
**************************************************************************/
|
||||
$P.control = new DatasetControl({
|
||||
prefix: "wrngSndng"
|
||||
, prefixName: "계고장 발송 현황"
|
||||
, keymapper: info => info ? info.SNDNG_ID : ""
|
||||
, dataGetter: obj => obj.${infoPrefix}List
|
||||
, appendData: true
|
||||
, infoSize: "xxl"
|
||||
, formats: {
|
||||
SNDNG_YMD: dateFormat
|
||||
, SNDNG_END_YMD: dateFormat
|
||||
, TNOCS: numberFormat
|
||||
, GRAMT: numberFormat
|
||||
, REG_DT: datetimeFormat
|
||||
, MDFCN_DT: datetimeFormat
|
||||
}
|
||||
});
|
||||
// $P.control 설정
|
||||
$P.control.defaultFetchSize = FETCH_XS; // 1 페이지당 조회되는 자료 건수 index.jsp에서 확인 FETCH_XS = 30
|
||||
$P.control.query = { pageNum : 1, fetchSize : $P.control.defaultFetchSize };
|
||||
$P.control.beforeCurrent = null;
|
||||
|
||||
/**************************************************************************
|
||||
* DatasetControl 이벤트
|
||||
**************************************************************************/
|
||||
// Dataset 변경 이벤트
|
||||
$P.control.onDatasetChange = (obj, option) => {
|
||||
$P.renderList(obj.${infoPrefix}Total, option);
|
||||
|
||||
$("#paging--${pageName}").setPagingInfo({
|
||||
list: $P.control.dataset
|
||||
, prefix: "paging--${pageName}"
|
||||
, start: obj.${infoPrefix}Start
|
||||
, totalSize: obj.${infoPrefix}Total
|
||||
, fetchSize: obj.${infoPrefix}Fetch
|
||||
, func: "pageObject['${pageName}'].control.load({index})"
|
||||
});
|
||||
|
||||
|
||||
};
|
||||
|
||||
// 현재 선택 자료 변경 이벤트
|
||||
$P.control.onCurrentChange = (item) => {
|
||||
if (!item) return;
|
||||
|
||||
let key = item.data.SNDNG_ID;
|
||||
|
||||
$("#tbody--${pageName}").setCurrentRow(key);
|
||||
};
|
||||
|
||||
// 선택(체크) 변경 이벤트
|
||||
$P.control.onSelectionChange = (selected) => {
|
||||
let ${infoPrefix}List = $P.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()));
|
||||
});
|
||||
|
||||
// 삭제 버튼
|
||||
$("#btnRemove--${pageName}").prop("disabled", keys.length < 1);
|
||||
|
||||
// DataTables(그리드) 전체 선택(checkbox)
|
||||
if (keys.length < 1) {
|
||||
$("#DataTables_Table_0--${pageName} th input[type='checkbox']").prop("checked", false); // 체크 해제
|
||||
} else if (keys.length == ${infoPrefix}List.length) {
|
||||
$("#DataTables_Table_0--${pageName} th input[type='checkbox']").prop("checked", true); // 체크 설정
|
||||
} else {
|
||||
$("#DataTables_Table_0--${pageName} th input[type='checkbox']").prop("checked", false); // 체크 해제
|
||||
}
|
||||
};
|
||||
|
||||
// 상세정보 dialog
|
||||
$P.control.getInfo = (sndngId) => {
|
||||
if (typeof sndngId == "undefined" || sndngId == null || sndngId == "") return;
|
||||
|
||||
let params = {
|
||||
title: $P.control.prefixName + " 상세 정보" // 타이틀
|
||||
, callPurpose: "view" // 호출 용도
|
||||
, fetchSize: $P.control.defaultFetchSize // 한번에 조회되는 자료 건수
|
||||
, pageNum: 1 // 페이지 번호
|
||||
, sggCd: $("#sggCd--${pageName}").val() // 시군구 코드
|
||||
, taskSeCd: $("#frmSearch--${pageName} input[name='taskSeCd']:checked").val() // 업무 구분 코드
|
||||
, sndngId: sndngId // 발송 ID
|
||||
}
|
||||
|
||||
ajax.get({
|
||||
url: wctx.url("/" + params.taskSeCd + "${infoPrefixUrl}" + "/040/info.do") + "?openerPageName=${pageName}"
|
||||
, data: params || {}
|
||||
, success: resp => {
|
||||
dialog.open({
|
||||
id: $P.control.prefixed("DtlDialog--${pageName}")
|
||||
, title: params.title
|
||||
, content: resp
|
||||
, size: $P.control.infoSize
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// 삭제 callback
|
||||
$P.control.onRemove = (resp) => {
|
||||
let btnTitle = $("#btnRemove--${pageName}").attr("title");
|
||||
let showMessage = resp.rtnMsg.replace(/[S]|[F]/g, btnTitle);
|
||||
|
||||
// 메시지 출력
|
||||
dialog.alert({
|
||||
content: showMessage
|
||||
, init: () => { setDialogZindex(); }
|
||||
, onOK: () => { }
|
||||
});
|
||||
|
||||
if (resp.saved) { $P.fnRefreshList(); } // 자료 재조회
|
||||
}
|
||||
|
||||
// 삭제
|
||||
$P.control.remove = (params) => {
|
||||
if (!params) return;
|
||||
|
||||
ajax.post({
|
||||
url: wctx.url("/" + params.taskSeCd + "${infoPrefixUrl}" + "/030/remove.do")
|
||||
, data: params
|
||||
, success: resp => $P.control.onRemove(resp)
|
||||
});
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* DataTables 이벤트
|
||||
**************************************************************************/
|
||||
// DataTables에 click, dbclick 이벤트
|
||||
$P.renderList = (totalSize, option) => {
|
||||
let ${infoPrefix}List = $P.control.dataset;
|
||||
let empty = ${infoPrefix}List.empty;
|
||||
|
||||
let trs = empty ?
|
||||
[document.getElementById("${infoPrefix}NotFound--${pageName}").innerHTML] : <%-- from template#${infoPrefix}NotFound --%>
|
||||
${infoPrefix}List.inStrings(
|
||||
document.getElementById("${infoPrefix}Row--${pageName}").innerHTML, <%-- from template#${infoPrefix}Row --%>
|
||||
(str, dataItem) => str
|
||||
.replace(/{onclick}/gi, "pageObject['${pageName}'].control.setCurrent('" + dataItem.getValue("SNDNG_ID") + "');")
|
||||
.replace(/{ondblclick}/gi, "pageObject['${pageName}'].control.getInfo('" + dataItem.getValue("SNDNG_ID") + "');")
|
||||
);
|
||||
|
||||
let noMore = (${infoPrefix}List.length >= totalSize);
|
||||
let initScroll = ($P.control.query.pageNum < 2);
|
||||
if(option != null && option.reloaded){
|
||||
initScroll = false;
|
||||
}
|
||||
|
||||
$("#table-responsive--${pageName}")[0].changeContent(trs.join(), initScroll, noMore);
|
||||
|
||||
// checkbox 체크 해제
|
||||
$("#DataTables_Table_0--${pageName} th input[type='checkbox']").prop("checked", false);
|
||||
|
||||
//보안모드
|
||||
fn_securityModeToggle($("#securityMode--top").is(":checked"));
|
||||
}
|
||||
|
||||
// DataTables에 스크롤이 맨 밑으로 이동했을 때 이벤트
|
||||
$P.scrollDataList = () => {
|
||||
|
||||
$P.control.load($P.control.query.pageNum + 1);
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 사용자 함수(function)
|
||||
**************************************************************************/
|
||||
// 검색 자료 재조회
|
||||
$P.fnRefreshList = () => {
|
||||
|
||||
$P.control.reload({all : true});
|
||||
}
|
||||
|
||||
// 사용자검색 callback
|
||||
$P.callbackFindUser = (userId, userNm) => {
|
||||
$("#schRgtrCd--${pageName}").val(userId); // 사용자 ID
|
||||
$("#schRgtrNm--${pageName}").val(userNm); // 사용자 명
|
||||
}
|
||||
|
||||
// 삭제사유 callback
|
||||
$P.callbackRsn = (obj) => {
|
||||
// 서버에 전송할 data(파라미터) 생성
|
||||
let params = {};
|
||||
let selected = $P.control.dataset.getKeys("selected");
|
||||
|
||||
params[$P.control.prefixed("Ids")] = selected.join(","); // IDs
|
||||
params.sggCd = $("#sggCd--${pageName}").val(); // 시군구 코드
|
||||
params.taskSeCd = $("#frmSearch--${pageName} input[name='taskSeCd']:checked").val(); // 업무 구분 코드
|
||||
params.delRsn = obj.reason; // 삭제 사유
|
||||
|
||||
$P.control.remove(params);
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 버튼 clickEvent
|
||||
**************************************************************************/
|
||||
// 업무 구분 변경
|
||||
$P.fnResetAndChangeBiz = (taskSeCd) => {
|
||||
// 업무 구분 코드
|
||||
if (typeof taskSeCd == "undefined" || taskSeCd == null || taskSeCd == "") {
|
||||
taskSeCd = $("#layout-navbar input[name='taskSeCd']:checked").val();
|
||||
}
|
||||
|
||||
// 초기 기본 설정
|
||||
$P.initForm(taskSeCd);
|
||||
// 업무 구분별 설정
|
||||
$P.setTask(taskSeCd);
|
||||
|
||||
// dataset 초기화
|
||||
$P.control.dataset.clear();
|
||||
}
|
||||
|
||||
// 사용자검색 버튼 클릭 이벤트
|
||||
$P.fnGetFindUser = () => {
|
||||
let params = {
|
||||
openerPageName: "${pageName}"
|
||||
, callbackFuncName: "pageObject['${pageName}']['callbackFindUser']"
|
||||
}
|
||||
|
||||
ajax.get({
|
||||
url: wctx.url("/user/user02/010/main.do") + "?openerPageName=${pageName}"
|
||||
, data: params || {}
|
||||
, success: resp => {
|
||||
dialog.open({
|
||||
id: "userDialog--${pageName}"
|
||||
, title: "사용자 검색"
|
||||
, content: resp
|
||||
, size: "lg"
|
||||
, init: () => { setDialogZindex(); }
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// 검색 버튼 이벤트
|
||||
$P.fnSearchList = () => {
|
||||
// 검색조건
|
||||
$P.control.query = $P.formFields.get();
|
||||
$P.control.query.fetchSize = $P.control.defaultFetchSize; // 한번에 조회되는 자료 건수
|
||||
$P.control.query.sndngSeCdFrom = "11"; // 발송 구분 코드 - 11 계고장
|
||||
$P.control.query.sndngSeCdTo = "12"; // 발송 구분 코드 - 12 계고장 구형표지
|
||||
$P.control.query.delYn = "N"; // 삭제 여부
|
||||
|
||||
$P.control.load(1);
|
||||
}
|
||||
|
||||
// 엑셀 버튼 이벤트
|
||||
$P.fnExcel = () => {
|
||||
if ($P.control.dataset.empty) {
|
||||
dialog.alert({
|
||||
content: "검색된 자료가 없습니다."
|
||||
, init: () => { setDialogZindex(); }
|
||||
, 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)")
|
||||
, getCellDefsForPrivacyCell);
|
||||
|
||||
$P.control.query.cellDefs = cellDefs;
|
||||
|
||||
$P.control.download();
|
||||
}
|
||||
|
||||
// 삭제 버튼 이벤트
|
||||
$P.fnRemove = (title) => {
|
||||
// 선택 자료
|
||||
let selected = $P.control.dataset.getKeys("selected");
|
||||
|
||||
if (selected.length < 1) {
|
||||
dialog.alert({
|
||||
content: "선택하신 " + $P.control.prefixName + " 정보가 없습니다."
|
||||
, init: () => { setDialogZindex(); }
|
||||
, onOK: () => { }
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
// 삭제 메세지 확인
|
||||
dialog.alert({
|
||||
content: "선택하신 " + selected.length + "건의 " + $P.control.prefixName + " 정보를 삭제하시겠습니까?"
|
||||
, onOK: () => {
|
||||
// 삭제 사유 입력
|
||||
fetch(wctx.url("/resources/html/inputRsnDialog.html"))
|
||||
.then(function(resp) { return resp.text(); })
|
||||
.then(function(template) {
|
||||
dialog.open({
|
||||
id: "inputDelRsnDialog"
|
||||
, title: title
|
||||
, size: "lg"
|
||||
, content: template
|
||||
, init: () => { setDialogZindex(); }
|
||||
, onOK: () => {
|
||||
$P.callbackRsn({ reason: $("#reason").val() });
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 초기 셋팅
|
||||
**************************************************************************/
|
||||
// 이벤트 설정
|
||||
$P.setEvent = () => {
|
||||
// 기본 버튼 이벤트
|
||||
$("#btnReset--${pageName}").on("click", () => $P.fnResetAndChangeBiz()); // 초기화
|
||||
$("#btnSearch--${pageName}").on("click", () => $P.fnSearchList()); // 검색
|
||||
$("#btnExcel--${pageName}").on("click", () => $P.fnExcel()); // 엑셀
|
||||
$("#btnFindUser--${pageName}").on("click", () => $P.fnGetFindUser()); // 사용자 검색
|
||||
|
||||
// 동적검색에서 엔터(Enter) 키를 누르면 검색한다.
|
||||
$("#term--${pageName}").onEnterPress(function() {
|
||||
$P.fnSearchList();
|
||||
});
|
||||
|
||||
// form-date 항목에서 키보드로 입력시 날짜 포맷팅 적용
|
||||
$("#frmSearch--${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);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// 버튼 이벤트
|
||||
$("#btnRemove--${pageName}").on("click", function() {
|
||||
$P.fnRemove($(this).attr("title")); // 계고장 발송 삭제
|
||||
});
|
||||
|
||||
// DataTables width 변경 조정
|
||||
fnMakeResizableTable($("#table-responsive--${pageName}")[0]);
|
||||
|
||||
// DataTables 스크롤 이벤트 생성
|
||||
fnMakeScrollableTable($("#table-responsive--${pageName}")[0], $P.scrollDataList);
|
||||
}
|
||||
|
||||
// 초기 화면 설정
|
||||
$P.initForm = (taskSeCd) => {
|
||||
// 화면 초기화
|
||||
$("#frmSearch--${pageName}")[0].reset();
|
||||
|
||||
// input, select 초기화
|
||||
let searchForm = $("#frmSearch--${pageName}");
|
||||
searchForm.find("input[type='radio']").not("[name='taskSeCd']").prop("checked", false);
|
||||
searchForm.find("input[type='checkbox']").prop("checked", false);
|
||||
searchForm.find("input[type='text']").val("");
|
||||
searchForm.find("input[type='hidden']").val("");
|
||||
searchForm.find("select").each(function() { $(this).find("option:eq(0)").prop("selected", true); });
|
||||
|
||||
// 최고 관리자 경우 업무구분을 선택할 수 있도록 하자.
|
||||
$("#frmSearch--${pageName} input[name='taskSeCd']").each(function(i) {
|
||||
$(this).prop("disabled", "true");
|
||||
});
|
||||
|
||||
// 기본 데이터 설정
|
||||
$("#sggCd--${pageName}").val("${sggCd}"); // 시군구 코드
|
||||
$("#frmSearch--${pageName} input[name='taskSeCd'][value='" + taskSeCd + "']").prop("checked", true); // 업무 구분 코드
|
||||
initDatepicker("frmSearch--${pageName}"); // 달력 초기화
|
||||
$("#schSndngYmdFrom--${pageName}").datepicker("setDate", DateUtil.getDateDay(-7).date);
|
||||
$("#schSndngYmdTo--${pageName}").datepicker("setDate", new Date());
|
||||
$("#byOutput--${pageName}").val("동적 검색"); // 동적 검색
|
||||
$("#schRgtrNm--${pageName}").prop("readonly", true); // 사용자 이름
|
||||
}
|
||||
|
||||
// 업무 구분별 설정
|
||||
$P.setTask = (taskSeCd) => {
|
||||
// 업무구분에 따른 URL 설정
|
||||
$P.control.urls.load = wctx.url("/" + taskSeCd + "${infoPrefixUrl}" + "/030/list.do"); // 조회
|
||||
|
||||
// 업무별 조회 조건
|
||||
renderForTask("frmSearch--${pageName}", taskSeCd.toLowerCase());
|
||||
|
||||
// 업무별 그리드 th
|
||||
let colContent = document.getElementById("${infoPrefix}Col--${pageName}").content;
|
||||
let cols = $(colContent).find("." + taskSeCd.toLowerCase() + ",.cmn");
|
||||
let colsOuterHTML = "";
|
||||
|
||||
cols.each(function() {
|
||||
colsOuterHTML += this.outerHTML;
|
||||
});
|
||||
$("#table-responsive--${pageName}")[0].changeColumn(colsOuterHTML);
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 최초 실행 함수
|
||||
**************************************************************************/
|
||||
// 1. 이벤트 설정
|
||||
$P.setEvent();
|
||||
|
||||
// 2. 초기 설정 및 업무 구분 변경
|
||||
$P.fnResetAndChangeBiz($("#layout-navbar input[name='taskSeCd']:checked").val());
|
||||
|
||||
// 3. 보안모드
|
||||
fn_securityModeToggle($("#securityMode--top").is(":checked"));
|
||||
});
|
||||
|
||||
</script>
|
||||
@ -1,372 +0,0 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
|
||||
<c:set var="prefixName" scope="request">계고장 발송 현황 상세 정보</c:set>
|
||||
|
||||
<!-- inner page html -->
|
||||
<div class="wrapper-pop">
|
||||
<!-- Content -->
|
||||
<div class="container flex-grow-1 px-0">
|
||||
|
||||
<!-- Page Body -->
|
||||
<div class="card">
|
||||
<!-- 입력 영역 -->
|
||||
<form id="frmEdit--${pageName}" name="frmEdit">
|
||||
<input type="hidden" id="sggCd--${pageName}" name="sggCd" />
|
||||
<input type="hidden" id="taskSeCd--${pageName}" name="taskSeCd" />
|
||||
<input type="hidden" id="sndngId--${pageName}" name=sndngId />
|
||||
</form>
|
||||
<!-- 입력 영역 -->
|
||||
|
||||
<!-- 업무 버튼 및 건수 표시 -->
|
||||
<div>
|
||||
<span class="container-page-btn">
|
||||
<!-- 건수, 페이지 표시 -->
|
||||
<div class="d-flex flex-row justify-content-between">
|
||||
<span class="dataTables_info" id="paging--${pageName}PagingInfo" role="status" aria-live="polite"></span>
|
||||
<ul class="pagination pagination-primary" id="paging--${pageName}">
|
||||
</ul>
|
||||
</div>
|
||||
<!-- 업무 버튼 -->
|
||||
<span class="container-window-btn-right">
|
||||
<button type="button" class="btn btn-excel w-px-120" id="btnExcel--${pageName}" title="엑셀">
|
||||
엑셀
|
||||
</button>
|
||||
<button type="button" class="btn btn-primary w-px-120" id="btnPrintWrng--${pageName}" title="계고장 출력">
|
||||
계고장 출력
|
||||
</button>
|
||||
</span>
|
||||
</span>
|
||||
</div> <!-- 업무 버튼 및 건수 표시 -->
|
||||
|
||||
<!-- DataTables(그리드) -->
|
||||
<div class="card-datatable text-nowrap">
|
||||
<div class="dataTables_wrapper dt-bootstrap5 no-footer" id="DataTables_Table_0_wrapper--${pageName}">
|
||||
<div class="table-responsive ox-scroll oy-scroll h-px-500" id="table-responsive--${pageName}">
|
||||
<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">
|
||||
<tr id="theadTr--${pageName}"
|
||||
data-by="by--${pageName}" data-by-output="byOutput--${pageName}" data-main-option="mainOption--${pageName}" data-sub-option="subOption--${pageName}">
|
||||
<th class="cmn" style="width: 72px;">No.</th>
|
||||
<th class="cmn" style="width: 120px;">발송상태</th>
|
||||
<th class="cmn" style="width: 160px;">등기번호</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: 100px;">우편번호</th>
|
||||
<th class="cmn" style="width: 280px;">주소</th>
|
||||
<th class="cmn" style="width: 320px;">상세주소</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: 200px;">수령인관계</th>
|
||||
<th class="cmn" style="width: 180px;">단속일시</th>
|
||||
<th class="cmn" style="width: 140px;">차량번호</th>
|
||||
<th class="cmn" style="width: 160px;">단속법정동</th>
|
||||
<th class="cmn" style="width: 280px;">단속장소</th>
|
||||
<th class="cmn" style="width: 120px;">과태료금액</th>
|
||||
<th class="cmn" style="width: 180px;">등록일시</th>
|
||||
<th class="cmn" style="width: 140px;">등록사용자</th>
|
||||
<th class="cmn" style="width: 180px;">수정일시</th>
|
||||
<th class="cmn" style="width: 140px;">수정사용자</th>
|
||||
<th class="cmn dummy-th"></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="tbody--${pageName}">
|
||||
</tbody>
|
||||
<template id="${infoPrefix}Row--${pageName}">
|
||||
<tr data-key="{SNDNG_DTL_ID}">
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{ROW_NUM}</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}">{SNDNG_YMD}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{DUDT_YMD}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{RCPN_NM}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{RCPN_ZIP}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{RCPN_ADDR}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{RCPN_DTL_ADDR}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{DLVR_YMD}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{DLVR_TM}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{UNDLVR_RSN_NM}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{ACTL_RCPN_NM}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{RCPN_REL_NM}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{CRDN_DT}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{VHRNO}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{CRDN_STDG_NM}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{CRDN_PLC}</td>
|
||||
<td class="cmn text-end" onclick="{onclick}" ondblclick="{ondblclick}">{FFNLG_AMT}</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}">{MDFCN_DT}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{MDFR_NM}</td>
|
||||
<td class="cmn dummy-td"></td>
|
||||
</tr>
|
||||
</template>
|
||||
<template id="${infoPrefix}NotFound--${pageName}">
|
||||
<tr class="odd">
|
||||
<td valign="top" colspan="24" class="dataTables_empty text-center">${prefixName} 정보를 찾지 못했습니다.</td>
|
||||
</tr>
|
||||
</template>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div> <!-- DataTables(그리드) -->
|
||||
</div> <!-- <div class="card"> -->
|
||||
<!-- Page Body -->
|
||||
|
||||
</div> <!-- <div class="container flex-grow-1 px-0"> -->
|
||||
<!-- Content -->
|
||||
</div>
|
||||
<!-- / inner page html <div class="wrapper-pop"> -->
|
||||
|
||||
<script>
|
||||
/**************************************************************************
|
||||
* Global Variable
|
||||
**************************************************************************/
|
||||
pageObject["${pageName}"] = {};
|
||||
|
||||
/**************************************************************************
|
||||
* script 진입
|
||||
**************************************************************************/
|
||||
$(document).ready(function() {
|
||||
// pageObject
|
||||
let $P = pageObject["${pageName}"];
|
||||
|
||||
// infoDialog 호출 용도(view 조회(편집불가), create 등록, update 수정)
|
||||
$P.callPurpose = "${callPurpose}";
|
||||
// FormFields
|
||||
$P.formFields = new FimsFormFields("#frmEdit--${pageName}");
|
||||
|
||||
/**************************************************************************
|
||||
* DatasetControl
|
||||
**************************************************************************/
|
||||
$P.control = new DatasetControl({
|
||||
prefix: "wrngSndngDtl"
|
||||
, prefixName: "계고장 발송 상세"
|
||||
, keymapper: info => info ? info.SNDNG_DTL_ID : ""
|
||||
, dataGetter: obj => obj.${infoPrefix}List
|
||||
, appendData: true
|
||||
, formats: {
|
||||
SNDNG_YMD: dateFormat
|
||||
, DUDT_YMD: dateFormat
|
||||
, FFNLG_AMT: numberFormat
|
||||
, REG_DT: datetimeFormat
|
||||
, MDFCN_DT: datetimeFormat
|
||||
}
|
||||
});
|
||||
// $P.control 설정
|
||||
$P.control.defaultFetchSize = FETCH_XS; // 1 페이지당 조회되는 자료 건수 index.jsp에서 확인 FETCH_XS = 30
|
||||
$P.control.query = { pageNum : 1, fetchSize : $P.control.defaultFetchSize };
|
||||
$P.control.beforeCurrent = null;
|
||||
|
||||
/**************************************************************************
|
||||
* DatasetControl 이벤트
|
||||
**************************************************************************/
|
||||
// Dataset 변경 이벤트
|
||||
$P.control.onDatasetChange = (obj, option) => {
|
||||
$P.renderList(obj.${infoPrefix}Total, option);
|
||||
|
||||
$("#paging--${pageName}").setPagingInfo({
|
||||
list: $P.control.dataset
|
||||
, prefix: "paging--${pageName}"
|
||||
, start: obj.${infoPrefix}Start
|
||||
, totalSize: obj.${infoPrefix}Total
|
||||
, fetchSize: obj.${infoPrefix}Fetch
|
||||
, func: "pageObject['${pageName}'].control.load({index})"
|
||||
});
|
||||
|
||||
|
||||
};
|
||||
|
||||
// 현재 선택 자료 변경 이벤트
|
||||
$P.control.onCurrentChange = (item) => {
|
||||
if (!item) return;
|
||||
|
||||
let key = item.data.SNDNG_DTL_ID;
|
||||
|
||||
$("#tbody--${pageName}").setCurrentRow(key);
|
||||
};
|
||||
|
||||
/**************************************************************************
|
||||
* DataTables 이벤트
|
||||
**************************************************************************/
|
||||
// DataTables에 click, dbclick 이벤트
|
||||
$P.renderList = (totalSize, option) => {
|
||||
let ${infoPrefix}List = $P.control.dataset;
|
||||
let empty = ${infoPrefix}List.empty;
|
||||
|
||||
let trs = empty ?
|
||||
[document.getElementById("${infoPrefix}NotFound--${pageName}").innerHTML] : <%-- from template#${infoPrefix}NotFound --%>
|
||||
${infoPrefix}List.inStrings(
|
||||
document.getElementById("${infoPrefix}Row--${pageName}").innerHTML, <%-- from template#${infoPrefix}Row --%>
|
||||
(str, dataItem) => str
|
||||
.replace(/{onclick}/gi, "pageObject['${pageName}'].control.setCurrent('" + dataItem.getValue("SNDNG_DTL_ID") + "');")
|
||||
.replace(/{ondblclick}/gi, "pageObject['${pageName}'].getTotalInfo('" + dataItem.getValue("CRDN_ID") + "');")
|
||||
);
|
||||
|
||||
let noMore = (${infoPrefix}List.length >= totalSize);
|
||||
let initScroll = ($P.control.query.pageNum < 2);
|
||||
if(option != null && option.reloaded){
|
||||
initScroll = false;
|
||||
}
|
||||
|
||||
$("#table-responsive--${pageName}")[0].changeContent(trs.join(), initScroll, noMore);
|
||||
|
||||
|
||||
//보안모드
|
||||
fn_securityModeToggle($("#securityMode--top").is(":checked"));
|
||||
}
|
||||
|
||||
// DataTables에 스크롤이 맨 밑으로 이동했을 때 이벤트
|
||||
$P.scrollDataList = () => {
|
||||
|
||||
|
||||
$P.control.load($P.control.query.pageNum + 1);
|
||||
}
|
||||
|
||||
// DataTables에 더블 클릭시 개별총정보 dialog
|
||||
$P.getTotalInfo = (crdnId) => {
|
||||
if (typeof crdnId == "undefined" || crdnId == null || crdnId == "") return;
|
||||
|
||||
let params = {
|
||||
callControlName: "pageObject['${pageName}'].control"
|
||||
, sggCd: $P.control.dataset.getValue("SGG_CD")
|
||||
, taskSeCd: $P.control.dataset.getValue("TASK_SE_CD")
|
||||
, crdnId: crdnId
|
||||
}
|
||||
|
||||
ajax.get({
|
||||
url: wctx.url("/sprt/sprt02/010/main.do")
|
||||
, data: params
|
||||
, success: resp => {
|
||||
dialog.open({
|
||||
id: "totalInfoMainDialog"
|
||||
, title: "개별총정보"
|
||||
, content: resp
|
||||
, size: "xxl"
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 사용자 함수(function)
|
||||
**************************************************************************/
|
||||
// 출력
|
||||
$P.print = (params) => {
|
||||
if (!params) return;
|
||||
|
||||
dialog.alert({
|
||||
content: "작업중입니다"
|
||||
, onOK: () => {
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 버튼 clickEvent
|
||||
**************************************************************************/
|
||||
// 엑셀 버튼 이벤트
|
||||
$P.fnExcel = () => {
|
||||
if ($P.control.dataset.empty) {
|
||||
dialog.alert({
|
||||
content: "검색된 자료가 없습니다."
|
||||
, init: () => { setDialogZindex(); }
|
||||
, onOK: () => { }
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
// 검색조건
|
||||
$P.control.query = $P.formFields.get(); // 검색 조건
|
||||
$P.control.query.fetchSize = $P.control.defaultFetchSize; // 한번에 조회되는 자료 건수
|
||||
$P.control.query.delYn = "N"; // 삭제 여부
|
||||
|
||||
// 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)")
|
||||
, getCellDefsForPrivacyCell);
|
||||
|
||||
$P.control.query.cellDefs = cellDefs;
|
||||
|
||||
$P.control.download();
|
||||
}
|
||||
|
||||
// 계고장출력 버튼 이벤트
|
||||
$P.fnPrint = () => {
|
||||
// validate 확인
|
||||
if (!customValidate($("#frmEdit--${pageName}").find("input, select, textarea"))) return;
|
||||
|
||||
dialog.alert({
|
||||
content: $P.control.prefixName + " 정보를 출력하시겠습니까?"
|
||||
, onOK: () => {
|
||||
$P.print($P.formFields.get());
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 초기 셋팅
|
||||
**************************************************************************/
|
||||
// 이벤트 설정
|
||||
$P.setEvent = () => {
|
||||
// 기본 버튼 이벤트
|
||||
$("#btnExcel--${pageName}").on("click", () => $P.fnExcel()); // 엑셀
|
||||
|
||||
// 업무 버튼 이벤트
|
||||
$("#btnPrintWrng--${pageName}").on("click", function() {
|
||||
$P.fnPrint($(this).attr("title")); // 계고장 출력
|
||||
});
|
||||
|
||||
// DataTables width 변경 조정
|
||||
fnMakeResizableTable($("#table-responsive--${pageName}")[0]);
|
||||
|
||||
// DataTables 스크롤 이벤트 생성
|
||||
fnMakeScrollableTable($("#table-responsive--${pageName}")[0], $P.scrollDataList);
|
||||
|
||||
// DataTables 스크롤을 위해서 다이얼로그 화면이 생성된 후 Dataset을 설정한다.
|
||||
$("#${infoPrefix}Dialog--${openerPageName}").on("shown.bs.modal", function (e) {
|
||||
$P.control.setData({
|
||||
${infoPrefix}List: ${wrngSndngDtlList}
|
||||
, ${infoPrefix}Start: ${wrngSndngDtlStart}
|
||||
, ${infoPrefix}Fetch: ${wrngSndngDtlFetch}
|
||||
, ${infoPrefix}Total: ${wrngSndngDtlTotal}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
// 초기 화면 설정
|
||||
$P.initForm = () => {
|
||||
// 화면 초기화
|
||||
$("#frmEdit--${pageName}")[0].reset();
|
||||
|
||||
// 기본 데이터 설정
|
||||
$("#sggCd--${pageName}").val("${sggCd}"); // 시군구 코드
|
||||
$("#taskSeCd--${pageName}").val("${taskSeCd}"); // 업무 구분 코드
|
||||
$("#sndngId--${pageName}").val("${sndngId}"); // 발송 ID
|
||||
|
||||
// 업무 구분별 설정
|
||||
$P.setTask("${taskSeCd}");
|
||||
}
|
||||
|
||||
// 업무 구분별 설정
|
||||
$P.setTask = (taskSeCd) => {
|
||||
// 업무구분에 따른 URL 설정
|
||||
$P.control.urls.load = wctx.url("/" + taskSeCd + "${infoPrefixUrl}" + "/040/list.do"); // 조회
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 최초 실행 함수
|
||||
**************************************************************************/
|
||||
// 1. 이벤트 설정
|
||||
$P.setEvent();
|
||||
|
||||
// 2. 초기 화면 설정
|
||||
$P.initForm();
|
||||
|
||||
// 3. 보안모드
|
||||
fn_securityModeToggle($("#securityMode--top").is(":checked"));
|
||||
});
|
||||
|
||||
</script>
|
||||
@ -1,742 +0,0 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
|
||||
<c:set var="prefixName" scope="request">사전통지 발송 대상</c:set>
|
||||
|
||||
<!-- inner page html -->
|
||||
<div class="content-wrapper">
|
||||
<!-- Content -->
|
||||
<div class="container-xxl flex-grow-1 px-0">
|
||||
<div class="card wrapper-list">
|
||||
<!-- 상단 버튼 -->
|
||||
<div class="container-page-btn">
|
||||
<button type="button" class="btn btn-outline-dark w-px-120" id="btnReset--${pageName}" title="초기화">
|
||||
초기화
|
||||
</button>
|
||||
<span class="container-window-btn-right">
|
||||
<button type="button" class="btn btn-search w-px-120" id="btnSearch--${pageName}" title="검색">
|
||||
검색
|
||||
</button>
|
||||
<button type="button" class="btn btn-excel w-px-120" id="btnExcel--${pageName}" title="엑셀">
|
||||
엑셀
|
||||
</button>
|
||||
</span>
|
||||
</div>
|
||||
<!-- 상단 버튼 -->
|
||||
|
||||
<!-- 검색 조건 영역 -->
|
||||
<form id="frmSearch--${pageName}" name="frmSearch">
|
||||
<!-- hidden -->
|
||||
<input type="hidden" id="sggCd--${pageName}" name="sggCd" />
|
||||
|
||||
<!-- 메인 조건 -->
|
||||
<div class="container-search">
|
||||
<div class="row g-1">
|
||||
<!-- 업무 구분 -->
|
||||
<div class="col-12">
|
||||
<span class="form-label fw-bold form-search-title w-px-120 text-end">업무구분</span>
|
||||
<span class="form-search-linebox">
|
||||
<c:forEach items="${taskListForSgg}" var="item">
|
||||
<label>
|
||||
<input type="radio" class="form-check-input" name="taskSeCd" alt="업무구분"
|
||||
value="${item.code}" onchange="pageObject['${pageName}'].fnResetAndChangeBiz(this.value);">
|
||||
${item.value}
|
||||
</label>
|
||||
</c:forEach>
|
||||
</span>
|
||||
</div>
|
||||
<!-- 단속 일자 -->
|
||||
<div class="col-6">
|
||||
<label class="form-label fw-bold form-search-title w-px-120 text-end" for="schCrdnYmdFrom--${pageName}">단속일자</label>
|
||||
<span class="form-search-linebox">
|
||||
<input type="text" class="form-control form-date" id="schCrdnYmdFrom--${pageName}" name="schCrdnYmdFrom"
|
||||
data-fmt-type="day" title="시작 날짜 선택" />
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
~
|
||||
<input type="text" class="form-control form-date" id="schCrdnYmdTo--${pageName}" name="schCrdnYmdTo"
|
||||
data-fmt-type="day" title="종료 날짜 선택" />
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
</span>
|
||||
</div>
|
||||
<!-- 위반 항목 -->
|
||||
<div class="col-6">
|
||||
<label class="form-label fw-bold form-search-title w-px-120 text-end" for="schVltnCd--${pageName}">위반항목</label>
|
||||
<select class="form-select w-px-160" id="schVltnCd--${pageName}" name="schVltnCd">
|
||||
<option value="">전체</option>
|
||||
<c:forEach items="${FIM004List}" var="item">
|
||||
<option value="${item.code}">${item.value}</option>
|
||||
</c:forEach>
|
||||
</select>
|
||||
</div>
|
||||
<!-- -->
|
||||
<div class="col-6">
|
||||
</div>
|
||||
<!-- 동적 검색 -->
|
||||
<div class="col-6">
|
||||
<input type="hidden" id="by--${pageName}" name="by" />
|
||||
<input type="text" class="form-control fw-bold w-px-120 text-end" id="byOutput--${pageName}" value="동적 검색" readonly />
|
||||
<input type="hidden" id="mainOption--${pageName}" name="mainOption" />
|
||||
<input type="hidden" id="subOption--${pageName}" name="subOption" />
|
||||
<input type="text" class="form-control w-px-400" id="term--${pageName}" name="term" autocomplete="off" />
|
||||
<!-- 상세 검색조건 버튼 -->
|
||||
<span class="flr">
|
||||
<button type="button" class="btn btn-open-detail" data-bs-toggle="collapse" data-bs-target="#searchDetail--${pageName}">
|
||||
<i class="bx bx-chevron-down"></i>
|
||||
상세검색
|
||||
</button>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div> <!-- 메인 조건 -->
|
||||
|
||||
<!-- 상세 조건 -->
|
||||
<div id="searchDetail--${pageName}" class="container-search container-search-detail collapse">
|
||||
<div class="row g-1">
|
||||
<!-- 차량번호 -->
|
||||
<div class="col-4">
|
||||
<label class="form-label fw-bold form-search-title w-px-120 text-end" for="schVhrno--${pageName}">차량번호</label>
|
||||
<input type="text" class="form-control w-px-160" id="schVhrno--${pageName}" name="schVhrno" autocomplete="off" />
|
||||
</div>
|
||||
<!-- 납부자번호 -->
|
||||
<div class="col-4">
|
||||
<label class="form-label fw-bold form-search-title w-px-120 text-end" for="schRtpyrNm--${pageName}">납부자번호</label>
|
||||
<input type="text" class="form-control w-px-160" id="schRtpyrNm--${pageName}" name="schRtpyrNm" autocomplete="off" />
|
||||
</div>
|
||||
<!-- 납부자명 -->
|
||||
<div class="col-4">
|
||||
<label class="form-label fw-bold form-search-title w-px-120 text-end" for="schRtpyrNo--${pageName}">납부자명</label>
|
||||
<input type="text" class="form-control w-px-160" id="schRtpyrNo--${pageName}" name="schRtpyrNo" autocomplete="off" />
|
||||
</div>
|
||||
<!-- 등록일자, 수정일자 -->
|
||||
<div class="col-4">
|
||||
<select class="form-select w-px-120 text-center" id="schRegDateOpt--${pageName}" name="schRegDateOpt">
|
||||
<option value="regDt">등록일자</option>
|
||||
<option value="mdfcnDt">수정일자</option>
|
||||
</select>
|
||||
<span class="form-search-linebox">
|
||||
<input type="text" class="form-control form-date" id="schRegDateFrom--${pageName}" name="schRegDateFrom"
|
||||
data-fmt-type="day" title="시작 날짜 선택" />
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
~
|
||||
<input type="text" class="form-control form-date" id="schRegDateTo--${pageName}" name="schRegDateTo"
|
||||
data-fmt-type="day" title="종료 날짜 선택">
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
</span>
|
||||
</div>
|
||||
<!-- 등록자명, 수정자명 -->
|
||||
<div class="col-4">
|
||||
<select class="form-select w-px-120 text-center" id="schRgtrOpt--${pageName}" name="schRgtrOpt">
|
||||
<option value="rgtr">등록자</option>
|
||||
<option value="mdfr">수정자</option>
|
||||
</select>
|
||||
<input type="hidden" id="schRgtrCd--${pageName}" name="schRgtrCd" />
|
||||
<input type="text" class="form-control w-px-160" id="schRgtrNm--${pageName}" name="schRgtrNm" />
|
||||
<button type="button" class="btn btn-sm btn-outline-dark" id="btnFindUser--${pageName}" title="사용자 검색">검색</button>
|
||||
</div>
|
||||
</div>
|
||||
</div> <!-- 상세 조건 -->
|
||||
</form>
|
||||
<!-- 검색 조건 영역 -->
|
||||
|
||||
<!-- 업무 버튼 및 건수 표시 -->
|
||||
<div>
|
||||
<span class="container-page-btn">
|
||||
<!-- 건수, 페이지 표시 -->
|
||||
<div class="d-flex flex-row justify-content-between">
|
||||
<span class="dataTables_info" id="paging--${pageName}PagingInfo" role="status" aria-live="polite"></span>
|
||||
<ul class="pagination pagination-primary" id="paging--${pageName}">
|
||||
</ul>
|
||||
</div>
|
||||
<!-- 업무 버튼 -->
|
||||
<span class="container-window-btn-right">
|
||||
<button type="button" class="btn btn-primary w-px-120" id="btnCreateSlctnTrgtInfo--${pageName}" title="선택 발송대상 등록">
|
||||
선택 대상 등록
|
||||
</button>
|
||||
<button type="button" class="btn btn-primary w-px-120" id="btnCreateWholTrgtInfo--${pageName}" title="선택 발송대상 등록">
|
||||
전체 대상 등록
|
||||
</button>
|
||||
</span>
|
||||
</span>
|
||||
</div>
|
||||
<!-- 업무 버튼 및 건수 표시 -->
|
||||
|
||||
<!-- DataTables(그리드) -->
|
||||
<div class="card-datatable text-nowrap">
|
||||
<div class="dataTables_wrapper dt-bootstrap5 no-footer" id="DataTables_Table_0_wrapper--${pageName}">
|
||||
<div class="table-responsive ox-scroll oy-scroll h-px-500" id="table-responsive--${pageName}">
|
||||
<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">
|
||||
<tr id="theadTr--${pageName}"
|
||||
data-by="by--${pageName}" data-by-output="byOutput--${pageName}" data-main-option="mainOption--${pageName}" data-sub-option="subOption--${pageName}">
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="tbody--${pageName}">
|
||||
</tbody>
|
||||
|
||||
<template id="${infoPrefix}Col--${pageName}">
|
||||
<th class="cmn" style="width: 72px;">No.</th>
|
||||
<th class="cmn" style="width: 56px;"><input type="checkbox" class="form-check-input" id="gridAllCheckbox--${pageName}" onchange="pageObject['${pageName}'].control.select(this.checked);" /></th>
|
||||
<th class="cmn" style="width: 160px;">업무구분</th>
|
||||
<th class="cmn" style="width: 180px;" onclick="searchFromGridTitle('CVLCPT_APLY_NO', this.innerText, 'match', 'part');">민원신청번호</th>
|
||||
<th class="cmn" style="width: 180px;" onclick="searchFromGridTitle('CVLCPT_RCPT_NO', this.innerText, 'match', 'part');">민원접수번호</th>
|
||||
<th class="cmn" style="width: 140px;" onclick="searchFromGridTitle('CVLCPT_RCPT_YMD', this.innerText, 'ymd', '');">민원접수일자</th>
|
||||
<th class="cmn" style="width: 160px;" onclick="searchFromGridTitle('CVLCPT_PRCS_PIC_NM', this.innerText, 'match', 'part');">민원처리담당자</th>
|
||||
<th class="cmn" style="width: 200px;" onclick="searchFromGridTitle('CVLCPT_PRCS_CD', this.innerText, 'codeValue', 'FIM017');">민원처리결과</th>
|
||||
<th class="cmn" style="width: 180px;" onclick="searchFromGridTitle('CRDN_YMD', this.innerText, 'ymd', '');">단속일시</th>
|
||||
<th class="cmn" style="width: 140px;" onclick="searchFromGridTitle('VHRNO', this.innerText, 'match', 'part');">차량번호</th>
|
||||
<th class="cmn" style="width: 120px;" onclick="searchFromGridTitle('RTPYR_SE_CD', this.innerText, 'codeValue', 'FIM011');">납부자구분</th>
|
||||
<th class="cmn" style="width: 160px;" onclick="searchFromGridTitle('RTPYR_NO', this.innerText, 'ymd', '');">납부자번호</th>
|
||||
<th class="cmn" style="width: 200px;" onclick="searchFromGridTitle('RTPYR_NM', this.innerText, 'match', 'part');">납부자명</th>
|
||||
<th class="cmn" style="width: 140px;" onclick="searchFromGridTitle('VLTN_ARTCL', this.innerText, 'match', 'part');">위반항목</th>
|
||||
<th class="cmn" style="width: 160px;" onclick="searchFromGridTitle('CRDN_STDG_NM', this.innerText, 'match', 'part');">단속법정동</th>
|
||||
<th class="cmn" style="width: 280px;" onclick="searchFromGridTitle('CRDN_PLC', this.innerText, 'match', 'part');">단속장소</th>
|
||||
<th class="bpv" style="width: 280px;" onclick="searchFromGridTitle('DTL_CRDN_PLC', this.innerText, 'match', 'part');">상세단속장소</th>
|
||||
<th class="cmn" style="width: 120px;" onclick="searchFromGridTitle('FFNLG_AMT', this.innerText, 'match', 'part');">과태료금액</th>
|
||||
<th class="cmn" style="width: 120px;" onclick="searchFromGridTitle('ADVNTCE_AMT', this.innerText, 'match', 'part');">사전통지금액</th>
|
||||
<th class="cmn" style="width: 160px;" onclick="searchFromGridTitle('CRDN_STTS_CD', this.innerText, 'codeValue', 'FIM010');">처리상태</th>
|
||||
<th class="pvs" style="width: 140px;" onclick="searchFromGridTitle('CRDN_SPAREA_CD', this.innerText, 'codeValue', 'FIM007');">단속특별구역</th>
|
||||
<th class="eca" style="width: 140px;" onclick="searchFromGridTitle('USE_FUEL_CD', this.innerText, 'codeValue', 'LVS005');">사용연료</th>
|
||||
<th class="dpv" style="width: 140px;" onclick="searchFromGridTitle('PRK_PSBLTY_RSLT_CD', this.innerText, 'codeValue', 'FIM034');">주차가능여부</th>
|
||||
<th class="cmn" style="width: 100px;" onclick="searchFromGridTitle('ZIP', this.innerText, 'match', 'part');">우편번호</th>
|
||||
<th class="cmn" style="width: 280px;" onclick="searchFromGridTitle('ADDR', this.innerText, 'match', 'part');">주소</th>
|
||||
<th class="cmn" style="width: 320px;" onclick="searchFromGridTitle('DTL_ADDR', this.innerText, 'match', 'part');">상세주소</th>
|
||||
<th class="cmn" style="width: 180px;">등록일시</th>
|
||||
<th class="cmn" style="width: 140px;">등록사용자</th>
|
||||
<th class="cmn" style="width: 180px;">수정일시</th>
|
||||
<th class="cmn" style="width: 140px;">수정사용자</th>
|
||||
<th class="cmn dummy-th"></th>
|
||||
</template>
|
||||
<template id="${infoPrefix}Row--${pageName}">
|
||||
<tr data-key="{CRDN_ID}">
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{ROW_NUM}</td>
|
||||
<td class="cmn text-center"><input type="checkbox" class="form-check-input" name="gridCheckbox" value="{CRDN_ID}" onchange="pageObject['${pageName}'].control.select('{CRDN_ID}', this.checked);" /></td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{TASK_SE_NM}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{CVLCPT_APLY_NO}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{CVLCPT_RCPT_NO}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{CVLCPT_RCPT_YMD}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{CVLCPT_PRCS_PIC_NM}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{CVLCPT_PRCS_NM}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{CRDN_YMD_TM}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{VHRNO}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{RTPYR_SE_NM}</td>
|
||||
<td class="cmn text-center privacy-cell" onclick="{onclick}" ondblclick="{ondblclick}">
|
||||
<span>{RTPYR_NO}</span>
|
||||
<span>*************</span>
|
||||
</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{RTPYR_NM}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{VLTN_ARTCL}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{CRDN_STDG_NM}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{CRDN_PLC}</td>
|
||||
<td class="bpv text-start" onclick="{onclick}" ondblclick="{ondblclick}">{DTL_CRDN_PLC}</td>
|
||||
<td class="cmn text-end" onclick="{onclick}" ondblclick="{ondblclick}">{FFNLG_AMT}</td>
|
||||
<td class="cmn text-end" onclick="{onclick}" ondblclick="{ondblclick}">{ADVNTCE_AMT}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{CRDN_STTS_NM}</td>
|
||||
<td class="pvs text-center" onclick="{onclick}" ondblclick="{ondblclick}">{CRDN_SPAREA_NM}</td>
|
||||
<td class="eca text-center" onclick="{onclick}" ondblclick="{ondblclick}">{USE_FUEL_NM}</td>
|
||||
<td class="dpv text-center" onclick="{onclick}" ondblclick="{ondblclick}">{PRK_PSBLTY_RSLT_NM}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{ZIP}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{ADDR}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{DTL_ADDR}</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}">{MDFCN_DT}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{MDFR_NM}</td>
|
||||
<td class="cmn dummy-td"></td>
|
||||
</tr>
|
||||
</template>
|
||||
<template id="${infoPrefix}NotFound--${pageName}">
|
||||
<tr class="bpv">
|
||||
<td valign="top" colspan="31" class="dataTables_empty text-center">${prefixName} 정보를 찾지 못했습니다.</td>
|
||||
</tr>
|
||||
<tr class="dpv">
|
||||
<td valign="top" colspan="31" class="dataTables_empty text-center">${prefixName} 정보를 찾지 못했습니다.</td>
|
||||
</tr>
|
||||
<tr class="eca">
|
||||
<td valign="top" colspan="31" class="dataTables_empty text-center">${prefixName} 정보를 찾지 못했습니다.</td>
|
||||
</tr>
|
||||
<tr class="pvs">
|
||||
<td valign="top" colspan="31" class="dataTables_empty text-center">${prefixName} 정보를 찾지 못했습니다.</td>
|
||||
</tr>
|
||||
<tr class="pes">
|
||||
<td valign="top" colspan="31" class="dataTables_empty text-center">${prefixName} 정보를 찾지 못했습니다.</td>
|
||||
</tr>
|
||||
</template>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- DataTables(그리드) -->
|
||||
</div> <!-- <div class="card wrapper-list"> -->
|
||||
</div> <!-- <div class="container-xxl flex-grow-1 px-0"> -->
|
||||
<!-- / Content -->
|
||||
|
||||
<div class="content-backdrop fade"></div>
|
||||
</div>
|
||||
<!-- / inner page html <div class="content-wrapper"> -->
|
||||
|
||||
<script>
|
||||
/**************************************************************************
|
||||
* Global Variable
|
||||
**************************************************************************/
|
||||
pageObject["${pageName}"] = {};
|
||||
|
||||
// 공통 코드
|
||||
var FIM004 = new CommonCodes(${FIM004}, true); // 주정차위반 내역 코드
|
||||
var FIM005 = new CommonCodes(${FIM005}, true); // 전용차로위반 내역 코드
|
||||
var FIM006 = new CommonCodes(${FIM006}, true); // 장애인주차위반 내역 코드
|
||||
var FIM061 = new CommonCodes(${FIM061}, true); // 전기차 충전구역 및 충전방해 위반 코드
|
||||
var FIM064 = new CommonCodes(${FIM064}, true); // 화물자동차 밤샘주차 위반 코드
|
||||
|
||||
/**************************************************************************
|
||||
* script 진입
|
||||
**************************************************************************/
|
||||
$(document).ready(function() {
|
||||
// pageObject
|
||||
let $P = pageObject["${pageName}"];
|
||||
|
||||
// FormFields
|
||||
$P.formFields = new FimsFormFields("#frmSearch--${pageName}");
|
||||
|
||||
/**************************************************************************
|
||||
* DatasetControl
|
||||
**************************************************************************/
|
||||
$P.control = new DatasetControl({
|
||||
prefix: "advntceTrgt"
|
||||
, prefixName: "사전통지 발송 대상"
|
||||
, keymapper: info => info ? info.CRDN_ID : ""
|
||||
, dataGetter: obj => obj.${infoPrefix}List
|
||||
, appendData: true
|
||||
, infoSize: "xl"
|
||||
, formats: {
|
||||
CVLCPT_RCPT_YMD: dateFormat
|
||||
, CRDN_YMD_TM: datetimeFormat
|
||||
, FFNLG_AMT: numberFormat
|
||||
, ADVNTCE_AMT: numberFormat
|
||||
, REG_DT: datetimeFormat
|
||||
, MDFCN_DT: datetimeFormat
|
||||
}
|
||||
});
|
||||
// $P.control 설정
|
||||
$P.control.defaultFetchSize = FETCH_XS; // 1 페이지당 조회되는 자료 건수 index.jsp에서 확인 FETCH_XS = 30
|
||||
$P.control.query = { pageNum : 1, fetchSize : $P.control.defaultFetchSize };
|
||||
$P.control.beforeCurrent = null;
|
||||
|
||||
|
||||
/**************************************************************************
|
||||
* DatasetControl 이벤트
|
||||
**************************************************************************/
|
||||
// Dataset 변경 이벤트
|
||||
$P.control.onDatasetChange = (obj, option) => {
|
||||
$P.renderList(obj.${infoPrefix}Total, option);
|
||||
|
||||
$("#paging--${pageName}").setPagingInfo({
|
||||
list: $P.control.dataset
|
||||
, prefix: "paging--${pageName}"
|
||||
, start: obj.${infoPrefix}Start
|
||||
, totalSize: obj.${infoPrefix}Total
|
||||
, fetchSize: obj.${infoPrefix}Fetch
|
||||
, func: "pageObject['${pageName}'].control.load({index})"
|
||||
});
|
||||
|
||||
|
||||
};
|
||||
|
||||
// 현재 선택 자료 변경 이벤트
|
||||
$P.control.onCurrentChange = (item) => {
|
||||
if (!item) return;
|
||||
|
||||
let key = item.data.CRDN_ID;
|
||||
|
||||
$("#tbody--${pageName}").setCurrentRow(key);
|
||||
};
|
||||
|
||||
// 선택(체크) 변경 이벤트
|
||||
$P.control.onSelectionChange = (selected) => {
|
||||
let ${infoPrefix}List = $P.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()));
|
||||
});
|
||||
|
||||
// 선택 대상 등록 버튼
|
||||
$("#btnCreateSlctnTrgtInfo--${pageName}").prop("disabled", keys.length < 1);
|
||||
|
||||
// DataTables(그리드) 전체 선택(checkbox)
|
||||
if (keys.length < 1) {
|
||||
$("#DataTables_Table_0--${pageName} th input[type='checkbox']").prop("checked", false); // 체크 해제
|
||||
} else if (keys.length == ${infoPrefix}List.length) {
|
||||
$("#DataTables_Table_0--${pageName} th input[type='checkbox']").prop("checked", true); // 체크 설정
|
||||
} else {
|
||||
$("#DataTables_Table_0--${pageName} th input[type='checkbox']").prop("checked", false); // 체크 해제
|
||||
}
|
||||
};
|
||||
|
||||
// 사전통지 발송 등록 dialog
|
||||
$P.control.getInfo = (params) => {
|
||||
if (!params) return;
|
||||
|
||||
let dialogTitle = "";
|
||||
|
||||
if (params.callPurpose == "create") {
|
||||
dialogTitle = $P.control.prefixName + " 등록";
|
||||
} else if (params.callPurpose == "update") {
|
||||
dialogTitle = $P.control.prefixName + " 수정";
|
||||
} else {
|
||||
dialogTitle = $P.control.prefixName + " 정보";
|
||||
}
|
||||
|
||||
ajax.get({
|
||||
url: wctx.url("/" + params.taskSeCd + "${infoPrefixUrl}" + "/060/info.do") + "?openerPageName=${pageName}"
|
||||
, data: params || {}
|
||||
, success: resp => {
|
||||
dialog.open({
|
||||
id: $P.control.prefixed("Dialog--${pageName}")
|
||||
, title: dialogTitle
|
||||
, content: resp
|
||||
, size: $P.control.infoSize
|
||||
, onClose: () => { $P.fnRefreshList(); }
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* DataTables 이벤트
|
||||
**************************************************************************/
|
||||
// DataTables에 click, dbclick 이벤트
|
||||
$P.renderList = (totalSize, option) => {
|
||||
let ${infoPrefix}List = $P.control.dataset;
|
||||
let empty = ${infoPrefix}List.empty;
|
||||
let clsForTask = $("#frmSearch--${pageName} input[name='taskSeCd']:checked").val().toLowerCase(); // 소문자
|
||||
|
||||
// 업무별 그리드 td
|
||||
let foundContent = document.getElementById("${infoPrefix}Row--${pageName}").content;
|
||||
let foundTr = $(foundContent).find("tr")[0].cloneNode(false);
|
||||
let foundTds = $(foundContent).find("." + clsForTask + ",.cmn");
|
||||
|
||||
foundTds.each(function() {
|
||||
foundTr.appendChild(this.cloneNode(true));
|
||||
});
|
||||
|
||||
//
|
||||
let replacer = (str, dataItem) => str
|
||||
.replace(/{onclick}/gi, "pageObject['${pageName}'].control.setCurrent('" + dataItem.getValue("CRDN_ID") + "');")
|
||||
.replace(/{ondblclick}/gi, "pageObject['${pageName}'].getTotalInfo('" + dataItem.getValue("CRDN_ID") + "');");
|
||||
|
||||
let trs = empty ? [document.getElementById("${infoPrefix}NotFound--${pageName}").content.querySelector("." + clsForTask + ",.cmn").outerHTML]
|
||||
: ${infoPrefix}List.inStrings(foundTr.outerHTML, replacer);
|
||||
|
||||
let noMore = (${infoPrefix}List.length >= totalSize);
|
||||
let initScroll = ($P.control.query.pageNum < 2);
|
||||
if(option != null && option.reloaded){
|
||||
initScroll = false;
|
||||
}
|
||||
|
||||
$("#table-responsive--${pageName}")[0].changeContent(trs.join(), initScroll, noMore);
|
||||
|
||||
|
||||
// checkbox 체크 해제
|
||||
$("#DataTables_Table_0--${pageName} th input[type='checkbox']").prop("checked", false);
|
||||
|
||||
//보안모드
|
||||
fn_securityModeToggle($("#securityMode--top").is(":checked"));
|
||||
}
|
||||
|
||||
// DataTables에 스크롤이 맨 밑으로 이동했을 때 이벤트
|
||||
$P.scrollDataList = () => {
|
||||
|
||||
|
||||
$P.control.load($P.control.query.pageNum + 1);
|
||||
}
|
||||
|
||||
// DataTables에 더블 클릭시 개별총정보 dialog
|
||||
$P.getTotalInfo = (crdnId) => {
|
||||
if (typeof crdnId == "undefined" || crdnId == null || crdnId == "") return;
|
||||
|
||||
let params = {
|
||||
callControlName: "pageObject['${pageName}'].control"
|
||||
, sggCd: $P.control.dataset.getValue("SGG_CD")
|
||||
, taskSeCd: $P.control.dataset.getValue("TASK_SE_CD")
|
||||
, crdnId: crdnId
|
||||
}
|
||||
|
||||
ajax.get({
|
||||
url: wctx.url("/sprt/sprt02/010/main.do")
|
||||
, data: params
|
||||
, success: resp => {
|
||||
dialog.open({
|
||||
id: "totalInfoMainDialog"
|
||||
, title: "개별총정보"
|
||||
, content: resp
|
||||
, size: "xxl"
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 사용자 함수(function)
|
||||
**************************************************************************/
|
||||
// 검색 자료 재조회
|
||||
$P.fnRefreshList = () => {
|
||||
|
||||
$P.control.query.crdnIds = null;
|
||||
|
||||
$P.control.reload({all : true});
|
||||
}
|
||||
|
||||
// 사용자검색 callback
|
||||
$P.callbackFindUser = (userId, userNm) => {
|
||||
$("#schRgtrCd--${pageName}").val(userId); // 사용자 ID
|
||||
$("#schRgtrNm--${pageName}").val(userNm); // 사용자 명
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 버튼 clickEvent
|
||||
**************************************************************************/
|
||||
// 업무 구분 변경
|
||||
$P.fnResetAndChangeBiz = (taskSeCd) => {
|
||||
// 업무 구분 코드
|
||||
if (typeof taskSeCd == "undefined" || taskSeCd == null || taskSeCd == "") {
|
||||
taskSeCd = $("#layout-navbar input[name='taskSeCd']:checked").val();
|
||||
}
|
||||
|
||||
// 초기 기본 설정
|
||||
$P.initForm(taskSeCd);
|
||||
// 업무 구분별 설정
|
||||
$P.setTask(taskSeCd);
|
||||
|
||||
// dataset 초기화
|
||||
$P.control.dataset.clear();
|
||||
}
|
||||
|
||||
// 사용자검색 버튼 클릭 이벤트
|
||||
$P.fnGetFindUser = () => {
|
||||
let params = {
|
||||
openerPageName: "${pageName}"
|
||||
, callbackFuncName: "pageObject['${pageName}']['callbackFindUser']"
|
||||
}
|
||||
|
||||
ajax.get({
|
||||
url: wctx.url("/user/user02/010/main.do") + "?openerPageName=${pageName}"
|
||||
, data: params || {}
|
||||
, success: resp => {
|
||||
dialog.open({
|
||||
id: "userDialog--${pageName}"
|
||||
, title: "사용자 검색"
|
||||
, content: resp
|
||||
, size: "lg"
|
||||
, init: () => { setDialogZindex(); }
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// 검색 버튼 이벤트
|
||||
$P.fnSearchList = () => {
|
||||
// 검색조건
|
||||
$P.control.query = $P.formFields.get();
|
||||
$P.control.query.fetchSize = $P.control.defaultFetchSize; // 한번에 조회되는 자료 건수
|
||||
|
||||
// 업무 구분 코드(TASK_SE_CD) 에 따른 검색 조건 설정
|
||||
let taskSeCd = $("#frmSearch--${pageName} input[name='taskSeCd']:checked").val();
|
||||
if (taskSeCd == "BPV" || taskSeCd == "PVS") { // 전용차로위반 , 주정차위반 과태료는 사전부과 후 의견제출 접수도 사전통지 대상
|
||||
$P.control.query.crdnSttsCdFrom = "21"; // 단속 처리 상태(FIM010) 시작 - 21: 납부자 등록
|
||||
$P.control.query.crdnSttsCdTo = "31"; // 단속 처리 상태(FIM010) 종료 - 31: 의견제출 접수
|
||||
} else {
|
||||
$P.control.query.crdnSttsCdFrom = "21"; // 단속 처리 상태(FIM010) 시작 - 21: 납부자 등록
|
||||
$P.control.query.crdnSttsCdTo = "23"; // 단속 처리 상태(FIM010) 종료 - 23: 사전부과
|
||||
}
|
||||
$P.control.query.delYn = "N"; // 삭제 여부
|
||||
|
||||
$P.control.load(1);
|
||||
}
|
||||
|
||||
// 엑셀 버튼 이벤트
|
||||
$P.fnExcel = () => {
|
||||
if ($P.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)")
|
||||
, getCellDefsForPrivacyCell);
|
||||
|
||||
$P.control.query.cellDefs = cellDefs;
|
||||
|
||||
$P.control.download();
|
||||
}
|
||||
|
||||
// 선택 발송대상 등록 버튼 이벤트
|
||||
$P.fnCreateSlctnTrgtInfo = (title) => {
|
||||
// 선택 자료
|
||||
let selected = $P.control.dataset.getKeys("selected");
|
||||
|
||||
if (selected.length < 1) return;
|
||||
|
||||
// 파라미터 설정
|
||||
let params = $P.control.query; // 검색 조건
|
||||
params.callPurpose = "create"; // 호출 용도 (등록)
|
||||
params.crdnIds = selected.join(","); // crdnIds
|
||||
params.sndngSeCd = "02"; // 발송 구분 코드(FIM047) - 02 사전통지서
|
||||
params.rsndYn = "N"; // 재발송 여부
|
||||
params.delYn = "N"; // 삭제 여부
|
||||
|
||||
$P.control.getInfo(params);
|
||||
}
|
||||
|
||||
// 전체 발송대상 등록 버튼 이벤트
|
||||
$P.fnCreateWholTrgtInfo = (title) => {
|
||||
if ($P.control.dataset.empty) {
|
||||
dialog.alert({
|
||||
content: "검색된 자료가 없습니다."
|
||||
, onOK: () => { }
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
// 파라미터 설정
|
||||
let params = $P.control.query; // 검색 조건
|
||||
params.callPurpose = "create"; // 호출 용도 (등록)
|
||||
params.sndngSeCd = "02"; // 발송 구분 코드 - 02 사전통지서
|
||||
params.rsndYn = "N"; // 재발송 여부
|
||||
params.delYn = "N"; // 삭제 여부
|
||||
|
||||
$P.control.getInfo(params);
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 초기 셋팅
|
||||
**************************************************************************/
|
||||
// 이벤트 설정
|
||||
$P.setEvent = () => {
|
||||
// 기본 버튼 이벤트
|
||||
$("#btnReset--${pageName}").on("click", () => $P.fnResetAndChangeBiz()); // 초기화
|
||||
$("#btnSearch--${pageName}").on("click", () => $P.fnSearchList()); // 검색
|
||||
$("#btnExcel--${pageName}").on("click", () => $P.fnExcel()); // 엑셀
|
||||
$("#btnFindUser--${pageName}").on("click", () => $P.fnGetFindUser()); // 사용자 검색
|
||||
|
||||
// 동적검색에서 엔터(Enter) 키를 누르면 검색한다.
|
||||
$("#term--${pageName}").onEnterPress(function() {
|
||||
$P.fnSearchList();
|
||||
});
|
||||
|
||||
// form-date 항목에서 키보드로 입력시 날짜 포맷팅 적용
|
||||
$("#frmSearch--${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);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// 업무 버튼 이벤트
|
||||
$("#btnCreateSlctnTrgtInfo--${pageName}").on("click", function() {
|
||||
$P.fnCreateSlctnTrgtInfo($(this).attr("title")); // 선택 대상 감경부과 등록
|
||||
});
|
||||
$("#btnCreateWholTrgtInfo--${pageName}").on("click", function() {
|
||||
$P.fnCreateWholTrgtInfo($(this).attr("title")); // 전체 대상 감경부과 등록
|
||||
});
|
||||
|
||||
// DataTables width 변경 조정
|
||||
fnMakeResizableTable($("#table-responsive--${pageName}")[0]);
|
||||
|
||||
// DataTables 스크롤 이벤트 생성
|
||||
fnMakeScrollableTable($("#table-responsive--${pageName}")[0], $P.scrollDataList);
|
||||
}
|
||||
|
||||
// 초기 화면 설정
|
||||
$P.initForm = (taskSeCd) => {
|
||||
// 화면 초기화
|
||||
$("#frmSearch--${pageName}")[0].reset();
|
||||
|
||||
// input, select 초기화
|
||||
let searchForm = $("#frmSearch--${pageName}");
|
||||
searchForm.find("input[type='radio']").not("[name='taskSeCd']").prop("checked", false);
|
||||
searchForm.find("input[type='checkbox']").prop("checked", false);
|
||||
searchForm.find("input[type='text']").val("");
|
||||
searchForm.find("input[type='hidden']").val("");
|
||||
searchForm.find("select").each(function() { $(this).find("option:eq(0)").prop("selected", true); });
|
||||
|
||||
// 최고 관리자 경우 업무구분을 선택할 수 있도록 하자.
|
||||
$("#frmSearch--${pageName} input[name='taskSeCd']").each(function(i) {
|
||||
$(this).prop("disabled", "true");
|
||||
});
|
||||
|
||||
// 기본 데이터 설정
|
||||
$("#sggCd--${pageName}").val("${sggCd}"); // 시군구 코드
|
||||
$("#frmSearch--${pageName} input[name='taskSeCd'][value='" + taskSeCd + "']").prop("checked", true); // 업무 구분 코드
|
||||
initDatepicker("frmSearch--${pageName}"); // 달력 초기화
|
||||
$("#schCrdnYmdFrom--${pageName}").datepicker("setDate", DateUtil.getDateDay(-7).date);
|
||||
$("#schCrdnYmdTo--${pageName}").datepicker("setDate", new Date());
|
||||
$("#byOutput--${pageName}").val("동적 검색"); // 동적 검색
|
||||
$("#schRgtrNm--${pageName}").prop("readonly", true); // 사용자 이름
|
||||
}
|
||||
|
||||
// 업무 구분별 설정
|
||||
$P.setTask = (taskSeCd) => {
|
||||
// 업무구분에 따른 URL 설정
|
||||
$P.control.urls.load = wctx.url("/" + taskSeCd + "${infoPrefixUrl}" + "/050/list.do"); // 조회
|
||||
|
||||
// 업무별 조회조건
|
||||
renderForTask("frmSearch--${pageName}", taskSeCd.toLowerCase());
|
||||
|
||||
// 업무에 따른 위반 내용
|
||||
let vltnCode = [];
|
||||
if (taskSeCd == "PVS") { // 주정차 위반
|
||||
vltnCode = FIM004.list();
|
||||
} else if (taskSeCd == "BPV") { // 전용차로 위반
|
||||
vltnCode = FIM005.list();
|
||||
} else if (taskSeCd == "DPV") { // 장애인 전용
|
||||
vltnCode = FIM006.list();
|
||||
} else if (taskSeCd == "ECA") { // 전기차 주차 위반
|
||||
vltnCode = FIM061.list();
|
||||
} else if (taskSeCd == "PES") { // 밤샘 주차 위반
|
||||
vltnCode = FIM064.list();
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
|
||||
// 위반 항목
|
||||
$("#schVltnCd--${pageName}").empty();
|
||||
$("#schVltnCd--${pageName}").append("<option value=''>" + "전체" + "</option>");
|
||||
$(vltnCode).each(function(index, item) {
|
||||
$("#schVltnCd--${pageName}").append("<option value='" + vltnCode[index].code +"'>" + vltnCode[index].value + "</option>");
|
||||
})
|
||||
|
||||
// 업무별 그리드 th
|
||||
let colContent = document.getElementById("${infoPrefix}Col--${pageName}").content;
|
||||
let cols = $(colContent).find("." + taskSeCd.toLowerCase() + ",.cmn");
|
||||
let colsOuterHTML = "";
|
||||
|
||||
cols.each(function() {
|
||||
colsOuterHTML += this.outerHTML;
|
||||
});
|
||||
$("#table-responsive--${pageName}")[0].changeColumn(colsOuterHTML);
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 최초 실행 함수
|
||||
**************************************************************************/
|
||||
// 1. 이벤트 설정
|
||||
$P.setEvent();
|
||||
|
||||
// 2. 초기 설정 및 업무 구분 변경
|
||||
$P.fnResetAndChangeBiz($("#layout-navbar input[name='taskSeCd']:checked").val());
|
||||
|
||||
// 3. 보안모드
|
||||
fn_securityModeToggle($("#securityMode--top").is(":checked"));
|
||||
});
|
||||
|
||||
</script>
|
||||
@ -1,436 +0,0 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
|
||||
<c:set var="prefixName" scope="request">사전통지 발송 대상 상세 정보</c:set>
|
||||
|
||||
<!-- inner page html -->
|
||||
<div class="wrapper-pop">
|
||||
<!-- Content -->
|
||||
<div class="container flex-grow-1 px-0">
|
||||
|
||||
<!-- Page Body -->
|
||||
<div class="card">
|
||||
<!-- 입력 영역 -->
|
||||
<form id="frmEdit--${pageName}" name="frmEdit">
|
||||
<div class="row g-1">
|
||||
<!-- 총 건수 -->
|
||||
<div class="col-md-12 text-end px-2">
|
||||
<label class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">총건수 / 총금액</label>
|
||||
<input type="text" class="form-control w-px-80 text-end" id="tnocs--${pageName}" name="tnocs" data-fmt-type="number" readonly />
|
||||
<input type="text" class="form-control w-px-140 text-end" id="gramt--${pageName}" name="gramt" data-fmt-type="number" readonly />
|
||||
</div>
|
||||
<!-- 문서 번호 -->
|
||||
<div class="col-md-4">
|
||||
<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" autocomplete="off" />
|
||||
</div>
|
||||
<!-- 발송 일자 -->
|
||||
<div class="col-md-4">
|
||||
<label for="sndngYmd--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end required">발송일자</label>
|
||||
<input type="text" class="form-control form-date" id="sndngYmd--${pageName}" name="sndngYmd"
|
||||
data-fmt-type="day" title="날짜 선택" maxlength="10" required />
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
</div>
|
||||
<!-- 발송 종료 일자 -->
|
||||
<div class="col-md-4" id="divSndngEndYmd--${pageName}">
|
||||
<label for="sndngEndYmd--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">납기일자</label>
|
||||
<input type="text" class="form-control form-date" id="sndngEndYmd--${pageName}" name="sndngEndYmd"
|
||||
data-fmt-type="day" title="날짜 선택" maxlength="10" />
|
||||
<button type="button" id="btnSndngEndYmd--${pageName}" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
</div>
|
||||
<!-- 제목 명 -->
|
||||
<div class="col-md-12">
|
||||
<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" autocomplete="off" />
|
||||
</div>
|
||||
<!-- 기타 내용 -->
|
||||
<div class="col-md-12">
|
||||
<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" autocomplete="off"></textarea>
|
||||
</div>
|
||||
</div> <!-- <div class="row g-1"> -->
|
||||
</form>
|
||||
<!-- 입력 영역 -->
|
||||
|
||||
<!-- 업무 버튼 및 건수 표시 -->
|
||||
<div>
|
||||
<span class="container-page-btn">
|
||||
<!-- 업무 버튼 -->
|
||||
<span class="container-window-btn-right">
|
||||
<button type="button" class="btn btn-primary w-px-120" id="btnSave--${pageName}" title="저장">
|
||||
저장
|
||||
</button>
|
||||
</span>
|
||||
</span>
|
||||
</div> <!-- 업무 버튼 및 건수 표시 -->
|
||||
|
||||
<!-- DataTables(그리드) -->
|
||||
<div class="card-datatable text-nowrap">
|
||||
<div class="dataTables_wrapper dt-bootstrap5 no-footer" id="DataTables_Table_0_wrapper--${pageName}">
|
||||
<div class="table-responsive ox-scroll oy-scroll h-px-300" id="table-responsive--${pageName}">
|
||||
<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">
|
||||
<tr id="theadTr--${pageName}"
|
||||
data-by="by--${pageName}" data-by-output="byOutput--${pageName}" data-main-option="mainOption--${pageName}" data-sub-option="subOption--${pageName}">
|
||||
<th class="cmn" style="width: 72px;">No.</th>
|
||||
<th class="cmn" style="width: 180px;">민원신청번호</th>
|
||||
<th class="cmn" style="width: 180px;">민원접수번호</th>
|
||||
<th class="cmn" style="width: 120px;">민원접수일자</th>
|
||||
<th class="cmn" style="width: 160px;">민원처리결과</th>
|
||||
<th class="cmn" style="width: 180px;">단속일시</th>
|
||||
<th class="cmn" style="width: 140px;">차량번호</th>
|
||||
<th class="cmn" style="width: 160px;">위반항목</th>
|
||||
<th class="cmn" style="width: 160px;">단속법정동</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: 120px;">처리상태</th>
|
||||
<th class="cmn" style="width: 200px;">납부자명</th>
|
||||
<th class="cmn" style="width: 120px;">납부자생일</th>
|
||||
<th class="cmn" style="width: 100px;">우편번호</th>
|
||||
<th class="cmn" style="width: 280px;">주소</th>
|
||||
<th class="cmn" style="width: 320px;">상세주소</th>
|
||||
<th class="cmn" style="width: 180px;">등록일시</th>
|
||||
<th class="cmn" style="width: 140px;">등록사용자</th>
|
||||
<th class="cmn" style="width: 180px;">수정일시</th>
|
||||
<th class="cmn" style="width: 140px;">수정사용자</th>
|
||||
<th class="cmn dummy-th"></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="tbody--${pageName}">
|
||||
</tbody>
|
||||
<template id="${infoPrefix}Row--${pageName}">
|
||||
<tr data-key="{CRDN_ID}">
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{ROW_NUM}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{CVLCPT_APLY_NO}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{CVLCPT_RCPT_NO}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{CVLCPT_RCPT_YMD}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{CVLCPT_PRCS_NM}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{CRDN_YMD_TM}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{VHRNO}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{VLTN_ARTCL}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{CRDN_STDG_NM}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{CRDN_PLC}</td>
|
||||
<td class="cmn text-end" onclick="{onclick}" ondblclick="{ondblclick}">{FFNLG_AMT}</td>
|
||||
<td class="cmn text-end" onclick="{onclick}" ondblclick="{ondblclick}">{ADVNTCE_AMT}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{CRDN_STTS_NM}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{RTPYR_NM}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{RTPYR_BRDT_MASK}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{ZIP}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{ADDR}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{DTL_ADDR}</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}">{MDFCN_DT}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{MDFR_NM}</td>
|
||||
<td class="cmn dummy-td"></td>
|
||||
</tr>
|
||||
</template>
|
||||
<template id="${infoPrefix}NotFound--${pageName}">
|
||||
<tr class="odd">
|
||||
<td valign="top" colspan="23" class="dataTables_empty text-center">${prefixName} 정보를 찾지 못했습니다.</td>
|
||||
</tr>
|
||||
</template>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div> <!-- DataTables(그리드) -->
|
||||
</div> <!-- <div class="card"> -->
|
||||
<!-- Page Body -->
|
||||
|
||||
</div> <!-- <div class="container flex-grow-1 px-0"> -->
|
||||
<!-- Content -->
|
||||
</div>
|
||||
<!-- / inner page html <div class="wrapper-pop"> -->
|
||||
|
||||
<script>
|
||||
/**************************************************************************
|
||||
* Global Variable
|
||||
**************************************************************************/
|
||||
pageObject["${pageName}"] = {};
|
||||
|
||||
/**************************************************************************
|
||||
* script 진입
|
||||
**************************************************************************/
|
||||
$(document).ready(function() {
|
||||
// pageObject
|
||||
let $P = pageObject["${pageName}"];
|
||||
|
||||
// infoDialog 호출 용도(view 조회(편집불가), create 등록, update 수정)
|
||||
$P.callPurpose = "${callPurpose}";
|
||||
// FormFields
|
||||
$P.formFields = new FimsFormFields("#frmEdit--${pageName}");
|
||||
// main 의 검색 조건을 그대로 유지
|
||||
$P.mainQuery = ${mainQuery};
|
||||
// 사전통지 일자
|
||||
$P.advntceYmdInfo = ${advntceYmdInfo};
|
||||
|
||||
/**************************************************************************
|
||||
* DatasetControl
|
||||
**************************************************************************/
|
||||
$P.control = new DatasetControl({
|
||||
prefix: "advntceTrgt"
|
||||
, prefixName: "사전통지 발송 대상"
|
||||
, keymapper: info => info ? info.CRDN_ID : ""
|
||||
, dataGetter: obj => obj.${infoPrefix}List
|
||||
, appendData: true
|
||||
, formats: {
|
||||
TNOCS: numberFormat
|
||||
, GRAMT: numberFormat
|
||||
, CVLCPT_RCPT_YMD: dateFormat
|
||||
, CRDN_YMD_TM: datetimeFormat
|
||||
, FFNLG_AMT: numberFormat
|
||||
, ADVNTCE_AMT: numberFormat
|
||||
, REG_DT: datetimeFormat
|
||||
, MDFCN_DT: datetimeFormat
|
||||
}
|
||||
});
|
||||
// $P.control 설정
|
||||
$P.control.defaultFetchSize = FETCH_XS; // 1 페이지당 조회되는 자료 건수 index.jsp에서 확인 FETCH_XS = 30
|
||||
$P.control.query = { pageNum : 1, fetchSize : $P.control.defaultFetchSize };
|
||||
$P.control.beforeCurrent = null;
|
||||
|
||||
|
||||
/**************************************************************************
|
||||
* DatasetControl 이벤트
|
||||
**************************************************************************/
|
||||
// Dataset 변경 이벤트
|
||||
$P.control.onDatasetChange = (obj, option) => {
|
||||
$P.renderList(obj.${infoPrefix}Total, option);
|
||||
|
||||
$("#paging--${pageName}").setPagingInfo({
|
||||
list: $P.control.dataset
|
||||
, prefix: "paging--${pageName}"
|
||||
, start: obj.${infoPrefix}Start
|
||||
, totalSize: obj.${infoPrefix}Total
|
||||
, fetchSize: obj.${infoPrefix}Fetch
|
||||
, func: "pageObject['${pageName}'].control.load({index})"
|
||||
});
|
||||
|
||||
|
||||
};
|
||||
|
||||
// 현재 선택 자료 변경 이벤트
|
||||
$P.control.onCurrentChange = (item) => {
|
||||
if (!item) return;
|
||||
|
||||
let key = item.data.CRDN_ID;
|
||||
|
||||
$("#tbody--${pageName}").setCurrentRow(key);
|
||||
};
|
||||
|
||||
// 저장 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
|
||||
, init: () => { setDialogZindex(); }
|
||||
, onOK: () => { }
|
||||
});
|
||||
|
||||
if (resp.saved) {
|
||||
dialog.close($P.control.prefix + "Dialog--${openerPageName}");
|
||||
}
|
||||
}
|
||||
|
||||
// 저장
|
||||
$P.control.save = (info) => {
|
||||
if (!info) return;
|
||||
|
||||
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)
|
||||
});
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* DataTables 이벤트
|
||||
**************************************************************************/
|
||||
// DataTables에 click, dbclick 이벤트
|
||||
$P.renderList = (totalSize, option) => {
|
||||
let ${infoPrefix}List = $P.control.dataset;
|
||||
let empty = ${infoPrefix}List.empty;
|
||||
|
||||
let trs = empty ?
|
||||
[document.getElementById("${infoPrefix}NotFound--${pageName}").innerHTML] : <%-- from template#${infoPrefix}NotFound --%>
|
||||
${infoPrefix}List.inStrings(
|
||||
document.getElementById("${infoPrefix}Row--${pageName}").innerHTML, <%-- from template#${infoPrefix}Row --%>
|
||||
(str, dataItem) => str
|
||||
.replace(/{onclick}/gi, "pageObject['${pageName}'].control.setCurrent('" + dataItem.getValue("CRDN_ID") + "');")
|
||||
.replace(/{ondblclick}/gi, "pageObject['${pageName}'].getTotalInfo('" + dataItem.getValue("CRDN_ID") + "');")
|
||||
);
|
||||
|
||||
let noMore = (${infoPrefix}List.length >= totalSize);
|
||||
let initScroll = ($P.control.query.pageNum < 2);
|
||||
if(option != null && option.reloaded){
|
||||
initScroll = false;
|
||||
}
|
||||
$("#table-responsive--${pageName}")[0].changeContent(trs.join(), initScroll, noMore);
|
||||
|
||||
|
||||
//보안모드
|
||||
fn_securityModeToggle($("#securityMode--top").is(":checked"));
|
||||
}
|
||||
|
||||
// DataTables에 스크롤이 맨 밑으로 이동했을 때 이벤트
|
||||
$P.scrollDataList = () => {
|
||||
|
||||
|
||||
$P.control.load($P.control.query.pageNum + 1);
|
||||
}
|
||||
|
||||
// DataTables에 더블 클릭시 개별총정보 dialog
|
||||
$P.getTotalInfo = (crdnId) => {
|
||||
if (typeof crdnId == "undefined" || crdnId == null || crdnId == "") return;
|
||||
|
||||
let params = {
|
||||
callControlName: "pageObject['${pageName}'].control"
|
||||
, callPurpose: "view"
|
||||
, sggCd: $P.control.dataset.getValue("SGG_CD")
|
||||
, taskSeCd: $P.control.dataset.getValue("TASK_SE_CD")
|
||||
, crdnId: crdnId
|
||||
}
|
||||
|
||||
ajax.get({
|
||||
url: wctx.url("/sprt/sprt02/010/main.do")
|
||||
, data: params
|
||||
, success: resp => {
|
||||
dialog.open({
|
||||
id: "totalInfoMainDialog"
|
||||
, title: "개별총정보"
|
||||
, content: resp
|
||||
, size: "xxl"
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 사용자 함수(function)
|
||||
**************************************************************************/
|
||||
// 업무구분에 따른 URL 설정
|
||||
$P.fnSetURL = (taskSeCd) => {
|
||||
$P.control.urls.create = wctx.url("/" + taskSeCd + "${infoPrefixUrl}" + "/060/createList.do"); // 등록
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 버튼 clickEvent
|
||||
**************************************************************************/
|
||||
// 저장
|
||||
$P.fnSave = () => {
|
||||
// validate 확인
|
||||
if (!customValidate($("#frmEdit--${pageName}").find("input, select, textarea"))) return;
|
||||
|
||||
dialog.alert({
|
||||
content: "현재 " + $P.control.prefixName + " 정보를 저장하시겠습니까?"
|
||||
, init: () => { setDialogZindex(); }
|
||||
, onOK: () => {
|
||||
// 검색조건과 저장 파라미터 객체를 합친다.
|
||||
let params = $.extend({}, $P.mainQuery, $P.formFields.get());
|
||||
params.sndngRegSeCd = "01"; // 발송 등록 구분 코드(SNDNG_REG_SE_CD) - 01: 일괄
|
||||
params.rsndYn = "N"; // 재발송 여부
|
||||
params.delYn = "N"; // 삭제 여부
|
||||
|
||||
$P.control.save(params);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 초기 셋팅
|
||||
**************************************************************************/
|
||||
// 이벤트 설정
|
||||
$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);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// 부과 일자 변경 이벤트
|
||||
$("#sndngYmd--${pageName}").on("change", function() {
|
||||
let sndngYmd = $("#sndngYmd--${pageName}").val();
|
||||
$("#sndngEndYmd--${pageName}").val(addDate(sndngYmd, $P.advntceYmdInfo.ADVNTCE_DAY_CNT));
|
||||
});
|
||||
|
||||
// 업무 버튼 이벤트
|
||||
$("#btnSave--${pageName}").on("click", () => $P.fnSave()); // 저장
|
||||
|
||||
// DataTables width 변경 조정
|
||||
fnMakeResizableTable($("#table-responsive--${pageName}")[0]);
|
||||
|
||||
// DataTables 스크롤 이벤트 생성
|
||||
fnMakeScrollableTable($("#table-responsive--${pageName}")[0], $P.scrollDataList);
|
||||
|
||||
// DataTables 스크롤을 위해서 다이얼로그 화면이 생성된 후 Dataset을 설정한다.
|
||||
$("#${infoPrefix}Dialog--${openerPageName}").on("shown.bs.modal", function (e) {
|
||||
$P.control.setData({
|
||||
${infoPrefix}List: ${advntceTrgtList}
|
||||
, ${infoPrefix}Start: ${advntceTrgtStart}
|
||||
, ${infoPrefix}Fetch: ${advntceTrgtFetch}
|
||||
, ${infoPrefix}Total: ${advntceTrgtTotal}
|
||||
});
|
||||
|
||||
// 초기 데이터 설정
|
||||
$P.initData();
|
||||
});
|
||||
}
|
||||
|
||||
// 화면 초기 설정
|
||||
$P.initForm = () => {
|
||||
// 화면 초기화
|
||||
$("#frmEdit--${pageName}")[0].reset();
|
||||
|
||||
// 달력 초기화
|
||||
initDatepicker("frmEdit--${pageName}");
|
||||
$("#sndngYmd--${pageName}").datepicker("setDate", new Date());
|
||||
$("#sndngEndYmd--${pageName}").datepicker("setDate", new Date());
|
||||
}
|
||||
|
||||
// 초기 데이터 설정
|
||||
$P.initData = () => {
|
||||
// 총건수 / 총금액
|
||||
$("#tnocs--${pageName}").val(${advntceTrgtTotal});
|
||||
$("#gramt--${pageName}").val($P.control.dataset.getValue("GRAMT"));
|
||||
// 발송 일자 / 발송 종료 일자
|
||||
$("#sndngYmd--${pageName}").val($P.advntceYmdInfo.LEVY_YMD_MASK);
|
||||
$("#sndngEndYmd--${pageName}").val($P.advntceYmdInfo.DUDT_YMD_MASK);
|
||||
|
||||
// 제목
|
||||
let ttlNm = $P.control.dataset.getValue("TASK_SE_NM");
|
||||
if ($P.mainQuery.schVltnCd != null && $P.mainQuery.schVltnCd != "") { // 위반항목이 '전체'가 아니라면..
|
||||
ttlNm = ttlNm + " " + $P.control.dataset.getValue("VLTN_ARTCL");
|
||||
}
|
||||
$("#ttlNm--${pageName}").val(ttlNm + " " + "사전통지");
|
||||
|
||||
// 업무구분에 따른 URL 설정
|
||||
$P.fnSetURL($P.mainQuery.taskSeCd);
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 최초 실행 함수
|
||||
**************************************************************************/
|
||||
// 1. 이벤트 설정
|
||||
$P.setEvent();
|
||||
|
||||
// 2. 초기 화면 설정
|
||||
$P.initForm();
|
||||
|
||||
// 3. 보안모드
|
||||
fn_securityModeToggle($("#securityMode--top").is(":checked"));
|
||||
});
|
||||
|
||||
</script>
|
||||
@ -1,642 +0,0 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
|
||||
<c:set var="prefixName" scope="request">사전통지 발송 현황</c:set>
|
||||
|
||||
<!-- inner page html -->
|
||||
<div class="content-wrapper">
|
||||
<!-- Content -->
|
||||
<div class="container-xxl flex-grow-1 px-0">
|
||||
<div class="card wrapper-list">
|
||||
<!-- 상단 버튼 -->
|
||||
<div class="container-page-btn">
|
||||
<button type="button" class="btn btn-outline-dark w-px-120" id="btnReset--${pageName}" title="초기화">
|
||||
초기화
|
||||
</button>
|
||||
<span class="container-window-btn-right">
|
||||
<button type="button" class="btn btn-search w-px-120" id="btnSearch--${pageName}" title="검색">
|
||||
검색
|
||||
</button>
|
||||
<button type="button" class="btn btn-excel w-px-120" id="btnExcel--${pageName}" title="엑셀">
|
||||
엑셀
|
||||
</button>
|
||||
</span>
|
||||
</div>
|
||||
<!-- 상단 버튼 -->
|
||||
|
||||
<!-- 검색 조건 영역 -->
|
||||
<form id="frmSearch--${pageName}" name="frmSearch">
|
||||
<!-- hidden -->
|
||||
<input type="hidden" id="sggCd--${pageName}" name="sggCd" />
|
||||
|
||||
<!-- 메인 조건 -->
|
||||
<div class="container-search">
|
||||
<div class="row g-1">
|
||||
<!-- 업무 구분 -->
|
||||
<div class="col-12">
|
||||
<span class="form-label fw-bold form-search-title w-px-120 text-end">업무구분</span>
|
||||
<span class="form-search-linebox">
|
||||
<c:forEach items="${taskListForSgg}" var="item">
|
||||
<label>
|
||||
<input type="radio" class="form-check-input" name="taskSeCd" alt="업무구분"
|
||||
value="${item.code}" onchange="pageObject['${pageName}'].fnResetAndChangeBiz(this.value);">
|
||||
${item.value}
|
||||
</label>
|
||||
</c:forEach>
|
||||
</span>
|
||||
</div>
|
||||
<!-- 발송 일자 -->
|
||||
<div class="col-6">
|
||||
<label class="form-label fw-bold form-search-title w-px-120 text-end" for="schSndngYmdFrom--${pageName}">발송일자</label>
|
||||
<span class="form-search-linebox">
|
||||
<input type="text" class="form-control form-date" id="schSndngYmdFrom--${pageName}" name="schSndngYmdFrom"
|
||||
data-fmt-type="day" title="시작 날짜 선택" />
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
~
|
||||
<input type="text" class="form-control form-date" id="schSndngYmdTo--${pageName}" name="schSndngYmdTo"
|
||||
data-fmt-type="day" title="종료 날짜 선택" />
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
</span>
|
||||
</div>
|
||||
<!-- 발송 등록 구분 코드 -->
|
||||
<div class="col-6">
|
||||
<label class="form-label fw-bold form-search-title w-px-120 text-end" for="schSndngRegSeCd--${pageName}">등록구분</label>
|
||||
<select class="form-select w-px-80" id="schSndngRegSeCd--${pageName}" name="schSndngRegSeCd">
|
||||
<c:forEach items="${FIM067List}" var="item">
|
||||
<option value="${item.code}">${item.value}</option>
|
||||
</c:forEach>
|
||||
</select>
|
||||
</div>
|
||||
<!-- -->
|
||||
<div class="col-6">
|
||||
</div>
|
||||
<!-- 동적 검색 -->
|
||||
<div class="col-6">
|
||||
<input type="hidden" id="by--${pageName}" name="by" />
|
||||
<input type="text" class="form-control fw-bold w-px-120 text-end" id="byOutput--${pageName}" value="동적 검색" readonly />
|
||||
<input type="hidden" id="mainOption--${pageName}" name="mainOption" />
|
||||
<input type="hidden" id="subOption--${pageName}" name="subOption" />
|
||||
<input type="text" class="form-control w-px-400" id="term--${pageName}" name="term" autocomplete="off" />
|
||||
<!-- 상세 검색조건 버튼 -->
|
||||
<span class="flr">
|
||||
<button type="button" class="btn btn-open-detail" data-bs-toggle="collapse" data-bs-target="#searchDetail--${pageName}">
|
||||
<i class="bx bx-chevron-down"></i>
|
||||
상세검색
|
||||
</button>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div> <!-- 메인 조건 -->
|
||||
|
||||
<!-- 상세 조건 -->
|
||||
<div id="searchDetail--${pageName}" class="container-search container-search-detail collapse">
|
||||
<div class="row g-1">
|
||||
<!-- 등록일자, 수정일자 -->
|
||||
<div class="col-6">
|
||||
<select class="form-select w-px-120 text-center" id="schRegDateOpt--${pageName}" name="schRegDateOpt">
|
||||
<option value="regDt">등록일자</option>
|
||||
<option value="mdfcnDt">수정일자</option>
|
||||
</select>
|
||||
<span class="form-search-linebox">
|
||||
<input type="text" class="form-control form-date" id="schRegDateFrom--${pageName}" name="schRegDateFrom"
|
||||
data-fmt-type="day" title="시작 날짜 선택" />
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
~
|
||||
<input type="text" class="form-control form-date" id="schRegDateTo--${pageName}" name="schRegDateTo"
|
||||
data-fmt-type="day" title="종료 날짜 선택">
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
</span>
|
||||
</div>
|
||||
<!-- 등록자명, 수정자명 -->
|
||||
<div class="col-6">
|
||||
<select class="form-select w-px-120 text-center" id="schRgtrOpt--${pageName}" name="schRgtrOpt">
|
||||
<option value="rgtr">등록자</option>
|
||||
<option value="mdfr">수정자</option>
|
||||
</select>
|
||||
<input type="hidden" id="schRgtrCd--${pageName}" name="schRgtrCd" />
|
||||
<input type="text" class="form-control w-px-160" id="schRgtrNm--${pageName}" name="schRgtrNm" />
|
||||
<button type="button" class="btn btn-sm btn-outline-dark" id="btnFindUser--${pageName}" title="사용자 검색">검색</button>
|
||||
</div>
|
||||
</div>
|
||||
</div> <!-- 상세 조건 -->
|
||||
</form>
|
||||
<!-- 검색 조건 영역 -->
|
||||
|
||||
<!-- 업무 버튼 및 건수 표시 -->
|
||||
<div>
|
||||
<span class="container-page-btn">
|
||||
<!-- 건수, 페이지 표시 -->
|
||||
<div class="d-flex flex-row justify-content-between">
|
||||
<span class="dataTables_info" id="paging--${pageName}PagingInfo" role="status" aria-live="polite"></span>
|
||||
<ul class="pagination pagination-primary" id="paging--${pageName}">
|
||||
</ul>
|
||||
</div>
|
||||
<!-- 업무 버튼 -->
|
||||
<span class="container-window-btn-right">
|
||||
<button type="button" class="btn btn-primary w-px-120" id="btnRemove--${pageName}" title="사전통지 발송 삭제">
|
||||
발송 삭제
|
||||
</button>
|
||||
</span>
|
||||
</span>
|
||||
</div>
|
||||
<!-- 업무 버튼 및 건수 표시 -->
|
||||
|
||||
<!-- DataTables(그리드) -->
|
||||
<div class="card-datatable text-nowrap">
|
||||
<div class="dataTables_wrapper dt-bootstrap5 no-footer" id="DataTables_Table_0_wrapper--${pageName}">
|
||||
<div class="table-responsive ox-scroll oy-scroll h-px-500" id="table-responsive--${pageName}">
|
||||
<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">
|
||||
<tr id="theadTr--${pageName}"
|
||||
data-by="by--${pageName}" data-by-output="byOutput--${pageName}" data-main-option="mainOption--${pageName}" data-sub-option="subOption--${pageName}">
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="tbody--${pageName}">
|
||||
</tbody>
|
||||
|
||||
<template id="${infoPrefix}Col--${pageName}">
|
||||
<th class="cmn" style="width: 72px;">No.</th>
|
||||
<th class="cmn" style="width: 56px;"><input type="checkbox" class="form-check-input" id="gridAllCheckbox--${pageName}" onchange="pageObject['${pageName}'].control.select(this.checked);" /></th>
|
||||
<th class="cmn" style="width: 160px;" onclick="searchFromGridTitle('TASK_SE_CD', this.innerText, 'codeValue', 'FIM054');">업무구분</th>
|
||||
<th class="cmn" style="width: 100px;" onclick="searchFromGridTitle('SNDNG_REG_SE_CD', this.innerText, 'codeValue', 'FIM067');">등록구분</th>
|
||||
<th class="cmn" style="width: 160px;" onclick="searchFromGridTitle('SNDNG_SE_CD', this.innerText, 'codeValue', 'FIM067');">발송구분</th>
|
||||
<th class="cmn" style="width: 160px;" onclick="searchFromGridTitle('VLTN_ARTCL', this.innerText, 'match', 'part');">위반항목</th>
|
||||
<th class="cmn" style="width: 120px;" onclick="searchFromGridTitle('SNDNG_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: 140px;" onclick="searchFromGridTitle('GRAMT', 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: 140px;">등록사용자</th>
|
||||
<th class="cmn" style="width: 180px;">수정일시</th>
|
||||
<th class="cmn" style="width: 140px;">수정사용자</th>
|
||||
<th class="cmn dummy-th"></th>
|
||||
</template>
|
||||
<template id="${infoPrefix}Row--${pageName}">
|
||||
<tr data-key="{SNDNG_ID}">
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{ROW_NUM}</td>
|
||||
<td class="cmn text-center"><input type="checkbox" class="form-check-input" name="gridCheckbox" value="{SNDNG_ID}" onchange="pageObject['${pageName}'].control.select('{SNDNG_ID}', this.checked);" /></td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{TASK_SE_NM}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{SNDNG_REG_SE_NM}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{SNDNG_SE_NM}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{VLTN_ARTCL}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{SNDNG_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}">{GRAMT}</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}">{RGTR_NM}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{MDFCN_DT}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{MDFR_NM}</td>
|
||||
<td class="cmn dummy-td"></td>
|
||||
</tr>
|
||||
</template>
|
||||
<template id="${infoPrefix}NotFound--${pageName}">
|
||||
<tr class="odd">
|
||||
<td valign="top" colspan="17" class="dataTables_empty text-center">${prefixName} 정보를 찾지 못했습니다.</td>
|
||||
</tr>
|
||||
</template>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- DataTables(그리드) -->
|
||||
</div> <!-- <div class="card wrapper-list"> -->
|
||||
</div> <!-- <div class="container-xxl flex-grow-1 px-0"> -->
|
||||
<!-- Content -->
|
||||
|
||||
<div class="content-backdrop fade"></div>
|
||||
</div>
|
||||
<!-- / inner page html <div class="content-wrapper"> -->
|
||||
|
||||
<script>
|
||||
/**************************************************************************
|
||||
* Global Variable
|
||||
**************************************************************************/
|
||||
pageObject["${pageName}"] = {};
|
||||
|
||||
/**************************************************************************
|
||||
* script 진입
|
||||
**************************************************************************/
|
||||
$(document).ready(function() {
|
||||
// pageObject
|
||||
let $P = pageObject["${pageName}"];
|
||||
|
||||
// FormFields
|
||||
$P.formFields = new FimsFormFields("#frmSearch--${pageName}");
|
||||
|
||||
/**************************************************************************
|
||||
* DatasetControl
|
||||
**************************************************************************/
|
||||
$P.control = new DatasetControl({
|
||||
prefix: "advntceSndng"
|
||||
, prefixName: "사전통지 발송 현황"
|
||||
, keymapper: info => info ? info.SNDNG_ID : ""
|
||||
, dataGetter: obj => obj.${infoPrefix}List
|
||||
, appendData: true
|
||||
, infoSize: "xxl"
|
||||
, formats: {
|
||||
SNDNG_YMD: dateFormat
|
||||
, SNDNG_END_YMD: dateFormat
|
||||
, TNOCS: numberFormat
|
||||
, GRAMT: numberFormat
|
||||
, REG_DT: datetimeFormat
|
||||
, MDFCN_DT: datetimeFormat
|
||||
}
|
||||
});
|
||||
// $P.control 설정
|
||||
$P.control.defaultFetchSize = FETCH_XS; // 1 페이지당 조회되는 자료 건수 index.jsp에서 확인 FETCH_XS = 30
|
||||
$P.control.query = { pageNum : 1, fetchSize : $P.control.defaultFetchSize };
|
||||
$P.control.beforeCurrent = null;
|
||||
|
||||
|
||||
/**************************************************************************
|
||||
* DatasetControl 이벤트
|
||||
**************************************************************************/
|
||||
// Dataset 변경 이벤트
|
||||
$P.control.onDatasetChange = (obj, option) => {
|
||||
$P.renderList(obj.${infoPrefix}Total, option);
|
||||
|
||||
$("#paging--${pageName}").setPagingInfo({
|
||||
list: $P.control.dataset
|
||||
, prefix: "paging--${pageName}"
|
||||
, start: obj.${infoPrefix}Start
|
||||
, totalSize: obj.${infoPrefix}Total
|
||||
, fetchSize: obj.${infoPrefix}Fetch
|
||||
, func: "pageObject['${pageName}'].control.load({index})"
|
||||
});
|
||||
|
||||
|
||||
};
|
||||
|
||||
// 현재 선택 자료 변경 이벤트
|
||||
$P.control.onCurrentChange = (item) => {
|
||||
if (!item) return;
|
||||
|
||||
let key = item.data.SNDNG_ID;
|
||||
|
||||
$("#tbody--${pageName}").setCurrentRow(key);
|
||||
};
|
||||
|
||||
// 선택(체크) 변경 이벤트
|
||||
$P.control.onSelectionChange = (selected) => {
|
||||
let ${infoPrefix}List = $P.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()));
|
||||
});
|
||||
|
||||
// 삭제 버튼
|
||||
$("#btnRemove--${pageName}").prop("disabled", keys.length < 1);
|
||||
|
||||
// DataTables(그리드) 전체 선택(checkbox)
|
||||
if (keys.length < 1) {
|
||||
$("#DataTables_Table_0--${pageName} th input[type='checkbox']").prop("checked", false); // 체크 해제
|
||||
} else if (keys.length == ${infoPrefix}List.length) {
|
||||
$("#DataTables_Table_0--${pageName} th input[type='checkbox']").prop("checked", true); // 체크 설정
|
||||
} else {
|
||||
$("#DataTables_Table_0--${pageName} th input[type='checkbox']").prop("checked", false); // 체크 해제
|
||||
}
|
||||
};
|
||||
|
||||
// 상세정보 dialog
|
||||
$P.control.getInfo = (sndngId) => {
|
||||
if (typeof sndngId == "undefined" || sndngId == null || sndngId == "") return;
|
||||
|
||||
let params = {
|
||||
title: $P.control.prefixName + " 상세 정보" // 타이틀
|
||||
, callPurpose: "view" // 호출 용도
|
||||
, fetchSize: $P.control.defaultFetchSize // 한번에 조회되는 자료 건수
|
||||
, pageNum: 1 // 페이지 번호
|
||||
, sggCd: $("#sggCd--${pageName}").val() // 시군구 코드
|
||||
, taskSeCd: $("#frmSearch--${pageName} input[name='taskSeCd']:checked").val() // 업무 구분 코드
|
||||
, sndngId: sndngId // 발송 ID
|
||||
}
|
||||
|
||||
ajax.get({
|
||||
url: wctx.url("/" + params.taskSeCd + "${infoPrefixUrl}" + "/080/info.do") + "?openerPageName=${pageName}"
|
||||
, data: params || {}
|
||||
, success: resp => {
|
||||
dialog.open({
|
||||
id: $P.control.prefixed("DtlDialog--${pageName}")
|
||||
, title: params.title
|
||||
, content: resp
|
||||
, size: $P.control.infoSize
|
||||
, init: () => { setDialogZindex(); }
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// 삭제 callback
|
||||
$P.control.onRemove = (resp) => {
|
||||
let btnTitle = $("#btnRemove--${pageName}").attr("title");
|
||||
let showMessage = resp.rtnMsg.replace(/[S]|[F]/g, btnTitle);
|
||||
|
||||
// 메시지 출력
|
||||
dialog.alert({
|
||||
content: showMessage
|
||||
, init: () => { setDialogZindex(); }
|
||||
, onOK: () => { }
|
||||
});
|
||||
|
||||
if (resp.saved) { $P.fnRefreshList(); } // 자료 재조회
|
||||
}
|
||||
|
||||
// 삭제
|
||||
$P.control.remove = (params) => {
|
||||
if (!params) return;
|
||||
|
||||
ajax.post({
|
||||
url: wctx.url("/" + params.taskSeCd + "${infoPrefixUrl}" + "/070/remove.do")
|
||||
, data: params
|
||||
, success: resp => $P.control.onRemove(resp)
|
||||
});
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* DataTables 이벤트
|
||||
**************************************************************************/
|
||||
// DataTables에 click, dbclick 이벤트
|
||||
$P.renderList = (totalSize, option) => {
|
||||
let ${infoPrefix}List = $P.control.dataset;
|
||||
let empty = ${infoPrefix}List.empty;
|
||||
|
||||
let trs = empty ?
|
||||
[document.getElementById("${infoPrefix}NotFound--${pageName}").innerHTML] : <%-- from template#${infoPrefix}NotFound --%>
|
||||
${infoPrefix}List.inStrings(
|
||||
document.getElementById("${infoPrefix}Row--${pageName}").innerHTML, <%-- from template#${infoPrefix}Row --%>
|
||||
(str, dataItem) => str
|
||||
.replace(/{onclick}/gi, "pageObject['${pageName}'].control.setCurrent('" + dataItem.getValue("SNDNG_ID") + "');")
|
||||
.replace(/{ondblclick}/gi, "pageObject['${pageName}'].control.getInfo('" + dataItem.getValue("SNDNG_ID") + "');")
|
||||
);
|
||||
|
||||
let noMore = (${infoPrefix}List.length >= totalSize);
|
||||
let initScroll = ($P.control.query.pageNum < 2);
|
||||
if(option != null && option.reloaded){
|
||||
initScroll = false;
|
||||
}
|
||||
$("#table-responsive--${pageName}")[0].changeContent(trs.join(), initScroll, noMore);
|
||||
|
||||
|
||||
// checkbox 체크 해제
|
||||
$("#DataTables_Table_0--${pageName} th input[type='checkbox']").prop("checked", false);
|
||||
|
||||
//보안모드
|
||||
fn_securityModeToggle($("#securityMode--top").is(":checked"));
|
||||
}
|
||||
|
||||
// DataTables에 스크롤이 맨 밑으로 이동했을 때 이벤트
|
||||
$P.scrollDataList = () => {
|
||||
|
||||
|
||||
$P.control.load($P.control.query.pageNum + 1);
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 사용자 함수(function)
|
||||
**************************************************************************/
|
||||
// 검색 자료 재조회
|
||||
$P.fnRefreshList = () => {
|
||||
|
||||
|
||||
$P.control.reload({all : true});
|
||||
}
|
||||
|
||||
// 사용자검색 callback
|
||||
$P.callbackFindUser = (userId, userNm) => {
|
||||
$("#schRgtrCd--${pageName}").val(userId); // 사용자 ID
|
||||
$("#schRgtrNm--${pageName}").val(userNm); // 사용자 명
|
||||
}
|
||||
|
||||
// 삭제사유 callback
|
||||
$P.callbackRsn = (obj) => {
|
||||
// 서버에 전송할 data(파라미터) 생성
|
||||
let params = {};
|
||||
let selected = $P.control.dataset.getKeys("selected");
|
||||
|
||||
params.sggCd = $("#sggCd--${pageName}").val(); // 시군구 코드
|
||||
params.taskSeCd = $("#frmSearch--${pageName} input[name='taskSeCd']:checked").val(); // 업무 구분 코드
|
||||
params.sndngIds = selected.join(","); // 발송 Ids
|
||||
params.delRsn = obj.reason; // 삭제 사유
|
||||
|
||||
$P.control.remove(params);
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 버튼 clickEvent
|
||||
**************************************************************************/
|
||||
// 업무 구분 변경
|
||||
$P.fnResetAndChangeBiz = (taskSeCd) => {
|
||||
// 업무 구분 코드
|
||||
if (typeof taskSeCd == "undefined" || taskSeCd == null || taskSeCd == "") {
|
||||
taskSeCd = $("#layout-navbar input[name='taskSeCd']:checked").val();
|
||||
}
|
||||
|
||||
// 초기 기본 설정
|
||||
$P.initForm(taskSeCd);
|
||||
// 업무 구분별 설정
|
||||
$P.setTask(taskSeCd);
|
||||
|
||||
// dataset 초기화
|
||||
$P.control.dataset.clear();
|
||||
}
|
||||
|
||||
// 사용자검색 버튼 클릭 이벤트
|
||||
$P.fnGetFindUser = () => {
|
||||
let params = {
|
||||
openerPageName: "${pageName}"
|
||||
, callbackFuncName: "pageObject['${pageName}']['callbackFindUser']"
|
||||
}
|
||||
|
||||
ajax.get({
|
||||
url: wctx.url("/user/user02/010/main.do") + "?openerPageName=${pageName}"
|
||||
, data: params || {}
|
||||
, success: resp => {
|
||||
dialog.open({
|
||||
id: "userDialog--${pageName}"
|
||||
, title: "사용자 검색"
|
||||
, content: resp
|
||||
, size: "lg"
|
||||
, init: () => { setDialogZindex(); }
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// 검색 버튼 이벤트
|
||||
$P.fnSearchList = () => {
|
||||
// 검색조건
|
||||
$P.control.query = $P.formFields.get();
|
||||
$P.control.query.fetchSize = $P.control.defaultFetchSize; // 한번에 조회되는 자료 건수
|
||||
$P.control.query.sndngSeCd = "02"; // 발송 구분 코드 - 02 사전통지
|
||||
$P.control.query.delYn = "N"; // 삭제 여부
|
||||
|
||||
$P.control.load(1);
|
||||
}
|
||||
|
||||
// 엑셀 버튼 이벤트
|
||||
$P.fnExcel = () => {
|
||||
if ($P.control.dataset.empty) {
|
||||
dialog.alert({
|
||||
content: "검색된 자료가 없습니다."
|
||||
, init: () => { setDialogZindex(); }
|
||||
, 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)")
|
||||
, getCellDefsForPrivacyCell);
|
||||
|
||||
$P.control.query.cellDefs = cellDefs;
|
||||
|
||||
$P.control.download();
|
||||
}
|
||||
|
||||
// 삭제 버튼 이벤트
|
||||
$P.fnRemove = (title) => {
|
||||
// 선택 자료
|
||||
let selected = $P.control.dataset.getKeys("selected");
|
||||
|
||||
if (selected.length < 1) {
|
||||
dialog.alert({
|
||||
content: "선택하신 " + $P.control.prefixName + " 정보가 없습니다."
|
||||
, init: () => { setDialogZindex(); }
|
||||
, onOK: () => { }
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
// 삭제 메세지 확인
|
||||
dialog.alert({
|
||||
content: "선택하신 " + selected.length + "건의 " + $P.control.prefixName + " 정보를 삭제하시겠습니까?"
|
||||
, onOK: () => {
|
||||
// 삭제 사유 입력
|
||||
fetch(wctx.url("/resources/html/inputRsnDialog.html"))
|
||||
.then(function(resp) { return resp.text(); })
|
||||
.then(function(template) {
|
||||
dialog.open({
|
||||
id: "inputDelRsnDialog"
|
||||
, title: title
|
||||
, size: "lg"
|
||||
, content: template
|
||||
, init: () => { setDialogZindex(); }
|
||||
, onOK: () => {
|
||||
$P.callbackRsn({ reason: $("#reason").val() });
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 초기 셋팅
|
||||
**************************************************************************/
|
||||
// 이벤트 설정
|
||||
$P.setEvent = () => {
|
||||
// 기본 버튼 이벤트
|
||||
$("#btnReset--${pageName}").on("click", () => $P.fnResetAndChangeBiz()); // 초기화
|
||||
$("#btnSearch--${pageName}").on("click", () => $P.fnSearchList()); // 검색
|
||||
$("#btnExcel--${pageName}").on("click", () => $P.fnExcel()); // 엑셀
|
||||
$("#btnFindUser--${pageName}").on("click", () => $P.fnGetFindUser()); // 사용자 검색
|
||||
|
||||
// 동적검색에서 엔터(Enter) 키를 누르면 검색한다.
|
||||
$("#term--${pageName}").onEnterPress(function() {
|
||||
$P.fnSearchList();
|
||||
});
|
||||
|
||||
// form-date 항목에서 키보드로 입력시 날짜 포맷팅 적용
|
||||
$("#frmSearch--${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);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// 업무 버튼 이벤트
|
||||
$("#btnRemove--${pageName}").on("click", function() {
|
||||
$P.fnRemove($(this).attr("title")); // 사전통지 발송 삭제
|
||||
});
|
||||
|
||||
// DataTables width 변경 조정
|
||||
fnMakeResizableTable($("#table-responsive--${pageName}")[0]);
|
||||
|
||||
// DataTables 스크롤 이벤트 생성
|
||||
fnMakeScrollableTable($("#table-responsive--${pageName}")[0], $P.scrollDataList);
|
||||
}
|
||||
|
||||
// 초기 화면 설정
|
||||
$P.initForm = (taskSeCd) => {
|
||||
// 화면 초기화
|
||||
$("#frmSearch--${pageName}")[0].reset();
|
||||
|
||||
// input, select 초기화
|
||||
let searchForm = $("#frmSearch--${pageName}");
|
||||
searchForm.find("input[type='radio']").not("[name='taskSeCd']").prop("checked", false);
|
||||
searchForm.find("input[type='checkbox']").prop("checked", false);
|
||||
searchForm.find("input[type='text']").val("");
|
||||
searchForm.find("input[type='hidden']").val("");
|
||||
searchForm.find("select").each(function() { $(this).find("option:eq(0)").prop("selected", true); });
|
||||
|
||||
// 최고 관리자 경우 업무구분을 선택할 수 있도록 하자.
|
||||
$("#frmSearch--${pageName} input[name='taskSeCd']").each(function(i) {
|
||||
$(this).prop("disabled", "true");
|
||||
});
|
||||
|
||||
// 기본 데이터 설정
|
||||
$("#sggCd--${pageName}").val("${sggCd}"); // 시군구 코드
|
||||
$("#frmSearch--${pageName} input[name='taskSeCd'][value='" + taskSeCd + "']").prop("checked", true); // 업무 구분 코드
|
||||
initDatepicker("frmSearch--${pageName}"); // 달력 초기화
|
||||
$("#schSndngYmdFrom--${pageName}").datepicker("setDate", DateUtil.getDateDay(-7).date);
|
||||
$("#schSndngYmdTo--${pageName}").datepicker("setDate", new Date());
|
||||
$("#byOutput--${pageName}").val("동적 검색"); // 동적 검색
|
||||
$("#schRgtrNm--${pageName}").prop("readonly", true); // 사용자 이름
|
||||
}
|
||||
|
||||
// 업무 구분별 설정
|
||||
$P.setTask = (taskSeCd) => {
|
||||
// 업무구분에 따른 URL 설정
|
||||
$P.control.urls.load = wctx.url("/" + taskSeCd + "${infoPrefixUrl}" + "/070/list.do"); // 검색
|
||||
|
||||
// 업무별 조회 조건
|
||||
renderForTask("frmSearch--${pageName}", taskSeCd.toLowerCase());
|
||||
|
||||
// 업무별 그리드 th
|
||||
let colContent = document.getElementById("${infoPrefix}Col--${pageName}").content;
|
||||
let cols = $(colContent).find("." + taskSeCd.toLowerCase() + ",.cmn");
|
||||
let colsOuterHTML = "";
|
||||
|
||||
cols.each(function() {
|
||||
colsOuterHTML += this.outerHTML;
|
||||
});
|
||||
$("#table-responsive--${pageName}")[0].changeColumn(colsOuterHTML);
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 최초 실행 함수
|
||||
**************************************************************************/
|
||||
// 1. 이벤트 설정
|
||||
$P.setEvent();
|
||||
|
||||
// 2. 초기 설정 및 업무 구분 변경
|
||||
$P.fnResetAndChangeBiz($("#layout-navbar input[name='taskSeCd']:checked").val());
|
||||
|
||||
// 3. 보안모드
|
||||
fn_securityModeToggle($("#securityMode--top").is(":checked"));
|
||||
});
|
||||
|
||||
</script>
|
||||
@ -1,666 +0,0 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
|
||||
<c:set var="prefixName" scope="request">사전통지 발송 현황 상세 정보</c:set>
|
||||
|
||||
<!-- inner page html -->
|
||||
<div class="wrapper-pop">
|
||||
<!-- Content -->
|
||||
<div class="container flex-grow-1 px-0">
|
||||
|
||||
<!-- Page Body -->
|
||||
<div class="card">
|
||||
<!-- 입력 영역 -->
|
||||
<form id="frmEdit--${pageName}" name="frmEdit">
|
||||
<input type="hidden" id="sggCd--${pageName}" name="sggCd" />
|
||||
<input type="hidden" id="taskSeCd--${pageName}" name="taskSeCd" />
|
||||
<input type="hidden" id="sndngId--${pageName}" name=sndngId />
|
||||
</form>
|
||||
<!-- 입력 영역 -->
|
||||
|
||||
<!-- 업무 버튼 및 건수 표시 -->
|
||||
<div>
|
||||
<span class="container-page-btn">
|
||||
<!-- 건수, 페이지 표시 -->
|
||||
<div class="d-flex flex-row justify-content-between">
|
||||
<span class="dataTables_info" id="paging--${pageName}PagingInfo" role="status" aria-live="polite"></span>
|
||||
<ul class="pagination pagination-primary" id="paging--${pageName}">
|
||||
</ul>
|
||||
</div>
|
||||
<!-- 업무 버튼 -->
|
||||
<span class="container-window-btn-right">
|
||||
<button type="button" class="btn btn-excel w-px-120" id="btnExcel--${pageName}" title="엑셀">
|
||||
엑셀
|
||||
</button>
|
||||
<button type="button" class="btn btn-primary w-px-120" id="btnLinkNxrpIndivA01--${pageName}" title="세외수입 과태료대장 등록">
|
||||
과태료대장 등록
|
||||
</button>
|
||||
<button type="button" class="btn btn-primary w-px-120" id="btnLinkNxrpIndivA03--${pageName}" title="세외수입 과태료대장 상세조회">
|
||||
과태료대장 상세조회
|
||||
</button>
|
||||
<button type="button" class="btn btn-primary w-px-120" id="btnCreateSndngLink--${pageName}" title="우편통합 발송">
|
||||
우편통합 발송
|
||||
</button>
|
||||
<button type="button" class="btn btn-primary w-px-120" id="btnPrintAdvntcePdf01--${pageName}" title="사전통지 출력(PDF-A4)">
|
||||
사전통지 출력(PDF-A4)
|
||||
</button>
|
||||
<button type="button" class="btn btn-primary w-px-120" id="btnPrintAdvntcePdf02--${pageName}" title="사전통지 출력(PDF-Letter)">
|
||||
사전통지 출력(PDF-Letter)
|
||||
</button>
|
||||
<button type="button" class="btn btn-primary w-px-120" id="btnPrintAdvntceOutsourcing--${pageName}" title="사전통지 출력(외주파일)">
|
||||
사전통보서 출력(외주파일)
|
||||
</button>
|
||||
<button type="button" class="btn btn-primary w-px-120" id="btnCreateSndbk--${pageName}" title="반송 확인">
|
||||
반송 확인
|
||||
</button>
|
||||
</span>
|
||||
</span>
|
||||
</div> <!-- 업무 버튼 및 건수 표시 -->
|
||||
|
||||
<!-- DataTables(그리드) -->
|
||||
<div class="card-datatable text-nowrap">
|
||||
<div class="dataTables_wrapper dt-bootstrap5 no-footer" id="DataTables_Table_0_wrapper--${pageName}">
|
||||
<div class="table-responsive ox-scroll oy-scroll h-px-500" id="table-responsive--${pageName}">
|
||||
<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">
|
||||
<tr id="theadTr--${pageName}"
|
||||
data-by="by--${pageName}" data-by-output="byOutput--${pageName}" data-main-option="mainOption--${pageName}" data-sub-option="subOption--${pageName}">
|
||||
<th class="cmn" style="width: 72px;">No.</th>
|
||||
<th class="cmn" style="width: 120px;">발송상태</th>
|
||||
<th class="cmn" style="width: 160px;">등기번호</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: 100px;">우편번호</th>
|
||||
<th class="cmn" style="width: 280px;">주소</th>
|
||||
<th class="cmn" style="width: 320px;">상세주소</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: 200px;">수령인관계</th>
|
||||
<th class="cmn" style="width: 180px;">단속일시</th>
|
||||
<th class="cmn" style="width: 140px;">차량번호</th>
|
||||
<th class="cmn" style="width: 160px;">단속법정동</th>
|
||||
<th class="cmn" style="width: 280px;">단속장소</th>
|
||||
<th class="cmn" style="width: 100px;">회계연도</th>
|
||||
<th class="cmn" style="width: 100px;">부과번호</th>
|
||||
<th class="cmn" style="width: 120px;">부과일자</th>
|
||||
<th class="cmn" style="width: 120px;">납기일자</th>
|
||||
<th class="cmn" style="width: 120px;">과태료금액</th>
|
||||
<th class="cmn" style="width: 120px;">본세</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: 140px;">등록사용자</th>
|
||||
<th class="cmn" style="width: 180px;">수정일시</th>
|
||||
<th class="cmn" style="width: 140px;">수정사용자</th>
|
||||
<th class="cmn dummy-th"></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="tbody--${pageName}">
|
||||
</tbody>
|
||||
<template id="${infoPrefix}Row--${pageName}">
|
||||
<tr data-key="{SNDNG_DTL_ID}">
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{ROW_NUM}</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}">{SNDNG_YMD}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{SNDNG_END_YMD}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{RCPN_NM}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{RCPN_ZIP}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{RCPN_ADDR}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{RCPN_DTL_ADDR}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{DLVR_YMD}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{DLVR_TM}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{UNDLVR_RSN_NM}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{ACTL_RCPN_NM}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{RCPN_REL_NM}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{CRDN_DT}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{VHRNO}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{CRDN_STDG_NM}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{CRDN_PLC}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{FYR}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{LEVY_NO}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{LEVY_YMD}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{DUDT_YMD}</td>
|
||||
<td class="cmn text-end" onclick="{onclick}" ondblclick="{ondblclick}">{FFNLG_AMT}</td>
|
||||
<td class="cmn text-end" onclick="{onclick}" ondblclick="{ondblclick}">{PCPTAX}</td>
|
||||
<td class="cmn text-end" onclick="{onclick}" ondblclick="{ondblclick}">{ADAMT}</td>
|
||||
<td class="cmn text-end" onclick="{onclick}" ondblclick="{ondblclick}">{SUM_AMT}</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}">{MDFCN_DT}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{MDFR_NM}</td>
|
||||
<td class="cmn dummy-td"></td>
|
||||
</tr>
|
||||
</template>
|
||||
<template id="${infoPrefix}NotFound--${pageName}">
|
||||
<tr class="odd">
|
||||
<td valign="top" colspan="31" class="dataTables_empty text-center">${prefixName} 정보를 찾지 못했습니다.</td>
|
||||
</tr>
|
||||
</template>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div> <!-- DataTables(그리드) -->
|
||||
</div> <!-- <div class="card"> -->
|
||||
<!-- Page Body -->
|
||||
|
||||
</div> <!-- <div class="container flex-grow-1 px-0"> -->
|
||||
<!-- Content -->
|
||||
</div>
|
||||
<!-- / inner page html <div class="wrapper-pop"> -->
|
||||
|
||||
<script>
|
||||
/**************************************************************************
|
||||
* Global Variable
|
||||
**************************************************************************/
|
||||
pageObject["${pageName}"] = {};
|
||||
|
||||
/**************************************************************************
|
||||
* script 진입
|
||||
**************************************************************************/
|
||||
$(document).ready(function() {
|
||||
// pageObject
|
||||
let $P = pageObject["${pageName}"];
|
||||
|
||||
// infoDialog 호출 용도(view 조회(편집불가), create 등록, update 수정)
|
||||
$P.callPurpose = "${callPurpose}";
|
||||
// FormFields
|
||||
$P.formFields = new FimsFormFields("#frmEdit--${pageName}");
|
||||
|
||||
/**************************************************************************
|
||||
* DatasetControl
|
||||
**************************************************************************/
|
||||
$P.control = new DatasetControl({
|
||||
prefix: "advntceSndngDtl"
|
||||
, prefixName: "사전통지 발송 상세"
|
||||
, keymapper: info => info ? info.SNDNG_DTL_ID : ""
|
||||
, dataGetter: obj => obj.${infoPrefix}List
|
||||
, appendData: true
|
||||
, formats: {
|
||||
SNDNG_YMD: dateFormat
|
||||
, SNDNG_END_YMD: dateFormat
|
||||
, DLVR_YMD: dateFormat
|
||||
, LEVY_YMD: dateFormat
|
||||
, DUDT_YMD: dateFormat
|
||||
, FFNLG_AMT: numberFormat
|
||||
, PCPTAX: numberFormat
|
||||
, ADAMT: numberFormat
|
||||
, SUM_AMT: numberFormat
|
||||
, REG_DT: datetimeFormat
|
||||
, MDFCN_DT: datetimeFormat
|
||||
}
|
||||
});
|
||||
// $P.control 설정
|
||||
$P.control.defaultFetchSize = FETCH_XS; // 1 페이지당 조회되는 자료 건수 index.jsp에서 확인 FETCH_XS = 30
|
||||
$P.control.query = { pageNum : 1, fetchSize : $P.control.defaultFetchSize };
|
||||
$P.control.beforeCurrent = null;
|
||||
|
||||
|
||||
/**************************************************************************
|
||||
* DatasetControl 이벤트
|
||||
**************************************************************************/
|
||||
// Dataset 변경 이벤트
|
||||
$P.control.onDatasetChange = (obj, option) => {
|
||||
$P.renderList(obj.${infoPrefix}Total, option);
|
||||
|
||||
$("#paging--${pageName}").setPagingInfo({
|
||||
list: $P.control.dataset
|
||||
, prefix: "paging--${pageName}"
|
||||
, start: obj.${infoPrefix}Start
|
||||
, totalSize: obj.${infoPrefix}Total
|
||||
, fetchSize: obj.${infoPrefix}Fetch
|
||||
, func: "pageObject['${pageName}'].control.load({index})"
|
||||
});
|
||||
|
||||
|
||||
};
|
||||
|
||||
// 현재 선택 자료 변경 이벤트
|
||||
$P.control.onCurrentChange = (item) => {
|
||||
if (!item) return;
|
||||
|
||||
let key = item.data.SNDNG_DTL_ID;
|
||||
|
||||
$("#tbody--${pageName}").setCurrentRow(key);
|
||||
};
|
||||
|
||||
/**************************************************************************
|
||||
* DataTables 이벤트
|
||||
**************************************************************************/
|
||||
// DataTables에 click, dbclick 이벤트
|
||||
$P.renderList = (totalSize, option) => {
|
||||
let ${infoPrefix}List = $P.control.dataset;
|
||||
let empty = ${infoPrefix}List.empty;
|
||||
|
||||
let trs = empty ?
|
||||
[document.getElementById("${infoPrefix}NotFound--${pageName}").innerHTML] : <%-- from template#${infoPrefix}NotFound --%>
|
||||
${infoPrefix}List.inStrings(
|
||||
document.getElementById("${infoPrefix}Row--${pageName}").innerHTML, <%-- from template#${infoPrefix}Row --%>
|
||||
(str, dataItem) => str
|
||||
.replace(/{onclick}/gi, "pageObject['${pageName}'].control.setCurrent('" + dataItem.getValue("SNDNG_DTL_ID") + "');")
|
||||
.replace(/{ondblclick}/gi, "pageObject['${pageName}'].getTotalInfo('" + dataItem.getValue("CRDN_ID") + "');")
|
||||
);
|
||||
|
||||
let noMore = (${infoPrefix}List.length >= totalSize);
|
||||
let initScroll = ($P.control.query.pageNum < 2);
|
||||
if(option != null && option.reloaded){
|
||||
initScroll = false;
|
||||
}
|
||||
$("#table-responsive--${pageName}")[0].changeContent(trs.join(), initScroll, noMore);
|
||||
|
||||
|
||||
//보안모드
|
||||
fn_securityModeToggle($("#securityMode--top").is(":checked"));
|
||||
}
|
||||
|
||||
// DataTables에 스크롤이 맨 밑으로 이동했을 때 이벤트
|
||||
$P.scrollDataList = () => {
|
||||
|
||||
$P.control.load($P.control.query.pageNum + 1);
|
||||
}
|
||||
|
||||
// DataTables에 더블 클릭시 개별총정보 dialog
|
||||
$P.getTotalInfo = (crdnId) => {
|
||||
if (typeof crdnId == "undefined" || crdnId == null || crdnId == "") return;
|
||||
|
||||
let params = {
|
||||
callControlName: "pageObject['${pageName}'].control"
|
||||
, sggCd: $P.control.dataset.getValue("SGG_CD")
|
||||
, taskSeCd: $P.control.dataset.getValue("TASK_SE_CD")
|
||||
, crdnId: crdnId
|
||||
}
|
||||
|
||||
ajax.get({
|
||||
url: wctx.url("/sprt/sprt02/010/main.do")
|
||||
, data: params
|
||||
, success: resp => {
|
||||
dialog.open({
|
||||
id: "totalInfoMainDialog"
|
||||
, title: "개별총정보"
|
||||
, content: resp
|
||||
, size: "xxl"
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 사용자 함수(function)
|
||||
**************************************************************************/
|
||||
// 검색 자료 재조회
|
||||
$P.fnRefreshList = () => {
|
||||
|
||||
|
||||
$P.control.reload({all : true});
|
||||
}
|
||||
|
||||
// 세외수입 과태료 대장 등록
|
||||
$P.linkNxrpIndivA01 = (params) => {
|
||||
if (!params) return;
|
||||
|
||||
ajax.post({
|
||||
url: wctx.url("/" + params.taskSeCd + "${infoPrefixUrl}" + "/991/nxrpA01List.do")
|
||||
, data: params || {}
|
||||
, success: resp => {
|
||||
// S 또는 F 를 버튼 title 로 변경하여 메시지 출력
|
||||
let showMessage = resp.rtnMsg.replace(/[S]|[F]/g, params.title);
|
||||
|
||||
dialog.alert({
|
||||
content: showMessage
|
||||
, init: () => { setDialogZindex(); }
|
||||
, onOK: () => { $P.fnRefreshList(); } // 자료 재조회
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// 세외수입 과태료 대장 상세 조회
|
||||
$P.linkNxrpIndivA03 = (params) => {
|
||||
if (!params) return;
|
||||
|
||||
ajax.post({
|
||||
url: wctx.url("/" + params.taskSeCd + "${infoPrefixUrl}" + "/991/nxrpA03List.do")
|
||||
, data: params || {}
|
||||
, success: resp => {
|
||||
// S 또는 F 를 버튼 title 로 변경하여 메시지 출력
|
||||
let showMessage = resp.rtnMsg.replace(/[S]|[F]/g, params.title);
|
||||
|
||||
dialog.alert({
|
||||
content: showMessage
|
||||
, init: () => { setDialogZindex(); }
|
||||
, onOK: () => { $P.fnRefreshList(); } // 자료 재조회
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// 우편통합 발송
|
||||
$P.callbackDate = (obj) => {
|
||||
let params = {
|
||||
title: $("#btnCreateSndngLink--${pageName}").attr("title")
|
||||
, sggCd: $P.control.dataset.getValue("SGG_CD") // 시군구 코드
|
||||
, taskSeCd: $P.control.dataset.getValue("TASK_SE_CD") // 업무 구분 코드
|
||||
, sndngId: $P.control.dataset.getValue("SNDNG_ID") // 발송 ID
|
||||
, sndngSeCd: "02" // 발송 구분 코드
|
||||
, sndngYmd: obj.sndngYmd // 발송 일자
|
||||
, sndngEndYmd: obj.sndngEndYmd // 발송 종료 일자
|
||||
, postSndngSeCd: obj.postSndngSeCd // 우편 발송 구분 코드 0 일반, 1 등기
|
||||
};
|
||||
|
||||
ajax.post({
|
||||
url: wctx.url("/" + params.taskSeCd + "${infoPrefixUrl}" + "/080/createSndngLink.do")
|
||||
, data: params || {}
|
||||
, success: resp => {
|
||||
// S 또는 F 를 버튼 title 로 변경하여 메시지 출력
|
||||
let showMessage = resp.rtnMsg.replace(/[S]|[F]/g, params.title);
|
||||
|
||||
dialog.alert({
|
||||
content : showMessage
|
||||
, init: () => { setDialogZindex(); }
|
||||
, onOK : () => { $P.fnRefreshList(); } // 자료 재조회
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// 반송 확인(종적결과 등록)
|
||||
$P.createSndbk = (params) => {
|
||||
if (!params) return;
|
||||
|
||||
ajax.post({
|
||||
url: wctx.url("/" + params.taskSeCd + "${infoPrefixUrl}" + "/230/createSndbkList.do")
|
||||
, data: params || {}
|
||||
, success: resp => {
|
||||
let showMessage = resp.rtnMsg.replace(/[S]|[F]/g, params.title);
|
||||
|
||||
dialog.alert({
|
||||
content: showMessage
|
||||
, init: () => { setDialogZindex(); }
|
||||
, onOK: () => { $P.fnRefreshList(); } // 자료 재조회
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 버튼 clickEvent
|
||||
**************************************************************************/
|
||||
// 엑셀 버튼 이벤트
|
||||
$P.fnExcel = () => {
|
||||
if ($P.control.dataset.empty) {
|
||||
dialog.alert({
|
||||
content: "검색된 자료가 없습니다."
|
||||
, init: () => { setDialogZindex(); }
|
||||
, onOK: () => { }
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
// 검색조건
|
||||
$P.control.query = $P.formFields.get(); // 검색 조건
|
||||
$P.control.query.fetchSize = $P.control.defaultFetchSize; // 한번에 조회되는 자료 건수
|
||||
$P.control.query.delYn = "N"; // 삭제 여부
|
||||
|
||||
// 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)")
|
||||
, getCellDefsForPrivacyCell);
|
||||
|
||||
$P.control.query.cellDefs = cellDefs;
|
||||
|
||||
$P.control.download();
|
||||
}
|
||||
|
||||
// 세외수입 과태료 대장 단속 정보 등록 버튼 이벤트
|
||||
$P.fnLinkNxrpIndivA01 = (title) => {
|
||||
// validate 확인
|
||||
if (!customValidate($("#frmEdit--${pageName}").find("input, select, textarea"))) return;
|
||||
|
||||
dialog.alert({
|
||||
content: "세외수입 과태료 대장에 단속 정보를 등록하시겠습니까?"
|
||||
, init: () => { setDialogZindex(); }
|
||||
, onOK: () => {
|
||||
let params = {
|
||||
callPurpose: "create"
|
||||
, title: title // 타이틀
|
||||
, sggCd: $P.control.dataset.getValue("SGG_CD") // 시군구 코드
|
||||
, taskSeCd: $P.control.dataset.getValue("TASK_SE_CD") // 업무 구분 코드
|
||||
, sndngId: $P.control.dataset.getValue("SNDNG_ID") // 발송 ID
|
||||
, sndngYmd: $P.control.dataset.getValue("SNDNG_YMD") // 발송 일자
|
||||
};
|
||||
|
||||
$P.linkNxrpIndivA01(params);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// 세외수입 과태료 대장 등록 자료 상세 조회 버튼 이벤트
|
||||
$P.fnLinkNxrpIndivA03 = (title) => {
|
||||
// validate 확인
|
||||
if (!customValidate($("#frmEdit--${pageName}").find("input, select, textarea"))) return;
|
||||
|
||||
dialog.alert({
|
||||
content: "세외수입 과태료 대장을 조회하시겠습니까?"
|
||||
, init: () => { setDialogZindex(); }
|
||||
, onOK: () => {
|
||||
let params = {
|
||||
callPurpose: "update"
|
||||
, title: title // 타이틀
|
||||
, sggCd: $P.control.dataset.getValue("SGG_CD") // 시군구 코드
|
||||
, taskSeCd: $P.control.dataset.getValue("TASK_SE_CD") // 업무 구분 코드
|
||||
, sndngId: $P.control.dataset.getValue("SNDNG_ID") // 발송 ID
|
||||
, sndngYmd: $P.control.dataset.getValue("SNDNG_YMD") // 발송 일자
|
||||
};
|
||||
|
||||
$P.linkNxrpIndivA03(params);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// 우편통합발송 버튼 이벤트
|
||||
$P.fnCreateSndngLink = async(title) => {
|
||||
// validate 확인
|
||||
if (!customValidate($("#frmEdit--${pageName}").find("input, select, textarea"))) return;
|
||||
|
||||
let resp = await fetch(wctx.url("/resources/html/inputDateDialog.html"));
|
||||
let template = await resp.text();
|
||||
|
||||
dialog.open({
|
||||
id : "inputEPostDateDialog"
|
||||
, title: title
|
||||
, size: "md"
|
||||
, content: template
|
||||
, init: () => {
|
||||
setDialogZindex();
|
||||
|
||||
$("#divPostSndng").show();
|
||||
initDatepicker("frmInputDate");
|
||||
$("#sndngYmd").datepicker("setDate", $P.control.dataset.getValue("SNDNG_YMD"));
|
||||
$("#sndngEndYmd").datepicker("setDate", $P.control.dataset.getValue("SNDNG_END_YMD"));
|
||||
},
|
||||
onOK: () => {
|
||||
if (!inputDateComparison($("#sndngYmd").val(), $("#sndngEndYmd").val())) return;
|
||||
|
||||
$P.callbackDate({
|
||||
"sndngYmd": $("#sndngYmd").val()
|
||||
, "sndngEndYmd": $("#sndngEndYmd").val()
|
||||
, "postSndngSeCd": $("#frmInputDate").find("[name='postSndngSeCd']:checked").val()
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// 사전통지 출력 버튼 이벤트
|
||||
$P.fnMakeFileAdvntce = (title, fileType, paper) => {
|
||||
// validate 확인
|
||||
if (!customValidate($("#frmEdit--${pageName}").find("input, select, textarea"))) return;
|
||||
|
||||
let submitParam = {
|
||||
sggCd: $P.control.dataset.getValue("SGG_CD") // 시군구 코드
|
||||
, taskSeCd: $P.control.dataset.getValue("TASK_SE_CD") // 업무 구분 코드
|
||||
, sndngId: $P.control.dataset.getValue("SNDNG_ID") // 발송 ID
|
||||
};
|
||||
|
||||
let url = "";
|
||||
let fileTypeName = "";
|
||||
|
||||
if (fileType == "pdf") {
|
||||
url = wctx.url("/" + submitParam.taskSeCd + "${infoPrefixUrl}" + "/080/makeAdvntcePdf.do");
|
||||
fileTypeName = "PDF 파일";
|
||||
} else if (fileType == "outsourcing") {
|
||||
url = wctx.url("/" + submitParam.taskSeCd + "${infoPrefixUrl}" + "/080/makeAdvntceOutsourcing.do");
|
||||
fileTypeName = "외주 요청 파일";
|
||||
}
|
||||
|
||||
let inBrowser = false;
|
||||
if (fileType == "pdf") {
|
||||
submitParam.paperSeCd = paper;
|
||||
inBrowser = true;
|
||||
}
|
||||
|
||||
if (inBrowser) {
|
||||
var parameter = toQuery(submitParam);
|
||||
var filenameInHeader = "";
|
||||
|
||||
fetch(url + "?" + parameter)
|
||||
.then((response) => {
|
||||
var header = response.headers.get('Content-Disposition');
|
||||
if(!header){
|
||||
response.json().then((responseJson)=>{
|
||||
dialog.alert({
|
||||
content: fileTypeName+" 생성 중 오류가 발생하였습니다."
|
||||
+"<br/>"
|
||||
+responseJson.description,
|
||||
init: () => { setDialogZindex(); }
|
||||
});
|
||||
});
|
||||
new Error("");
|
||||
}
|
||||
var parts = header.split(';');
|
||||
filenameInHeader = decodeURIComponent(parts[1].split('=')[1]);
|
||||
return response.blob();
|
||||
})
|
||||
.then((blob) => {
|
||||
openPDF(blob, filenameInHeader);
|
||||
})
|
||||
.catch(()=>{});
|
||||
} else {
|
||||
var parameter = toQuery(submitParam);
|
||||
document.location.href = url + "?" + parameter;
|
||||
}
|
||||
}
|
||||
|
||||
// 반송확인 버튼 이벤트
|
||||
$P.fnCreateSndbk = (title) => {
|
||||
// validate 확인
|
||||
if (!customValidate($("#frmEdit--${pageName}").find("input, select, textarea"))) return;
|
||||
|
||||
dialog.alert({
|
||||
content: "종적결과를 확인하시겠습니까?"
|
||||
, onOK: () => {
|
||||
// 파리미터 설정
|
||||
let params = $P.formFields.get(); // mainQuery
|
||||
params.title = title; // 타이틀
|
||||
|
||||
$P.createSndbk(params);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 초기 셋팅
|
||||
**************************************************************************/
|
||||
// 이벤트 설정
|
||||
$P.setEvent = () => {
|
||||
// 기본 버튼 이벤트
|
||||
$("#btnExcel--${pageName}").on("click", () => $P.fnExcel()); // 엑셀
|
||||
|
||||
// 업무 버튼 이벤트
|
||||
$("#btnLinkNxrpIndivA01--${pageName}").on("click", function() {
|
||||
$P.fnLinkNxrpIndivA01($(this).attr("title")); // 세외수입 과태료 대장 단속 정보 등록
|
||||
});
|
||||
$("#btnLinkNxrpIndivA03--${pageName}").on("click", function() {
|
||||
$P.fnLinkNxrpIndivA03($(this).attr("title")); // 세외수입 과태료 대장 등록 자료 상세
|
||||
});
|
||||
$("#btnCreateSndngLink--${pageName}").on("click", function() {
|
||||
$P.fnCreateSndngLink($(this).attr("title")); // 우편통합 발송
|
||||
});
|
||||
$("#btnPrintAdvntcePdf01--${pageName}").on("click", function() {
|
||||
$P.fnMakeFileAdvntce($(this).attr("title"), "pdf", "01"); // 사전통지 출력(PDF-A4)
|
||||
});
|
||||
$("#btnPrintAdvntcePdf02--${pageName}").on("click", function() {
|
||||
$P.fnMakeFileAdvntce($(this).attr("title"), "pdf", "02"); // 사전통지 출력(PDF-Letter)
|
||||
});
|
||||
$("#btnPrintAdvntceOutsourcing--${pageName}").on("click", function() {
|
||||
$P.fnMakeFileAdvntce($(this).attr("title"), "outsourcing"); // 사전통지 출력(외주파일)
|
||||
});
|
||||
$("#btnCreateSndbk--${pageName}").on("click", function() {
|
||||
$P.fnCreateSndbk($(this).attr("title")); // 반송 등록
|
||||
});
|
||||
|
||||
// DataTables width 변경 조정
|
||||
fnMakeResizableTable($("#table-responsive--${pageName}")[0]);
|
||||
|
||||
// DataTables 스크롤 이벤트 생성
|
||||
fnMakeScrollableTable($("#table-responsive--${pageName}")[0], $P.scrollDataList);
|
||||
|
||||
/* 출처: https://nowonbun.tistory.com/538 [명월 일지:티스토리]
|
||||
show.bs.modal : 모달이 열릴 때 바로 실행되는 이벤트입니다.
|
||||
shown.bs.modal : 모달의 열림이 끝나고 실행되는 이벤트입니다.
|
||||
hide.bs.modal : 모달이 닫힐 때 바로 실행되는 이벤트입니다.
|
||||
hidden.bs.modal : 모달의 닫힘이 끝나고 실행되는 이벤트입니다.
|
||||
*/
|
||||
// DataTables 스크롤을 위해서 다이얼로그 화면이 생성된 후 Dataset을 설정한다.
|
||||
$("#${infoPrefix}Dialog--${openerPageName}").on("shown.bs.modal", function (e) {
|
||||
$P.control.setData({
|
||||
${infoPrefix}List: ${advntceSndngDtlList}
|
||||
, ${infoPrefix}Start: ${advntceSndngDtlStart}
|
||||
, ${infoPrefix}Fetch: ${advntceSndngDtlFetch}
|
||||
, ${infoPrefix}Total: ${advntceSndngDtlTotal}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
// 초기 화면 설정
|
||||
$P.initForm = () => {
|
||||
// 화면 초기화
|
||||
$("#frmEdit--${pageName}")[0].reset();
|
||||
|
||||
// 기본 데이터 설정
|
||||
$("#sggCd--${pageName}").val("${sggCd}"); // 시군구 코드
|
||||
$("#taskSeCd--${pageName}").val("${taskSeCd}"); // 업무 구분 코드
|
||||
$("#sndngId--${pageName}").val("${sndngId}"); // 발송 ID
|
||||
|
||||
// 업무가 주정차위반(PVS) 또는 전용차로위반(BPV) 이라면..
|
||||
if ("${taskSeCd}" == "PVS" || "${taskSeCd}" == "BPV") {
|
||||
$("#btnLinkNxrpIndivA01--${pageName}").prop("disabled", true);
|
||||
$("#btnLinkNxrpIndivA03--${pageName}").prop("disabled", true);
|
||||
}
|
||||
|
||||
// 업무 구분별 설정
|
||||
$P.setTask("${taskSeCd}");
|
||||
}
|
||||
|
||||
// 업무 구분별 설정
|
||||
$P.setTask = (taskSeCd) => {
|
||||
// 업무구분에 따른 URL 설정
|
||||
$P.control.urls.load = wctx.url("/" + taskSeCd + "${infoPrefixUrl}" + "/080/list.do"); // 검색
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 최초 실행 함수
|
||||
**************************************************************************/
|
||||
// 1. 이벤트 설정
|
||||
$P.setEvent();
|
||||
|
||||
// 2. 초기 화면 설정
|
||||
$P.initForm();
|
||||
|
||||
// 3. 보안모드
|
||||
fn_securityModeToggle($("#securityMode--top").is(":checked"));
|
||||
});
|
||||
|
||||
</script>
|
||||
@ -1,680 +0,0 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
|
||||
<c:set var="prefixName" scope="request">고지서 발송 대상</c:set>
|
||||
|
||||
<!-- inner page html -->
|
||||
<div class="content-wrapper">
|
||||
<!-- Content -->
|
||||
<div class="container-xxl flex-grow-1 px-0">
|
||||
<div class="card wrapper-list">
|
||||
<!-- 상단 버튼 -->
|
||||
<div class="container-page-btn">
|
||||
<button type="button" class="btn btn-outline-dark w-px-120" id="btnReset--${pageName}" title="초기화">
|
||||
초기화
|
||||
</button>
|
||||
<span class="container-window-btn-right">
|
||||
<button type="button" class="btn btn-search w-px-120" id="btnSearch--${pageName}" title="검색">
|
||||
검색
|
||||
</button>
|
||||
<button type="button" class="btn btn-excel w-px-120" id="btnExcel--${pageName}" title="엑셀">
|
||||
엑셀
|
||||
</button>
|
||||
</span>
|
||||
</div>
|
||||
<!-- 상단 버튼 -->
|
||||
|
||||
<!-- 검색 조건 영역 -->
|
||||
<form id="frmSearch--${pageName}" name="frmSearch">
|
||||
<!-- hidden -->
|
||||
<input type="hidden" id="sggCd--${pageName}" name="sggCd" />
|
||||
|
||||
<!-- 메인 조건 -->
|
||||
<div class="container-search">
|
||||
<div class="row g-1">
|
||||
<!-- 업무 구분 -->
|
||||
<div class="col-12">
|
||||
<span class="form-label fw-bold form-search-title w-px-120 text-end">업무구분</span>
|
||||
<span class="form-search-linebox">
|
||||
<c:forEach items="${taskListForSgg}" var="item">
|
||||
<label>
|
||||
<input type="radio" class="form-check-input" name="taskSeCd" alt="업무구분"
|
||||
value="${item.code}" onchange="fnResetAndChangeBiz${pageName}(this.value);">
|
||||
${item.value}
|
||||
</label>
|
||||
</c:forEach>
|
||||
</span>
|
||||
</div>
|
||||
<!-- 발송 일자 -->
|
||||
<div class="col-6">
|
||||
<label class="form-label fw-bold form-search-title w-px-120 text-end" for="schSndngYmdFrom--${pageName}">발송일자</label>
|
||||
<span class="form-search-linebox">
|
||||
<input type="text" class="form-control form-date" id="schSndngYmdFrom--${pageName}" name="schSndngYmdFrom"
|
||||
data-fmt-type="day" title="시작 날짜 선택" />
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
~
|
||||
<input type="text" class="form-control form-date" id="schSndngYmdTo--${pageName}" name="schSndngYmdTo"
|
||||
data-fmt-type="day" title="종료 날짜 선택" />
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
</span>
|
||||
</div>
|
||||
<!-- 동적 검색 -->
|
||||
<div class="col-6">
|
||||
<input type="hidden" id="by--${pageName}" name="by" />
|
||||
<input type="text" class="form-control" id="byOutput--${pageName}" value="동적 검색" readonly />
|
||||
<input type="hidden" id="mainOption--${pageName}" name="mainOption" />
|
||||
<input type="hidden" id="subOption--${pageName}" name="subOption" />
|
||||
<input type="text" class="form-control w-px-300" id="term--${pageName}" name="term" />
|
||||
<!-- 상세 검색조건 버튼 -->
|
||||
<span class="flr">
|
||||
<button type="button" class="btn btn-open-detail" data-bs-toggle="collapse" data-bs-target="#searchDetail--${pageName}">
|
||||
<i class="bx bx-chevron-down"></i>
|
||||
상세검색
|
||||
</button>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div> <!-- 메인 조건 -->
|
||||
|
||||
<!-- 상세 조건 -->
|
||||
<div id="searchDetail--${pageName}" class="container-search container-search-detail collapse">
|
||||
<div class="row g-1">
|
||||
<!-- 등록일자, 수정일자 -->
|
||||
<div class="col-6">
|
||||
<select class="form-select w-px-120 text-center" id="schRegDateOpt--${pageName}" name="schRegDateOpt">
|
||||
<option value="regDt">등록일자</option>
|
||||
<option value="mdfcnDt">수정일자</option>
|
||||
</select>
|
||||
<span class="form-search-linebox">
|
||||
<input type="text" class="form-control form-date" id="schRegDateFrom--${pageName}" name="schRegDateFrom"
|
||||
data-fmt-type="day" title="시작 날짜 선택" />
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
~
|
||||
<input type="text" class="form-control form-date" id="schRegDateTo--${pageName}" name="schRegDateTo"
|
||||
data-fmt-type="day" title="종료 날짜 선택">
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
</span>
|
||||
</div>
|
||||
<!-- 등록자명, 수정자명 -->
|
||||
<div class="col-6">
|
||||
<select class="form-select w-px-120 text-center" id="schRgtrOpt--${pageName}" name="schRgtrOpt">
|
||||
<option value="rgtr">등록자</option>
|
||||
<option value="mdfr">수정자</option>
|
||||
</select>
|
||||
<input type="hidden" id="schRgtrCd--${pageName}" name="schRgtrCd" />
|
||||
<input type="text" class="form-control w-px-160" id="schRgtrNm--${pageName}" name="schRgtrNm" />
|
||||
<button type="button" class="btn btn-sm btn-outline-dark" id="btnFindUser--${pageName}" title="사용자 검색">검색</button>
|
||||
</div>
|
||||
</div>
|
||||
</div> <!-- 상세 조건 -->
|
||||
</form>
|
||||
<!-- 검색 조건 영역 -->
|
||||
|
||||
<!-- 업무 버튼 및 건수 표시 -->
|
||||
<div>
|
||||
<span class="container-page-btn">
|
||||
<!-- 건수, 페이지 표시 -->
|
||||
<div class="d-flex flex-row justify-content-between">
|
||||
<span class="dataTables_info" id="paging--${pageName}PagingInfo" role="status" aria-live="polite"></span>
|
||||
<ul class="pagination pagination-primary" id="paging--${pageName}">
|
||||
</ul>
|
||||
</div>
|
||||
<!-- 업무 버튼 -->
|
||||
<span class="container-window-btn-right">
|
||||
<button type="button" class="btn btn-primary w-px-120" id="btnCreateNhtSndng--${pageName}" title="고지서 발송 등록">
|
||||
발송 등록
|
||||
</button>
|
||||
<button type="button" class="btn btn-primary w-px-120" id="btnRemoveNhtSndng--${pageName}" title="고지서 발송 삭제">
|
||||
발송 삭제
|
||||
</button>
|
||||
</span>
|
||||
</span>
|
||||
</div>
|
||||
<!-- 업무 버튼 및 건수 표시 -->
|
||||
|
||||
<!-- DataTables(그리드) -->
|
||||
<div class="card-datatable text-nowrap">
|
||||
<div class="dataTables_wrapper dt-bootstrap5 no-footer" id="DataTables_Table_0_wrapper--${pageName}">
|
||||
<div class="table-responsive ox-scroll oy-scroll h-px-500" id="table-responsive--${pageName}">
|
||||
<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">
|
||||
<tr id="theadTr--${pageName}"
|
||||
data-by="by--${pageName}" data-by-output="byOutput--${pageName}" data-main-option="mainOption--${pageName}" data-sub-option="subOption--${pageName}">
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="tbody--${pageName}">
|
||||
</tbody>
|
||||
|
||||
<template id="${infoPrefix}Col--${pageName}">
|
||||
<th class="cmn" style="width: 72px;">No.</th>
|
||||
<th class="cmn" style="width: 56px;"><input type="checkbox" class="form-check-input" id="gridAllCheckbox--${pageName}" onchange="pageObject['${pageName}'].control.select(this.checked);" /></th>
|
||||
<th class="cmn" style="width: 160px;" onclick="searchFromGridTitle('TASK_SE_CD', this.innerText, 'codeValue', 'FIM054');">업무구분</th>
|
||||
<th class="cmn" style="width: 100px;" onclick="searchFromGridTitle('SNDNG_REG_SE_CD', this.innerText, 'codeValue', 'FIM067');">등록구분</th>
|
||||
<th class="cmn" style="width: 160px;" onclick="searchFromGridTitle('VLTN_ARTCL', this.innerText, 'match', 'part');">위반항목</th>
|
||||
<th class="cmn" style="width: 120px;" onclick="searchFromGridTitle('SNDNG_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: 140px;" onclick="searchFromGridTitle('GRAMT', 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: 140px;">등록사용자</th>
|
||||
<th class="cmn" style="width: 180px;">수정일시</th>
|
||||
<th class="cmn" style="width: 140px;">수정사용자</th>
|
||||
<th class="cmn dummy-th"></th>
|
||||
</template>
|
||||
<template id="${infoPrefix}Row--${pageName}">
|
||||
<tr data-key="{SNDNG_ID}">
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{ROW_NUM}</td>
|
||||
<td class="cmn text-center"><input type="checkbox" class="form-check-input" name="gridCheckbox" value="{SNDNG_ID}" onchange="pageObject['${pageName}'].control.select('{SNDNG_ID}', this.checked);" /></td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{TASK_SE_NM}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{SNDNG_REG_SE_NM}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{VLTN_ARTCL}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{SNDNG_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}">{GRAMT}</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}">{RGTR_NM}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{MDFCN_DT}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{MDFR_NM}</td>
|
||||
<td class="cmn dummy-td"></td>
|
||||
</tr>
|
||||
</template>
|
||||
<template id="${infoPrefix}NotFound--${pageName}">
|
||||
<tr class="bpv">
|
||||
<td valign="top" colspan="16" class="dataTables_empty text-center">${prefixName} 정보를 찾지 못했습니다.</td>
|
||||
</tr>
|
||||
<tr class="dpv">
|
||||
<td valign="top" colspan="16" class="dataTables_empty text-center">${prefixName} 정보를 찾지 못했습니다.</td>
|
||||
</tr>
|
||||
<tr class="eca">
|
||||
<td valign="top" colspan="16" class="dataTables_empty text-center">${prefixName} 정보를 찾지 못했습니다.</td>
|
||||
</tr>
|
||||
<tr class="pvs">
|
||||
<td valign="top" colspan="16" class="dataTables_empty text-center">${prefixName} 정보를 찾지 못했습니다.</td>
|
||||
</tr>
|
||||
<tr class="pes">
|
||||
<td valign="top" colspan="16" class="dataTables_empty text-center">${prefixName} 정보를 찾지 못했습니다.</td>
|
||||
</tr>
|
||||
</template>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- DataTables(그리드) -->
|
||||
</div> <!-- <div class="card wrapper-list"> -->
|
||||
</div> <!-- <div class="container-xxl flex-grow-1 px-0"> -->
|
||||
<!-- Content -->
|
||||
|
||||
<div class="content-backdrop fade"></div>
|
||||
</div>
|
||||
<!-- / inner page html <div class="content-wrapper"> -->
|
||||
|
||||
<script>
|
||||
/**************************************************************************
|
||||
* Global Variable
|
||||
**************************************************************************/
|
||||
pageObject["${pageName}"] = {};
|
||||
|
||||
// 공통 코드
|
||||
var FIM004 = new CommonCodes(${FIM004}, true); // 주정차위반 내역 코드
|
||||
var FIM005 = new CommonCodes(${FIM005}, true); // 전용차로위반 내역 코드
|
||||
var FIM006 = new CommonCodes(${FIM006}, true); // 장애인주차위반 내역 코드
|
||||
var FIM061 = new CommonCodes(${FIM061}, true); // 전기차 충전구역 및 충전방해 위반 코드
|
||||
var FIM064 = new CommonCodes(${FIM064}, true); // 화물자동차 밤샘주차 위반 코드
|
||||
|
||||
/**************************************************************************
|
||||
* script 진입
|
||||
**************************************************************************/
|
||||
$(document).ready(function() {
|
||||
// pageObject
|
||||
var $P = pageObject["${pageName}"];
|
||||
|
||||
// URL
|
||||
$P.PrefixUrl = "/sndb/sndb01";
|
||||
// FormFields
|
||||
$P.formFields = new FimsFormFields("#frmSearch--${pageName}");
|
||||
|
||||
/**************************************************************************
|
||||
* DatasetControl
|
||||
**************************************************************************/
|
||||
$P.control = new DatasetControl({
|
||||
prefix : "nhtTrgt"
|
||||
, prefixName : "고지서 발송 대상"
|
||||
, infoSize : "xl"
|
||||
, keymapper : info => info ? info.CRDN_ID : ""
|
||||
, dataGetter : obj => obj.${infoPrefix}List
|
||||
, appendData : true
|
||||
, formats : {
|
||||
CVLCPT_RCPT_YMD : dateFormat
|
||||
, CRDN_YMD_TM : datetimeFormat
|
||||
, FFNLG_AMT : numberFormat
|
||||
, ADVNTCE_AMT : numberFormat
|
||||
, REG_DT : datetimeFormat
|
||||
, MDFCN_DT : datetimeFormat
|
||||
}
|
||||
});
|
||||
// $P.control 설정
|
||||
$P.control.defaultFetchSize = FETCH_XS; // 1 페이지당 조회되는 자료 건수 index.jsp에서 확인 FETCH_XS = 30
|
||||
$P.control.query = { pageNum : 1, fetchSize : $P.control.defaultFetchSize };
|
||||
$P.control.beforeCurrent = null;
|
||||
|
||||
/**************************************************************************
|
||||
* DatasetControl 이벤트
|
||||
**************************************************************************/
|
||||
// Dataset 변경 이벤트
|
||||
$P.control.onDatasetChange = (obj, option) => {
|
||||
$P.renderList(obj.${infoPrefix}Total, option);
|
||||
|
||||
$("#paging--${pageName}").setPagingInfo({
|
||||
list : $P.control.dataset
|
||||
, prefix : "paging--${pageName}"
|
||||
, start : obj.${infoPrefix}Start
|
||||
, totalSize : obj.${infoPrefix}Total
|
||||
, fetchSize : obj.${infoPrefix}Fetch
|
||||
, func : "pageObject['${pageName}'].control.load({index})"
|
||||
});
|
||||
|
||||
|
||||
};
|
||||
|
||||
// 현재 선택 자료 변경 이벤트
|
||||
$P.control.onCurrentChange = item => {
|
||||
if (!item) return;
|
||||
|
||||
let key = item.data.SNDNG_ID;
|
||||
|
||||
$("#tbody--${pageName}").setCurrentRow(key);
|
||||
};
|
||||
|
||||
// 선택(체크) 변경 이벤트
|
||||
$P.control.onSelectionChange = (selected) => {
|
||||
let ${infoPrefix}List = $P.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()));
|
||||
});
|
||||
|
||||
// 선택 대상 등록 버튼
|
||||
$("#btnCreateSlctnTrgt--${pageName}").prop("disabled", keys.length < 1);
|
||||
|
||||
// DataTables(그리드) 전체 선택(checkbox)
|
||||
if (keys.length < 1) {
|
||||
$("#DataTables_Table_0--${pageName} th input[type='checkbox']").prop("checked", false); // 체크 해제
|
||||
} else if (keys.length == ${infoPrefix}List.length) {
|
||||
$("#DataTables_Table_0--${pageName} th input[type='checkbox']").prop("checked", true); // 체크 설정
|
||||
} else {
|
||||
$("#DataTables_Table_0--${pageName} th input[type='checkbox']").prop("checked", false); // 체크 해제
|
||||
}
|
||||
};
|
||||
|
||||
// 고지서 발송 등록 dialog
|
||||
$P.control.getInfo = (params) => {
|
||||
if (!params) return;
|
||||
|
||||
let dialogTitle = "";
|
||||
|
||||
if (params.callPurpose == "create") {
|
||||
dialogTitle = $P.control.prefixName + " 등록";
|
||||
} else if (params.callPurpose == "update") {
|
||||
dialogTitle = $P.control.prefixName + " 수정";
|
||||
} else {
|
||||
dialogTitle = $P.control.prefixName + " 정보";
|
||||
}
|
||||
|
||||
|
||||
ajax.get({
|
||||
url : $P.control.urls.getInfo
|
||||
, data : params || {}
|
||||
, success : resp => {
|
||||
dialog.open({
|
||||
id : $P.control.prefixed("Dialog")
|
||||
, title : dialogTitle
|
||||
, content : resp
|
||||
, size : $P.control.infoSize
|
||||
, onClose : () => { $P.fnRefreshList(); }
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* DataTables 이벤트
|
||||
**************************************************************************/
|
||||
// DataTables에 click, dbclick 이벤트
|
||||
$P.renderList = (totalSize, option) => {
|
||||
let ${infoPrefix}List = $P.control.dataset;
|
||||
let empty = ${infoPrefix}List.empty;
|
||||
let clsForTask = $("#frmSearch--${pageName} input[name='taskSeCd']:checked").val().toLowerCase(); // 소문자
|
||||
|
||||
// 업무별 그리드 td
|
||||
let foundContent = document.getElementById("${infoPrefix}Row--${pageName}").content;
|
||||
let foundTr = $(foundContent).find("tr")[0].cloneNode(false);
|
||||
let foundTds = $(foundContent).find("." + clsForTask + ",.cmn");
|
||||
|
||||
foundTds.each(function() {
|
||||
foundTr.appendChild(this.cloneNode(true));
|
||||
});
|
||||
|
||||
//
|
||||
let replacer = (str, dataItem) => str
|
||||
.replace(/{onclick}/gi, "pageObject['${pageName}'].control.setCurrent('" + dataItem.getValue("SNDNG_ID") + "');")
|
||||
.replace(/{ondblclick}/gi, "pageObject['${pageName}'].control.getInfo('" + dataItem.getValue("SNDNG_ID") + "');");
|
||||
|
||||
let trs = empty ? [document.getElementById("${infoPrefix}NotFound--${pageName}").content.querySelector("." + clsForTask + ",.cmn").outerHTML]
|
||||
: ${infoPrefix}List.inStrings(foundTr.outerHTML, replacer);
|
||||
|
||||
let noMore = (${infoPrefix}List.length >= totalSize);
|
||||
let initScroll = ($P.control.query.pageNum < 2);
|
||||
if(option != null && option.reloaded){
|
||||
initScroll = false;
|
||||
}
|
||||
$("#table-responsive--${pageName}")[0].changeContent(trs.join(), initScroll, noMore);
|
||||
|
||||
|
||||
// checkbox 체크 해제
|
||||
$("#DataTables_Table_0--${pageName} th input[type='checkbox']").prop("checked", false);
|
||||
|
||||
//보안모드
|
||||
fn_securityModeToggle($("#securityMode--top").is(":checked"));
|
||||
}
|
||||
|
||||
// DataTables에 스크롤이 맨 밑으로 이동했을 때 이벤트
|
||||
$P.scrollDataList = () => {
|
||||
$P.control.load($P.control.query.pageNum + 1);
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 사용자 함수(function)
|
||||
**************************************************************************/
|
||||
// 검색 자료 재조회
|
||||
$P.fnRefreshList = () => {
|
||||
$P.control.query.crdnIds = null;
|
||||
|
||||
$P.control.reload({all : true});
|
||||
}
|
||||
|
||||
// 사용자검색 callback
|
||||
$P.callbackFindUser = (userId, userNm) => {
|
||||
$("#schRgtrCd--${pageName}").val(userId); // 사용자 ID
|
||||
$("#schRgtrNm--${pageName}").val(userNm); // 사용자 명
|
||||
}
|
||||
|
||||
// 개별총정보 dialog
|
||||
$P.getTotalInfo = (crdnId) => {
|
||||
if (typeof crdnId == "undefined" || crdnId == null || crdnId == "") return;
|
||||
|
||||
let params = {
|
||||
callControlName : "pageObject['${pageName}'].control"
|
||||
, sggCd : $("#sggCd--${pageName}").val()
|
||||
, taskSeCd : $("#frmSearch--${pageName} 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"
|
||||
, init : () => { }
|
||||
, onClose : () => { }
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 버튼 clickEvent
|
||||
**************************************************************************/
|
||||
// 업무 구분 변경
|
||||
$P.fnResetAndChangeBiz = (taskSeCd) => {
|
||||
// 업무 구분 코드
|
||||
if (typeof taskSeCd == "undefined" || taskSeCd == null || taskSeCd == "") {
|
||||
taskSeCd = $("#layout-navbar input[name='taskSeCd']:checked").val();
|
||||
}
|
||||
|
||||
// 초기 기본 설정
|
||||
$P.initForm();
|
||||
// 기본 데이터 설정
|
||||
$P.initData(taskSeCd);
|
||||
// 업무 구분별 설정
|
||||
$P.setTask(taskSeCd);
|
||||
|
||||
// dataset 초기화
|
||||
$P.control.dataset.clear();
|
||||
}
|
||||
|
||||
// 검색 버튼 이벤트
|
||||
$P.fnSearchList = () => {
|
||||
// 검색조건
|
||||
// 검색조건
|
||||
$P.control.query = $P.formFields.get();
|
||||
$P.control.query.fetchSize = $P.control.defaultFetchSize; // 한번에 조회되는 자료 건수
|
||||
|
||||
$P.control.query.sndngSeCdFrom = "03"; // 발송 구분 코드 - 03 부과고지서
|
||||
$P.control.query.sndngSeCdTo = "08"; // 발송 구분 코드 - 08 체납고지서
|
||||
$P.control.query.delYn = "N"; // 삭제 여부
|
||||
|
||||
$P.control.load(1);
|
||||
}
|
||||
|
||||
// 엑셀 버튼 이벤트
|
||||
$P.fnExcel = () => {
|
||||
if ($P.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)")
|
||||
, getCellDefsForPrivacyCell);
|
||||
|
||||
$P.control.query.cellDefs = cellDefs;
|
||||
|
||||
$P.control.download();
|
||||
}
|
||||
|
||||
// 사용자검색 버튼 클릭 이벤트
|
||||
$P.fnGetFindUser = () => {
|
||||
let params = {
|
||||
openerPageName: "${pageName}"
|
||||
, callbackFuncName: "pageObject['${pageName}']['callbackFindUser']"
|
||||
}
|
||||
|
||||
ajax.get({
|
||||
url: wctx.url("/user/user02/010/main.do") + "?openerPageName=${pageName}"
|
||||
, data: params || {}
|
||||
, success: resp => {
|
||||
dialog.open({
|
||||
id: "userDialog--${pageName}"
|
||||
, title: "사용자 검색"
|
||||
, content: resp
|
||||
, size: "lg"
|
||||
, init: () => { setDialogZindex(); }
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// 선택 발송대상 등록 버튼 이벤트
|
||||
$P.fnCreateSlctnTrgt = (title) => {
|
||||
// 선택 자료
|
||||
let selected = $P.control.dataset.getKeys("selected");
|
||||
|
||||
if (selected.length < 1) return;
|
||||
|
||||
// 파라미터 설정
|
||||
let params = $P.control.query; // 검색 조건
|
||||
params.callPurpose = "create"; // 호출 용도 (등록)
|
||||
params.title = title; // 타이틀
|
||||
params.crdnIds = selected.join(","); // Ids
|
||||
params.sndngSeCd = "03"; // 발송 구분 코드(FIM047) - 03 부과고지서
|
||||
params.rsndYn = "N"; // 재발송 여부
|
||||
params.delYn = "N"; // 삭제 여부
|
||||
|
||||
$P.control.getInfo(params);
|
||||
}
|
||||
|
||||
// 전체 발송대상 등록 버튼 이벤트
|
||||
$P.fnCreateWholTrgt = (title) => {
|
||||
if ($P.control.dataset.empty) {
|
||||
dialog.alert({
|
||||
content : "검색된 자료가 없습니다."
|
||||
, onOK : () => { }
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
// 파라미터 설정
|
||||
let params = $P.control.query; // 검색 조건
|
||||
params.callPurpose = "create"; // 호출 용도 (등록)
|
||||
params.title = title; // 타이틀
|
||||
params.sndngSeCd = "03"; // 발송 구분 코드 - 03 부과고지서
|
||||
params.rsndYn = "N"; // 재발송 여부
|
||||
params.delYn = "N"; // 삭제 여부
|
||||
|
||||
$P.control.getInfo(params);
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 초기 셋팅
|
||||
**************************************************************************/
|
||||
// 이벤트 설정
|
||||
$P.setEvent = () => {
|
||||
// 기본 버튼 이벤트
|
||||
$("#btnReset--${pageName}").on("click", () => $P.fnResetAndChangeBiz()); // 초기화
|
||||
$("#btnSearch--${pageName}").on("click", () => $P.fnSearchList()); // 검색
|
||||
$("#btnExcel--${pageName}").on("click", () => $P.fnExcel()); // 엑셀
|
||||
$("#btnFindUser--${pageName}").on("click", () => $P.fnGetFindUser()); // 사용자 검색
|
||||
|
||||
// 동적검색에서 엔터(Enter) 키를 누르면 검색한다.
|
||||
$("#term--${pageName}").onEnterPress(function() {
|
||||
$P.fnSearchList();
|
||||
});
|
||||
|
||||
// form-date 항목에서 키보드로 입력시 날짜 포맷팅 적용
|
||||
$("#frmSearch--${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);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// 선택 대상 등록 버튼 이벤트
|
||||
$("#btnCreateSlctnTrgt--${pageName}").on("click", function() {
|
||||
$P.fnCreateSlctnTrgt($(this).attr("title"));
|
||||
});
|
||||
// 전체 대상 등록 버튼 이벤트
|
||||
$("#btnCreateWholTrgt--${pageName}").on("click", function() {
|
||||
$P.fnCreateWholTrgt($(this).attr("title"));
|
||||
});
|
||||
|
||||
// DataTables width 변경 조정
|
||||
fnMakeResizableTable($("#table-responsive--${pageName}")[0]);
|
||||
|
||||
// DataTables 스크롤 이벤트 생성
|
||||
fnMakeScrollableTable($("#table-responsive--${pageName}")[0], $P.scrollDataList);
|
||||
}
|
||||
|
||||
// 초기 화면 설정
|
||||
$P.initForm = () => {
|
||||
// 화면 초기화
|
||||
$("#frmSearch--${pageName}")[0].reset();
|
||||
|
||||
// input, select 초기화
|
||||
let searchForm = $("#frmSearch--${pageName}");
|
||||
searchForm.find("input[type='radio']").not("[name='taskSeCd']").prop("checked", false);
|
||||
searchForm.find("input[type='checkbox']").prop("checked", false);
|
||||
searchForm.find("input[type='text']").val("");
|
||||
searchForm.find("input[type='hidden']").val("");
|
||||
searchForm.find("select").each(function() { $(this).find("option:eq(0)").prop("selected", true); });
|
||||
|
||||
// 최고 관리자 경우 업무구분을 선택할 수 있도록 하자.
|
||||
$("#frmSearch--${pageName} input[name='taskSeCd']").each(function(i) {
|
||||
$(this).prop("disabled", "true");
|
||||
});
|
||||
|
||||
// 달력 초기화
|
||||
initDatepicker("frmSearch--${pageName}");
|
||||
$("#schSndngYmdFrom--${pageName}").datepicker("setDate", new Date());
|
||||
$("#schSndngYmdTo--${pageName}").datepicker("setDate", new Date());
|
||||
|
||||
// 동적 검색
|
||||
$("#byOutput--${pageName}").val("동적 검색");
|
||||
// 사용자 이름
|
||||
$("#schRgtrNm--${pageName}").prop("readonly", true);
|
||||
}
|
||||
|
||||
// 기본 데이터 설정
|
||||
$P.initData = (taskSeCd) => {
|
||||
// 시군구 코드
|
||||
$("#sggCd--${pageName}").val("${sggCd}");
|
||||
// 업무 구분 코드
|
||||
$("#frmSearch--${pageName} input[name='taskSeCd'][value='" + taskSeCd + "']").prop("checked", true);
|
||||
|
||||
// 일자
|
||||
$("#schSndngYmdFrom--${pageName}").datepicker("setDate", DateUtil.getDateDay(-7).date);
|
||||
$("#schSndngYmdTo--${pageName}").datepicker("setDate", new Date());
|
||||
}
|
||||
|
||||
// 업무 구분별 설정
|
||||
$P.setTask = (taskSeCd) => {
|
||||
let clsForTask = taskSeCd.toLowerCase();
|
||||
|
||||
// 업무별 조회조건
|
||||
renderForTask("frmSearch--${pageName}", clsForTask);
|
||||
|
||||
// 업무별 그리드 th
|
||||
let colContent = document.getElementById("${infoPrefix}Col--${pageName}").content;
|
||||
let cols = $(colContent).find("." + clsForTask + ",.cmn");
|
||||
let colsOuterHTML = "";
|
||||
|
||||
cols.each(function() {
|
||||
colsOuterHTML += this.outerHTML;
|
||||
});
|
||||
$("#table-responsive--${pageName}")[0].changeColumn(colsOuterHTML);
|
||||
|
||||
// URL 설정
|
||||
$P.setURL(taskSeCd);
|
||||
}
|
||||
|
||||
// 업무구분에 따른 URL 설정
|
||||
$P.setURL = (taskSeCd) => {
|
||||
$P.control.urls.load = wctx.url("/" + taskSeCd + $P.PrefixUrl + "/090/list.do"); // 검색
|
||||
$P.control.urls.remove = wctx.url("/" + taskSeCd + $P.PrefixUrl + "/090/remove.do"); // 삭제
|
||||
$P.control.urls.getInfo = wctx.url("/" + taskSeCd + $P.PrefixUrl + "/100/info.do"); // 고지서 세부 내용
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 최초 실행 함수
|
||||
**************************************************************************/
|
||||
// 1. 이벤트 설정
|
||||
$P.setEvent();
|
||||
|
||||
// 2. 초기 설정 및 업무 구분 변경
|
||||
$P.fnResetAndChangeBiz($("#layout-navbar input[name='taskSeCd']:checked").val());
|
||||
|
||||
// 3. 보안모드
|
||||
fn_securityModeToggle($("#securityMode--top").is(":checked"));
|
||||
});
|
||||
|
||||
</script>
|
||||
@ -1,425 +0,0 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
|
||||
<c:set var="prefixName" scope="request">고지서 발송 대상 등록</c:set>
|
||||
|
||||
<!-- inner page html -->
|
||||
<div class="content-wrapper">
|
||||
<!-- Content -->
|
||||
<div class="container flex-grow-1 px-0">
|
||||
|
||||
<!-- Page Body -->
|
||||
<div class="card">
|
||||
<!-- 상단 버튼 -->
|
||||
<div class="container-page-btn">
|
||||
<button type="button" class="btn btn-outline-dark w-px-120" id="btnReset--${pageName}" title="초기화">
|
||||
초기화
|
||||
</button>
|
||||
<span class="container-window-btn-right">
|
||||
<button type="button" class="btn btn-search w-px-120" id="btnLinkNxrpSpclB01--${pageName}" title="세외수입 체납상세 조회">
|
||||
세외수입 조회
|
||||
</button>
|
||||
</span>
|
||||
</div> <!-- 상단 버튼 -->
|
||||
|
||||
<!-- 검색 조건 영역 -->
|
||||
<form id="frmSearch--${pageName}" name="frmSearch">
|
||||
<!-- hidden -->
|
||||
<input type="hidden" id="sggCd--${pageName}" name="sggCd" data-map="SGG_CD" />
|
||||
<input type="hidden" id="taskSeCd--${pageName}" name="taskSeCd" data-map="TASK_SE_CD" />
|
||||
|
||||
<!-- 메인 조건 -->
|
||||
<div class="container-search">
|
||||
<div class="row g-1">
|
||||
<!-- 총건수 / 총금액 -->
|
||||
<div class="col-md-12 text-end">
|
||||
<label class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">총건수 / 총금액</label>
|
||||
<input type="text" class="form-control w-px-80" id="tnocs--${pageName}" name="tnocs" autocomplete="off" readonly />
|
||||
<input type="text" class="form-control w-px-140" id="gramt--${pageName}" name="gramt" autocomplete="off" readonly />
|
||||
</div>
|
||||
<!-- 부과 일자 -->
|
||||
<div class="col-md-6">
|
||||
<label for="schLevyYmd--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end required">부과일자</label>
|
||||
<input type="text" class="form-control form-date" id="schLevyYmd--${pageName}" name="schLevyYmd"
|
||||
data-fmt-type="day" autocomplete="off" title="날짜 선택" maxlength="10" required />
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
</div>
|
||||
<!-- 최초 납기 일자 -->
|
||||
<div class="col-md-6">
|
||||
<label for="schFrstDudtYmd--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end required">최초납기일자</label>
|
||||
<input type="text" class="form-control form-date" id="schFrstDudtYmd--${pageName}" name="schFrstDudtYmd"
|
||||
data-fmt-type="day" autocomplete="off" title="날짜 선택" maxlength="10" required />
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
</div>
|
||||
<!-- 회계연도 -->
|
||||
<div class="col-md-6">
|
||||
<label for="schFyr--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end required">회계연도</label>
|
||||
<input type="text" class="form-control w-px-80" id="schFyr--${pageName}" name="schFyr" maxlength="4" autocomplete="off" required />
|
||||
</div>
|
||||
<!-- 부과 번호 -->
|
||||
<div class="col-md-6">
|
||||
<label for="schLevyNoFrom--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end required">부과번호</label>
|
||||
<input type="text" class="form-control w-px-80" id="schLevyNoFrom--${pageName}" name="schLevyNoFrom" maxlength="6" value="000000" autocomplete="off" required /> ~
|
||||
<input type="text" class="form-control w-px-80" id="schLevyNoTo--${pageName}" name="schLevyNoTo" maxlength="6" value="999999" autocomplete="off" required />
|
||||
</div>
|
||||
<!-- 위반항목 -->
|
||||
<div class="col-12">
|
||||
<label for="schVltnId--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">위반항목</label>
|
||||
<select class="form-select w-px-160" id="schVltnId--${pageName}" name="schVltnId">
|
||||
<option value="">전체</option>
|
||||
<c:forEach items="${FIM004List}" var="item">
|
||||
<option value="${item.code}">${item.value}</option>
|
||||
</c:forEach>
|
||||
</select>
|
||||
</div>
|
||||
</div> <!-- <div class="row g-1"> -->
|
||||
</div> <!-- <div class="container-search"> -->
|
||||
</form>
|
||||
<!-- 검색 조건 영역 -->
|
||||
</div> <!-- <div class="card"> -->
|
||||
|
||||
<p></p>
|
||||
|
||||
<div class="card">
|
||||
<!-- 입력 영역 -->
|
||||
<form id="frmEdit--${pageName}" name="frmEdit">
|
||||
<div class="row g-1">
|
||||
<!-- 발송 구분 -->
|
||||
<div class="col-4">
|
||||
<label for="sndngSeCd--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end required">발송구분</label>
|
||||
<select class="form-select w-px-160" id="sndngSeCd--${pageName}" name="sndngSeCd">
|
||||
<c:forEach items="${FIM047List}" var="item">
|
||||
<option value="${item.code}">${item.value}</option>
|
||||
</c:forEach>
|
||||
</select>
|
||||
</div>
|
||||
<!-- 발송 일자 -->
|
||||
<div class="col-md-4">
|
||||
<label for="sndngYmd--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end required">발송일자</label>
|
||||
<input type="text" class="form-control form-date" id="sndngYmd--${pageName}" name="sndngYmd"
|
||||
data-fmt-type="day" autocomplete="off" title="날짜 선택" maxlength="10" required />
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
</div>
|
||||
<!-- 발송 종료 일자 -->
|
||||
<div class="col-md-4">
|
||||
<label for="sndngEndYmd--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end required">납기일자</label>
|
||||
<input type="text" class="form-control form-date" id="sndngEndYmd--${pageName}" name="sndngEndYmd"
|
||||
data-fmt-type="day" autocomplete="off" title="날짜 선택" maxlength="10" required />
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
</div>
|
||||
<!-- 문서 번호 -->
|
||||
<div class="col-md-12">
|
||||
<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-30" id="docNo--${pageName}" name="docNo" />
|
||||
</div>
|
||||
<!-- 제목 명 -->
|
||||
<div class="col-md-12">
|
||||
<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-85" id="ttlNm--${pageName}" name="ttlNm" />
|
||||
</div>
|
||||
<!-- 기타 내용 -->
|
||||
<div class="col-md-12">
|
||||
<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-85" id="etcCn--${pageName}" name="etcCn" rows="2" data-maxlengthb="1000"></textarea>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<!-- 입력 영역 -->
|
||||
|
||||
<!-- 업무 버튼 및 건수 표시 -->
|
||||
<div>
|
||||
<span class="container-page-btn">
|
||||
<!-- 업무 버튼 -->
|
||||
<span class="container-window-btn-right">
|
||||
<button type="button" class="btn btn-primary w-px-120" id="btnSave--${pageName}" title="저장">
|
||||
저장
|
||||
</button>
|
||||
</span>
|
||||
</span>
|
||||
</div> <!-- 업무 버튼 및 건수 표시 -->
|
||||
</div> <!-- <div class="card"> -->
|
||||
<!-- Page Body -->
|
||||
|
||||
</div> <!-- <div class="container flex-grow-1 px-0"> -->
|
||||
<!-- Content -->
|
||||
</div> <!-- / inner page html <div class="content-wrapper"> -->
|
||||
|
||||
<script>
|
||||
/**************************************************************************
|
||||
* Global Variable
|
||||
**************************************************************************/
|
||||
pageObject["${pageName}"] = {};
|
||||
|
||||
// 공통 코드
|
||||
var FIM004 = new CommonCodes(${FIM004}, true); // 주정차위반 내역 코드
|
||||
var FIM005 = new CommonCodes(${FIM005}, true); // 전용차로위반 내역 코드
|
||||
var FIM006 = new CommonCodes(${FIM006}, true); // 장애인주차위반 내역 코드
|
||||
var FIM061 = new CommonCodes(${FIM061}, true); // 전기차 충전구역 및 충전방해 위반 코드
|
||||
var FIM064 = new CommonCodes(${FIM064}, true); // 화물자동차 밤샘주차 위반 코드
|
||||
|
||||
/**************************************************************************
|
||||
* script 진입
|
||||
**************************************************************************/
|
||||
$(document).ready(function() {
|
||||
// pageObject
|
||||
let $P = pageObject["${pageName}"];
|
||||
|
||||
// infoDialog 호출 용도(view 조회(편집불가), create 등록, update 수정)
|
||||
$P.callPurpose = "${callPurpose}";
|
||||
// FormFields
|
||||
$P.formFields = new FimsFormFields("#frmSearch--${pageName}");
|
||||
$P.formEditFields = new FimsFormFields("#frmEdit--${pageName}");
|
||||
|
||||
/**************************************************************************
|
||||
* DatasetControl
|
||||
**************************************************************************/
|
||||
$P.control = new DatasetControl({
|
||||
prefix: "nhtTrgt"
|
||||
, prefixName: "고지서 발송 대상"
|
||||
, infoSize: "xxl"
|
||||
, keymapper: info => info ? info.CRDN_ID : ""
|
||||
, dataGetter: obj => obj.${infoPrefix}List
|
||||
, appendData: true
|
||||
});
|
||||
// $P.control 설정
|
||||
$P.control.defaultFetchSize = FETCH_XS; // 1 페이지당 조회되는 자료 건수 index.jsp에서 확인 FETCH_XS = 30
|
||||
$P.control.query = { pageNum : 1, fetchSize : $P.control.defaultFetchSize };
|
||||
$P.control.beforeCurrent = null;
|
||||
|
||||
|
||||
/**************************************************************************
|
||||
* DatasetControl 이벤트
|
||||
**************************************************************************/
|
||||
// 저장 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
|
||||
, init: () => { setDialogZindex(); }
|
||||
, onOK: () => { }
|
||||
});
|
||||
|
||||
if (resp.saved) {
|
||||
dialog.close($P.control.prefix + "Dialog--${openerPageName}");
|
||||
}
|
||||
}
|
||||
|
||||
// 저장
|
||||
$P.control.save = (info) => {
|
||||
if (!info) return;
|
||||
|
||||
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)
|
||||
});
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 사용자 함수(function)
|
||||
**************************************************************************/
|
||||
// 세외수입 과태료 대장 상세 조회
|
||||
$P.linkNxrpSpclB01 = (params) => {
|
||||
if (!params) return;
|
||||
|
||||
ajax.post({
|
||||
url: wctx.url("/" + params.taskSeCd + "${infoPrefixUrl}" + "/991/nxrpB01List.do")
|
||||
, data: params || {}
|
||||
, success: resp => {
|
||||
// 연계 성공이면 저장 버튼 활성화
|
||||
if (resp.saved) {
|
||||
$("#schLevyYmd--${pageName}").prop("disabled", true); // 부과일자
|
||||
$("#schFrstDudtYmd--${pageName}").prop("disabled", true); // 최초납기일자
|
||||
$("#schFyr--${pageName}").prop("disabled", true); // 회계연도
|
||||
$("#schLevyNoFrom--${pageName}").prop("disabled", true); // 시작 부과번호
|
||||
$("#schLevyNoTo--${pageName}").prop("disabled", true); // 종료 부과번호
|
||||
$("#schVltnId--${pageName}").prop("disabled", true); // 위반항목
|
||||
|
||||
// enabled
|
||||
$("#btnSave--${pageName}").prop("disabled", false); // 저장 버튼
|
||||
}
|
||||
|
||||
// S 또는 F 를 버튼 title 로 변경하여 메시지 출력
|
||||
let showMessage = resp.rtnMsg.replace(/[S]|[F]/g, params.title);
|
||||
|
||||
dialog.alert({
|
||||
content: showMessage
|
||||
, init: () => { setDialogZindex(); }
|
||||
, onOK: () => { }
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 버튼 clickEvent
|
||||
**************************************************************************/
|
||||
// 제목 변경
|
||||
$P.fnChangeTitle = () => {
|
||||
let title = "";
|
||||
let sndngYmd = $("#sndngYmd--${pageName}").val();
|
||||
|
||||
sndngYmd = sndngYmd.replace(/-/g, "");
|
||||
title = sndngYmd.substring(0, 4) + "년";
|
||||
title = title + " " + sndngYmd.substring(4, 6) + "월";
|
||||
title = title + " " + $("#sndngSeCd--${pageName} :selected").text();
|
||||
|
||||
$("#ttlNm--${pageName}").val(title);
|
||||
}
|
||||
|
||||
// 세외수입 과태료 대장 등록 자료 상세 조회 버튼 이벤트
|
||||
$P.fnLinkNxrpSpclB01 = (title) => {
|
||||
// validate 확인
|
||||
if (!customValidate($("#frmEdit--${pageName}").find("input, select, textarea"))) return;
|
||||
|
||||
dialog.alert({
|
||||
content: title + "를 조회하시겠습니까?"
|
||||
, onOK: () => {
|
||||
// 파라미터(params) 설정
|
||||
let params = $P.formFields.get();
|
||||
params.callPurpose = "update";
|
||||
params.title = title; // 타이틀
|
||||
params.sggCd = $("#sggCd--${pageName}").val(); // 시군구 코드
|
||||
params.taskSeCd = $("#taskSeCd--${pageName}").val(); // 업무 구분 코드
|
||||
|
||||
$P.linkNxrpSpclB01(params);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// 저장 버튼 이벤트
|
||||
$P.fnSave = () => {
|
||||
// validate 확인
|
||||
if (!customValidate($("#frmEdit--${pageName}").find("input, select, textarea"))) return;
|
||||
|
||||
dialog.alert({
|
||||
content : $P.control.prefixName + " 정보를 저장하시겠습니까?"
|
||||
, init: () => { setDialogZindex(); }
|
||||
, onOK : () => {
|
||||
// 검색조건과 저장 파라미터 객체를 합친다.
|
||||
let params = $.extend({}, $P.formEditFields.get(), $P.formFields.get());
|
||||
params.sndngRegSeCd = "01"; // 발송 등록 구분 코드(SNDNG_REG_SE_CD) - 01: 일괄
|
||||
params.rsndYn = "N"; // 재발송 여부
|
||||
params.delYn = "N"; // 삭제 여부
|
||||
|
||||
$P.control.save(params);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 초기 셋팅
|
||||
**************************************************************************/
|
||||
// 이벤트 설정
|
||||
$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);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// 발송일자 변경 이벤트
|
||||
$("#sndngYmd--${pageName}").on("change", function() {
|
||||
$P.fnChangeTitle();
|
||||
|
||||
// 납기일자 변경
|
||||
let sndngYmd = $("#sndngYmd--${pageName}").val();
|
||||
sndngYmd = sndngYmd.replace(/-/g, "");
|
||||
$("#sndngEndYmd--${pageName}").datepicker("setDate", new Date(sndngYmd.substring(0, 4), sndngYmd.substring(4, 6), 0)); // 납기일자
|
||||
});
|
||||
// 발송구분 변경 이벤트
|
||||
$("#sndngSeCd--${pageName}").on("change", function() {
|
||||
$P.fnChangeTitle();
|
||||
});
|
||||
|
||||
// 업무 버튼 이벤트
|
||||
$("#btnLinkNxrpSpclB01--${pageName}").on("click", function() {
|
||||
$P.fnLinkNxrpSpclB01($(this).attr("title")); // 세외수입 체납상세정보 조회
|
||||
});
|
||||
$("#btnSave--${pageName}").on("click", () => $P.fnSave()); // 저장 버튼
|
||||
}
|
||||
|
||||
// 초기 화면 설정
|
||||
$P.initForm = () => {
|
||||
// 화면 초기화
|
||||
$("#frmSearch--${pageName}")[0].reset();
|
||||
|
||||
// 기본 데이터 설정
|
||||
$("#sggCd--${pageName}").val("${sggCd}"); // 시군구 코드
|
||||
$("#taskSeCd--${pageName}").val("${taskSeCd}"); // 업무 구분 코드
|
||||
initDatepicker("frmSearch--${pageName}"); // 달력 초기화
|
||||
$("#schLevyYmd--${pageName}").datepicker("setDate", new Date()); // 부과일자
|
||||
$("#schFrstDudtYmd--${pageName}").datepicker("setDate", new Date()); // 최초납기일자
|
||||
$("#schFyr--${pageName}").val(new Date().getFullYear()); // 회계연도
|
||||
$("#schLevyNoFrom--${pageName}").val("000001"); // 시작 부과번호
|
||||
$("#schLevyNoTo--${pageName}").val("999999"); // 종료 부과번호
|
||||
initDatepicker("frmEdit--${pageName}"); // 달력 초기화
|
||||
$("#sndngYmd--${pageName}").datepicker("setDate", new Date()); // 발송 일자
|
||||
$("#sndngEndYmd--${pageName}").datepicker("setDate", new Date()); // 발송 종료 일자
|
||||
$("#sndngSeCd--${pageName}").val("03").prop("selected", true); // 발송구분
|
||||
$("#sndngYmd--${pageName}").datepicker("setDate", new Date()); // 발송일자
|
||||
|
||||
$("#btnSave--${pageName}").prop("disabled", true); // 저장
|
||||
|
||||
// 업무 구분별 설정
|
||||
$P.setTask("${taskSeCd}");
|
||||
}
|
||||
|
||||
// 업무 구분별 설정
|
||||
$P.setTask = (taskSeCd) => {
|
||||
// 업무구분에 따른 URL 설정
|
||||
$P.control.urls.create = wctx.url("/" + taskSeCd + "${infoPrefixUrl}" + "/100/createList.do"); // 등록
|
||||
|
||||
// 업무별 조회조건
|
||||
renderForTask("frmSearch--${pageName}", taskSeCd.toLowerCase());
|
||||
|
||||
// 업무에 따른 위반 내용
|
||||
let vltnIdCode = [];
|
||||
if (taskSeCd == "PVS") { // 주정차 위반
|
||||
vltnIdCode = FIM004.list();
|
||||
} else if (taskSeCd == "BPV") { // 전용차로 위반
|
||||
vltnIdCode = FIM005.list();
|
||||
} else if (taskSeCd == "DPV") { // 장애인 전용
|
||||
vltnIdCode = FIM006.list();
|
||||
} else if (taskSeCd == "ECA") { // 전기차 주차 위반
|
||||
vltnIdCode = FIM061.list();
|
||||
} else if (taskSeCd == "PES") { // 밤샘 주차 위반
|
||||
vltnIdCode = FIM064.list();
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
|
||||
// 위반 항목
|
||||
$("#schVltnId--${pageName}").empty();
|
||||
$("#schVltnId--${pageName}").append("<option value=''>" + "전체" + "</option>");
|
||||
$(vltnIdCode).each(function(index, item) {
|
||||
$("#schVltnId--${pageName}").append("<option value='" + vltnIdCode[index].code +"'>" + vltnIdCode[index].value + "</option>");
|
||||
});
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 최초 실행 함수
|
||||
**************************************************************************/
|
||||
// 1. 이벤트 설정
|
||||
$P.setEvent();
|
||||
|
||||
// 2. 초기 화면 설정
|
||||
$P.initForm();
|
||||
|
||||
// 3. 보안모드
|
||||
fn_securityModeToggle($("#securityMode--top").is(":checked"));
|
||||
});
|
||||
|
||||
</script>
|
||||
@ -1,699 +0,0 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
|
||||
<c:set var="prefixName" scope="request">고지서 발송 현황</c:set>
|
||||
|
||||
<!-- inner page html -->
|
||||
<div class="content-wrapper">
|
||||
<!-- Content -->
|
||||
<div class="container-xxl flex-grow-1 px-0">
|
||||
<div class="card wrapper-list">
|
||||
<!-- 상단 버튼 -->
|
||||
<div class="container-page-btn">
|
||||
<button type="button" class="btn btn-outline-dark w-px-120" id="btnReset--${pageName}" title="초기화">
|
||||
초기화
|
||||
</button>
|
||||
<span class="container-window-btn-right">
|
||||
<button type="button" class="btn btn-search w-px-120" id="btnSearch--${pageName}" title="검색">
|
||||
검색
|
||||
</button>
|
||||
<button type="button" class="btn btn-excel w-px-120" id="btnExcel--${pageName}" title="엑셀">
|
||||
엑셀
|
||||
</button>
|
||||
</span>
|
||||
</div>
|
||||
<!-- 상단 버튼 -->
|
||||
|
||||
<!-- 검색 조건 영역 -->
|
||||
<form id="frmSearch--${pageName}" name="frmSearch">
|
||||
<!-- hidden -->
|
||||
<input type="hidden" id="sggCd--${pageName}" name="sggCd" />
|
||||
|
||||
<!-- 메인 조건 -->
|
||||
<div class="container-search">
|
||||
<div class="row g-1">
|
||||
<!-- 업무 구분 -->
|
||||
<div class="col-12">
|
||||
<span class="form-label fw-bold form-search-title w-px-120 text-end">업무구분</span>
|
||||
<span class="form-search-linebox">
|
||||
<c:forEach items="${taskListForSgg}" var="item">
|
||||
<label>
|
||||
<input type="radio" class="form-check-input" name="taskSeCd" alt="업무구분"
|
||||
value="${item.code}" onchange="pageObject['${pageName}'].fnResetAndChangeBiz(this.value);">
|
||||
${item.value}
|
||||
</label>
|
||||
</c:forEach>
|
||||
</span>
|
||||
</div>
|
||||
<!-- 발송일자 -->
|
||||
<div class="col-6">
|
||||
<label class="form-label fw-bold form-search-title w-px-120 text-end" for="schSndngYmdFrom--${pageName}">발송일자</label>
|
||||
<span class="form-search-linebox">
|
||||
<input type="text" class="form-control form-date" id="schSndngYmdFrom--${pageName}" name="schSndngYmdFrom"
|
||||
data-fmt-type="day" title="시작 날짜 선택" />
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
~
|
||||
<input type="text" class="form-control form-date" id="schSndngYmdTo--${pageName}" name="schSndngYmdTo"
|
||||
data-fmt-type="day" title="종료 날짜 선택" />
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
</span>
|
||||
</div>
|
||||
<!-- 발송 등록 구분 코드 -->
|
||||
<div class="col-6">
|
||||
<label class="form-label fw-bold form-search-title w-px-120 text-end" for="schSndngRegSeCd--${pageName}">등록구분</label>
|
||||
<select class="form-select w-px-80" id="schSndngRegSeCd--${pageName}" name="schSndngRegSeCd">
|
||||
<option value="">전체</option>
|
||||
<c:forEach items="${FIM067List}" var="item">
|
||||
<option value="${item.code}">${item.value}</option>
|
||||
</c:forEach>
|
||||
</select>
|
||||
</div>
|
||||
<!-- 발송 구분 코드 -->
|
||||
<div class="col-6">
|
||||
<label class="form-label fw-bold form-search-title w-px-120 text-end" for="schSndngSeCd--${pageName}">발송구분</label>
|
||||
<select class="form-select w-px-160" id="schSndngSeCd--${pageName}" name="schSndngSeCd">
|
||||
<option value="">전체</option>
|
||||
<c:forEach items="${FIM047List}" var="item">
|
||||
<option value="${item.code}">${item.value}</option>
|
||||
</c:forEach>
|
||||
</select>
|
||||
</div>
|
||||
<!-- 동적검색 -->
|
||||
<div class="col-6">
|
||||
<input type="hidden" id="by--${pageName}" name="by" />
|
||||
<input type="text" class="form-control fw-bold w-px-120 text-end" id="byOutput--${pageName}" value="동적 검색" readonly />
|
||||
<input type="hidden" id="mainOption--${pageName}" name="mainOption" />
|
||||
<input type="hidden" id="subOption--${pageName}" name="subOption" />
|
||||
<input type="text" class="form-control w-px-400" id="term--${pageName}" name="term" autocomplete="off" />
|
||||
<!-- 상세 검색조건 버튼 -->
|
||||
<span class="flr">
|
||||
<button type="button" class="btn btn-open-detail" data-bs-toggle="collapse" data-bs-target="#searchDetail--${pageName}">
|
||||
<i class="bx bx-chevron-down"></i>
|
||||
상세검색
|
||||
</button>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div> <!-- 메인 조건 -->
|
||||
|
||||
<!-- 상세 조건 -->
|
||||
<div id="searchDetail--${pageName}" class="container-search container-search-detail collapse">
|
||||
<div class="row g-1">
|
||||
<!-- 등록일자, 수정일자 -->
|
||||
<div class="col-6">
|
||||
<select class="form-select w-px-120 text-center" id="schRegDateOpt--${pageName}" name="schRegDateOpt">
|
||||
<option value="regDt">등록일자</option>
|
||||
<option value="mdfcnDt">수정일자</option>
|
||||
</select>
|
||||
<span class="form-search-linebox">
|
||||
<input type="text" class="form-control form-date" id="schRegDateFrom--${pageName}" name="schRegDateFrom"
|
||||
data-fmt-type="day" title="시작 날짜 선택" />
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
~
|
||||
<input type="text" class="form-control form-date" id="schRegDateTo--${pageName}" name="schRegDateTo"
|
||||
data-fmt-type="day" title="종료 날짜 선택">
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
</span>
|
||||
</div>
|
||||
<!-- 등록자명, 수정자명 -->
|
||||
<div class="col-6">
|
||||
<select class="form-select w-px-120 text-center" id="schRgtrOpt--${pageName}" name="schRgtrOpt">
|
||||
<option value="rgtr">등록자</option>
|
||||
<option value="mdfr">수정자</option>
|
||||
</select>
|
||||
<input type="hidden" id="schRgtrCd--${pageName}" name="schRgtrCd" />
|
||||
<input type="text" class="form-control w-px-160" id="schRgtrNm--${pageName}" name="schRgtrNm" />
|
||||
<button type="button" class="btn btn-sm btn-outline-dark" id="btnFindUser--${pageName}" title="사용자 검색">검색</button>
|
||||
</div>
|
||||
</div>
|
||||
</div> <!-- 상세 조건 -->
|
||||
</form>
|
||||
<!-- 검색 조건 영역 -->
|
||||
|
||||
<!-- 업무 버튼 및 건수 표시 -->
|
||||
<div>
|
||||
<span class="container-page-btn">
|
||||
<!-- 건수, 페이지 표시 -->
|
||||
<div class="d-flex flex-row justify-content-between">
|
||||
<span class="dataTables_info" id="paging--${pageName}PagingInfo" role="status" aria-live="polite"></span>
|
||||
<ul class="pagination pagination-primary" id="paging--${pageName}">
|
||||
</ul>
|
||||
</div>
|
||||
<!-- 업무 버튼 -->
|
||||
<span class="container-window-btn-right">
|
||||
<button type="button" class="btn btn-primary w-px-120" id="btnCreate--${pageName}" title="고지서 발송 등록">
|
||||
발송 등록
|
||||
</button>
|
||||
<button type="button" class="btn btn-primary w-px-120" id="btnRemove--${pageName}" title="고지서 발송 삭제">
|
||||
발송 삭제
|
||||
</button>
|
||||
</span>
|
||||
</span>
|
||||
</div>
|
||||
<!-- 업무 버튼 및 건수 표시 -->
|
||||
|
||||
<!-- DataTables(그리드) -->
|
||||
<div class="card-datatable text-nowrap">
|
||||
<div class="dataTables_wrapper dt-bootstrap5 no-footer" id="DataTables_Table_0_wrapper--${pageName}">
|
||||
<div class="table-responsive ox-scroll oy-scroll h-px-500" id="table-responsive--${pageName}">
|
||||
<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">
|
||||
<tr id="theadTr--${pageName}"
|
||||
data-by="by--${pageName}" data-by-output="byOutput--${pageName}" data-main-option="mainOption--${pageName}" data-sub-option="subOption--${pageName}">
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="tbody--${pageName}">
|
||||
</tbody>
|
||||
|
||||
<template id="${infoPrefix}Col--${pageName}">
|
||||
<th class="cmn" style="width: 72px;">No.</th>
|
||||
<th class="cmn" style="width: 56px;"><input type="checkbox" class="form-check-input" id="gridAllCheckbox--${pageName}" onchange="pageObject['${pageName}'].control.select(this.checked);" /></th>
|
||||
<th class="cmn" style="width: 160px;" onclick="searchFromGridTitle('TASK_SE_CD', this.innerText, 'codeValue', 'FIM054');">업무구분</th>
|
||||
<th class="cmn" style="width: 100px;" onclick="searchFromGridTitle('SNDNG_REG_SE_CD', this.innerText, 'codeValue', 'FIM067');">등록구분</th>
|
||||
<th class="cmn" style="width: 160px;" onclick="searchFromGridTitle('SNDNG_SE_CD', this.innerText, 'codeValue', 'FIM067');">발송구분</th>
|
||||
<th class="cmn" style="width: 160px;" onclick="searchFromGridTitle('VLTN_ARTCL', this.innerText, 'match', 'part');">위반항목</th>
|
||||
<th class="cmn" style="width: 120px;" onclick="searchFromGridTitle('SNDNG_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: 140px;" onclick="searchFromGridTitle('GRAMT', 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: 140px;">등록사용자</th>
|
||||
<th class="cmn" style="width: 180px;">수정일시</th>
|
||||
<th class="cmn" style="width: 140px;">수정사용자</th>
|
||||
<th class="cmn dummy-th"></th>
|
||||
</template>
|
||||
<template id="${infoPrefix}Row--${pageName}">
|
||||
<tr data-key="{SNDNG_ID}">
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{ROW_NUM}</td>
|
||||
<td class="cmn text-center"><input type="checkbox" class="form-check-input" name="gridCheckbox" value="{SNDNG_ID}" onchange="pageObject['${pageName}'].control.select('{SNDNG_ID}', this.checked);" /></td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{TASK_SE_NM}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{SNDNG_REG_SE_NM}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{SNDNG_SE_NM}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{VLTN_ARTCL}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{SNDNG_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}">{GRAMT}</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}">{RGTR_NM}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{MDFCN_DT}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{MDFR_NM}</td>
|
||||
<td class="cmn dummy-td"></td>
|
||||
</tr>
|
||||
</template>
|
||||
<template id="${infoPrefix}NotFound--${pageName}">
|
||||
<tr class="odd">
|
||||
<td valign="top" colspan="17" class="dataTables_empty text-center">${prefixName} 정보를 찾지 못했습니다.</td>
|
||||
</tr>
|
||||
</template>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- DataTables(그리드) -->
|
||||
</div> <!-- <div class="card wrapper-list"> -->
|
||||
</div> <!-- <div class="container-xxl flex-grow-1 px-0"> -->
|
||||
<!-- Content -->
|
||||
|
||||
<div class="content-backdrop fade"></div>
|
||||
</div>
|
||||
<!-- / inner page html <div class="content-wrapper"> -->
|
||||
|
||||
<script>
|
||||
/**************************************************************************
|
||||
* Global Variable
|
||||
**************************************************************************/
|
||||
pageObject["${pageName}"] = {};
|
||||
|
||||
// 공통 코드
|
||||
var FIM047 = new CommonCodes(${FIM047}, true);
|
||||
|
||||
/**************************************************************************
|
||||
* script 진입
|
||||
**************************************************************************/
|
||||
$(document).ready(function() {
|
||||
// pageObject
|
||||
let $P = pageObject["${pageName}"];
|
||||
|
||||
// FormFields
|
||||
$P.formFields = new FimsFormFields("#frmSearch--${pageName}");
|
||||
|
||||
/**************************************************************************
|
||||
* DatasetControl
|
||||
**************************************************************************/
|
||||
$P.control = new DatasetControl({
|
||||
prefix: "nhtSndng"
|
||||
, prefixName: "고지서 발송 현황"
|
||||
, keymapper: info => info ? info.SNDNG_ID : ""
|
||||
, dataGetter: obj => obj.${infoPrefix}List
|
||||
, appendData: true
|
||||
, infoSize: "xxl"
|
||||
, formats: {
|
||||
SNDNG_YMD: dateFormat
|
||||
, SNDNG_END_YMD: dateFormat
|
||||
, TNOCS: numberFormat
|
||||
, GRAMT: numberFormat
|
||||
, REG_DT: datetimeFormat
|
||||
, MDFCN_DT: datetimeFormat
|
||||
}
|
||||
});
|
||||
// $P.control 설정
|
||||
$P.control.defaultFetchSize = FETCH_XS; // 1 페이지당 조회되는 자료 건수 index.jsp에서 확인 FETCH_XS = 30
|
||||
$P.control.query = { pageNum : 1, fetchSize : $P.control.defaultFetchSize };
|
||||
$P.control.beforeCurrent = null;
|
||||
|
||||
|
||||
/**************************************************************************
|
||||
* DatasetControl 이벤트
|
||||
**************************************************************************/
|
||||
// Dataset 변경 이벤트
|
||||
$P.control.onDatasetChange = (obj, option) => {
|
||||
$P.renderList(obj.${infoPrefix}Total, option);
|
||||
|
||||
$("#paging--${pageName}").setPagingInfo({
|
||||
list: $P.control.dataset
|
||||
, prefix: "paging--${pageName}"
|
||||
, start: obj.${infoPrefix}Start
|
||||
, totalSize: obj.${infoPrefix}Total
|
||||
, fetchSize: obj.${infoPrefix}Fetch
|
||||
, func: "pageObject['${pageName}'].control.load({index})"
|
||||
});
|
||||
|
||||
|
||||
};
|
||||
|
||||
// 현재 선택 자료 변경 이벤트
|
||||
$P.control.onCurrentChange = (item) => {
|
||||
if (!item) return;
|
||||
|
||||
let key = item.data.SNDNG_ID;
|
||||
|
||||
$("#tbody--${pageName}").setCurrentRow(key);
|
||||
};
|
||||
|
||||
// 선택(체크) 변경 이벤트
|
||||
$P.control.onSelectionChange = (selected) => {
|
||||
let ${infoPrefix}List = $P.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()));
|
||||
});
|
||||
|
||||
// 삭제 버튼
|
||||
$("#btnRemove--${pageName}").prop("disabled", keys.length < 1);
|
||||
|
||||
// DataTables(그리드) 전체 선택(checkbox)
|
||||
if (keys.length < 1) {
|
||||
$("#DataTables_Table_0--${pageName} th input[type='checkbox']").prop("checked", false); // 체크 해제
|
||||
} else if (keys.length == ${infoPrefix}List.length) {
|
||||
$("#DataTables_Table_0--${pageName} th input[type='checkbox']").prop("checked", true); // 체크 설정
|
||||
} else {
|
||||
$("#DataTables_Table_0--${pageName} th input[type='checkbox']").prop("checked", false); // 체크 해제
|
||||
}
|
||||
};
|
||||
|
||||
// 상세정보 dialog
|
||||
$P.control.getInfo = (sndngId) => {
|
||||
if (typeof sndngId == "undefined" || sndngId == null || sndngId == "") return;
|
||||
|
||||
let params = {
|
||||
title: $P.control.prefixName + " 상세 정보" // 타이틀
|
||||
, callPurpose: "view" // 호출 용도
|
||||
, fetchSize: $P.control.defaultFetchSize // 한번에 조회되는 자료 건수
|
||||
, pageNum: 1 // 페이지 번호
|
||||
, sggCd: $("#sggCd--${pageName}").val() // 시군구 코드
|
||||
, taskSeCd: $("#frmSearch--${pageName} input[name='taskSeCd']:checked").val() // 업무 구분 코드
|
||||
, sndngId: sndngId // 발송 ID
|
||||
}
|
||||
|
||||
ajax.get({
|
||||
url: wctx.url("/" + params.taskSeCd + "${infoPrefixUrl}" + "/120/info.do") + "?openerPageName=${pageName}"
|
||||
, data: params || {}
|
||||
, success: resp => {
|
||||
dialog.open({
|
||||
id: $P.control.prefixed("DtlDialog--${pageName}")
|
||||
, title: params.title
|
||||
, content: resp
|
||||
, size: $P.control.infoSize
|
||||
, init: () => { setDialogZindex(); }
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// 삭제 callback
|
||||
$P.control.onRemove = (resp) => {
|
||||
let btnTitle = $("#btnRemove--${pageName}").attr("title");
|
||||
let showMessage = resp.rtnMsg.replace(/[S]|[F]/g, btnTitle);
|
||||
|
||||
// 메시지 출력
|
||||
dialog.alert({
|
||||
content: showMessage
|
||||
, init: () => { setDialogZindex(); }
|
||||
, onOK: () => { }
|
||||
});
|
||||
|
||||
if (resp.saved) { $P.fnRefreshList(); } // 자료 재조회
|
||||
}
|
||||
|
||||
// 삭제
|
||||
$P.control.remove = (params) => {
|
||||
if (!params) return;
|
||||
|
||||
ajax.post({
|
||||
url: wctx.url("/" + params.taskSeCd + "${infoPrefixUrl}" + "/110/remove.do")
|
||||
, data: params
|
||||
, success: resp => $P.control.onRemove(resp)
|
||||
});
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* DataTables 이벤트
|
||||
**************************************************************************/
|
||||
// DataTables에 click, dbclick 이벤트
|
||||
$P.renderList = (totalSize, option) => {
|
||||
let ${infoPrefix}List = $P.control.dataset;
|
||||
let empty = ${infoPrefix}List.empty;
|
||||
|
||||
let trs = empty ?
|
||||
[document.getElementById("${infoPrefix}NotFound--${pageName}").innerHTML] : <%-- from template#${infoPrefix}NotFound --%>
|
||||
${infoPrefix}List.inStrings(
|
||||
document.getElementById("${infoPrefix}Row--${pageName}").innerHTML, <%-- from template#${infoPrefix}Row --%>
|
||||
(str, dataItem) => str
|
||||
.replace(/{onclick}/gi, "pageObject['${pageName}'].control.setCurrent('" + dataItem.getValue("SNDNG_ID") + "');")
|
||||
.replace(/{ondblclick}/gi, "pageObject['${pageName}'].control.getInfo('" + dataItem.getValue("SNDNG_ID") + "');")
|
||||
);
|
||||
|
||||
let noMore = (${infoPrefix}List.length >= totalSize);
|
||||
let initScroll = ($P.control.query.pageNum < 2);
|
||||
if(option != null && option.reloaded){
|
||||
initScroll = false;
|
||||
}
|
||||
$("#table-responsive--${pageName}")[0].changeContent(trs.join(), initScroll, noMore);
|
||||
|
||||
// checkbox 체크 해제
|
||||
$("#DataTables_Table_0--${pageName} th input[type='checkbox']").prop("checked", false);
|
||||
|
||||
//보안모드
|
||||
fn_securityModeToggle($("#securityMode--top").is(":checked"));
|
||||
}
|
||||
|
||||
// DataTables에 스크롤이 맨 밑으로 이동했을 때 이벤트
|
||||
$P.scrollDataList = () => {
|
||||
|
||||
|
||||
$P.control.load($P.control.query.pageNum + 1);
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 사용자 함수(function)
|
||||
**************************************************************************/
|
||||
// 검색 자료 재조회
|
||||
$P.fnRefreshList = () => {
|
||||
|
||||
$P.control.reload({all : true});
|
||||
}
|
||||
|
||||
// 사용자검색 callback
|
||||
$P.callbackFindUser = (userId, userNm) => {
|
||||
$("#schRgtrCd--${pageName}").val(userId); // 사용자 ID
|
||||
$("#schRgtrNm--${pageName}").val(userNm); // 사용자 명
|
||||
}
|
||||
|
||||
// 발송 등록 dialog -> callback 추가
|
||||
$P.getNhtSndngInfo = (params) => {
|
||||
if (!params) return;
|
||||
|
||||
ajax.get({
|
||||
url: wctx.url("/" + params.taskSeCd + "${infoPrefixUrl}" + "/100/info.do") + "?openerPageName=${pageName}"
|
||||
, data: params || {}
|
||||
, success: resp => {
|
||||
dialog.open({
|
||||
id: "nhtTrgtDialog--${pageName}"
|
||||
, title: "고지서 발송 대상"
|
||||
, content: resp
|
||||
, size: "lg"
|
||||
, init: () => { setDialogZindex(); }
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// 삭제사유 callback
|
||||
$P.callbackRsn = (obj) => {
|
||||
// 서버에 전송할 data(파라미터) 생성
|
||||
let params = {};
|
||||
let selected = $P.control.dataset.getKeys("selected");
|
||||
|
||||
params.sggCd = $("#sggCd--${pageName}").val(); // 시군구 코드
|
||||
params.taskSeCd = $("#frmSearch--${pageName} input[name='taskSeCd']:checked").val(); // 업무 구분 코드
|
||||
params.sndngIds = selected.join(","); // 발송 Ids
|
||||
params.delRsn = obj.reason; // 삭제 사유
|
||||
|
||||
$P.control.remove(params);
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 버튼 clickEvent
|
||||
**************************************************************************/
|
||||
// 업무 구분 변경
|
||||
$P.fnResetAndChangeBiz = (taskSeCd) => {
|
||||
// 업무 구분 코드
|
||||
if (typeof taskSeCd == "undefined" || taskSeCd == null || taskSeCd == "") {
|
||||
taskSeCd = $("#layout-navbar input[name='taskSeCd']:checked").val();
|
||||
}
|
||||
|
||||
// 초기 기본 설정
|
||||
$P.initForm(taskSeCd);
|
||||
// 업무 구분별 설정
|
||||
$P.setTask(taskSeCd);
|
||||
|
||||
// dataset 초기화
|
||||
$P.control.dataset.clear();
|
||||
}
|
||||
|
||||
// 사용자검색 버튼 클릭 이벤트
|
||||
$P.fnGetFindUser = () => {
|
||||
let params = {
|
||||
openerPageName: "${pageName}"
|
||||
, callbackFuncName: "pageObject['${pageName}']['callbackFindUser']"
|
||||
}
|
||||
|
||||
ajax.get({
|
||||
url: wctx.url("/user/user02/010/main.do") + "?openerPageName=${pageName}"
|
||||
, data: params || {}
|
||||
, success: resp => {
|
||||
dialog.open({
|
||||
id: "userDialog--${pageName}"
|
||||
, title: "사용자 검색"
|
||||
, content: resp
|
||||
, size: "lg"
|
||||
, init: () => { setDialogZindex(); }
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// 검색 버튼 이벤트
|
||||
$P.fnSearchList = () => {
|
||||
// 검색조건
|
||||
$P.control.query = $P.formFields.get();
|
||||
$P.control.query.fetchSize = $P.control.defaultFetchSize; // 한번에 조회되는 자료 건수
|
||||
$P.control.query.delYn = "N"; // 삭제 여부
|
||||
|
||||
// 발송구분이 "전체"로 선택 되었다면..
|
||||
if ($P.control.query.schSndngSeCd == "") {
|
||||
$P.control.query.sndngSeCdFrom = "03"; // 발송 구분 코드(FIM047) - 03: 고지서
|
||||
$P.control.query.sndngSeCdTo = "08"; // 발송 구분 코드(FIM047) - 08: 체납고지서
|
||||
}
|
||||
|
||||
$P.control.load(1);
|
||||
}
|
||||
|
||||
// 엑셀 버튼 이벤트
|
||||
$P.fnExcel = () => {
|
||||
if ($P.control.dataset.empty) {
|
||||
dialog.alert({
|
||||
content: "검색된 자료가 없습니다."
|
||||
, init: () => { setDialogZindex(); }
|
||||
, 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)")
|
||||
, getCellDefsForPrivacyCell);
|
||||
|
||||
$P.control.query.cellDefs = cellDefs;
|
||||
|
||||
$P.control.download();
|
||||
}
|
||||
|
||||
// 등록 버튼 이벤트
|
||||
$P.fnCreate = (title) => {
|
||||
let params = {
|
||||
callPurpose: "create"
|
||||
, title: title // 타이틀
|
||||
, sggCd: $("#sggCd--${pageName}").val() // 시군구 코드
|
||||
, taskSeCd: $("#frmSearch--${pageName} input[name='taskSeCd']:checked").val() // 업무 구분 코드
|
||||
};
|
||||
|
||||
$P.getNhtSndngInfo(params);
|
||||
}
|
||||
|
||||
// 발송 삭제 버튼 이벤트
|
||||
$P.fnRemove = (title) => {
|
||||
// 선택 자료
|
||||
let selected = $P.control.dataset.getKeys("selected");
|
||||
|
||||
if (selected.length < 1) {
|
||||
dialog.alert({
|
||||
content: "선택하신 " + $P.control.prefixName + " 정보가 없습니다."
|
||||
, init: () => { setDialogZindex(); }
|
||||
, onOK: () => { }
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
// 삭제 메세지 확인
|
||||
dialog.alert({
|
||||
content: "선택하신 " + selected.length + "건의 " + $P.control.prefixName + " 정보를 삭제하시겠습니까?"
|
||||
, onOK: () => {
|
||||
// 삭제 사유 입력
|
||||
fetch(wctx.url("/resources/html/inputRsnDialog.html"))
|
||||
.then(function(resp) { return resp.text(); })
|
||||
.then(function(template) {
|
||||
dialog.open({
|
||||
id: "inputDelRsnDialog"
|
||||
, title: title
|
||||
, size: "lg"
|
||||
, content: template
|
||||
, init: () => { setDialogZindex(); }
|
||||
, onOK: () => {
|
||||
$P.callbackRsn({ reason: $("#reason").val() });
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 초기 셋팅
|
||||
**************************************************************************/
|
||||
// 이벤트 설정
|
||||
$P.setEvent = () => {
|
||||
// 기본 버튼 이벤트
|
||||
$("#btnReset--${pageName}").on("click", () => $P.fnResetAndChangeBiz()); // 초기화
|
||||
$("#btnSearch--${pageName}").on("click", () => $P.fnSearchList()); // 검색
|
||||
$("#btnExcel--${pageName}").on("click", () => $P.fnExcel()); // 엑셀
|
||||
$("#btnFindUser--${pageName}").on("click", () => $P.fnGetFindUser()); // 사용자 검색
|
||||
|
||||
// 동적검색에서 엔터(Enter) 키를 누르면 검색한다.
|
||||
$("#term--${pageName}").onEnterPress(function() {
|
||||
$P.fnSearchList();
|
||||
});
|
||||
|
||||
// form-date 항목에서 키보드로 입력시 날짜 포맷팅 적용
|
||||
$("#frmSearch--${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);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// 업무 버튼 이벤트
|
||||
$("#btnCreate--${pageName}").on("click", function() {
|
||||
$P.fnCreate($(this).attr("title")); // 고지서 발송 등록
|
||||
});
|
||||
$("#btnRemove--${pageName}").on("click", function() {
|
||||
$P.fnRemove($(this).attr("title")); // 고지서 발송 삭제
|
||||
});
|
||||
|
||||
// DataTables width 변경 조정
|
||||
fnMakeResizableTable($("#table-responsive--${pageName}")[0]);
|
||||
|
||||
// DataTables 스크롤 이벤트 생성
|
||||
fnMakeScrollableTable($("#table-responsive--${pageName}")[0], $P.scrollDataList);
|
||||
}
|
||||
|
||||
// 초기 화면 설정
|
||||
$P.initForm = (taskSeCd) => {
|
||||
// 화면 초기화
|
||||
$("#frmSearch--${pageName}")[0].reset();
|
||||
|
||||
// input, select 초기화
|
||||
let searchForm = $("#frmSearch--${pageName}");
|
||||
searchForm.find("input[type='radio']").not("[name='taskSeCd']").prop("checked", false);
|
||||
searchForm.find("input[type='checkbox']").prop("checked", false);
|
||||
searchForm.find("input[type='text']").val("");
|
||||
searchForm.find("input[type='hidden']").val("");
|
||||
searchForm.find("select").each(function() { $(this).find("option:eq(0)").prop("selected", true); });
|
||||
|
||||
// 최고 관리자 경우 업무구분을 선택할 수 있도록 하자.
|
||||
$("#frmSearch--${pageName} input[name='taskSeCd']").each(function(i) {
|
||||
$(this).prop("disabled", "true");
|
||||
});
|
||||
|
||||
// 기본 데이터 설정
|
||||
$("#sggCd--${pageName}").val("${sggCd}"); // 시군구 코드
|
||||
$("#frmSearch--${pageName} input[name='taskSeCd'][value='" + taskSeCd + "']").prop("checked", true); // 업무 구분 코드
|
||||
initDatepicker("frmSearch--${pageName}"); // 달력 초기화
|
||||
$("#schSndngYmdFrom--${pageName}").datepicker("setDate", DateUtil.getDateDay(-7).date);
|
||||
$("#schSndngYmdTo--${pageName}").datepicker("setDate", new Date());
|
||||
$("#byOutput--${pageName}").val("동적 검색"); // 동적 검색
|
||||
$("#schRgtrNm--${pageName}").prop("readonly", true); // 사용자 이름
|
||||
}
|
||||
|
||||
// 업무 구분별 설정
|
||||
$P.setTask = (taskSeCd) => {
|
||||
// 업무구분에 따른 URL 설정
|
||||
$P.control.urls.load = wctx.url("/" + taskSeCd + "${infoPrefixUrl}" + "/110/list.do"); // 검색
|
||||
|
||||
// 발송 구분에 "전체" 추가
|
||||
let reasons = FIM047.list().filter(reason => reason.code >= "03" && reason.code <= "08");
|
||||
$("#schSndngSeCd--${pageName}").empty();
|
||||
$("#schSndngSeCd--${pageName}").append("<option value=''>" + "전체" + "</option>");
|
||||
$("#schSndngSeCd--${pageName}").append(reasons.map(reason => "<option value='" + reason.code + "'>" + reason.value + "</option>").join());
|
||||
|
||||
// 업무별 조회조건
|
||||
renderForTask("frmSearch--${pageName}", taskSeCd.toLowerCase());
|
||||
|
||||
// 업무별 그리드 th
|
||||
let colContent = document.getElementById("${infoPrefix}Col--${pageName}").content;
|
||||
let cols = $(colContent).find("." + taskSeCd.toLowerCase() + ",.cmn");
|
||||
let colsOuterHTML = "";
|
||||
|
||||
cols.each(function() {
|
||||
colsOuterHTML += this.outerHTML;
|
||||
});
|
||||
$("#table-responsive--${pageName}")[0].changeColumn(colsOuterHTML);
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 최초 실행 함수
|
||||
**************************************************************************/
|
||||
// 1. 이벤트 설정
|
||||
$P.setEvent();
|
||||
|
||||
// 2. 초기 설정 및 업무 구분 변경
|
||||
$P.fnResetAndChangeBiz($("#layout-navbar input[name='taskSeCd']:checked").val());
|
||||
|
||||
// 3. 보안모드
|
||||
fn_securityModeToggle($("#securityMode--top").is(":checked"));
|
||||
});
|
||||
|
||||
</script>
|
||||
@ -1,494 +0,0 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
|
||||
<c:set var="prefixName" scope="request">고지서 발송 현황 상세 정보</c:set>
|
||||
|
||||
<!-- inner page html -->
|
||||
<div class="content-pop">
|
||||
<!-- Content -->
|
||||
<div class="container flex-grow-1 px-0">
|
||||
|
||||
<!-- Page Body -->
|
||||
<div class="card">
|
||||
<!-- 입력 영역 -->
|
||||
<form id="frmEdit--${pageName}" name="frmEdit">
|
||||
<input type="hidden" id="sggCd--${pageName}" name="sggCd" />
|
||||
<input type="hidden" id="taskSeCd--${pageName}" name="taskSeCd" />
|
||||
<input type="hidden" id="sndngId--${pageName}" name="sndngId" />
|
||||
</form>
|
||||
<!-- 입력 영역 -->
|
||||
|
||||
<!-- 업무 버튼 및 건수 표시 -->
|
||||
<div>
|
||||
<span class="container-page-btn">
|
||||
<!-- 건수, 페이지 표시 -->
|
||||
<div class="d-flex flex-row justify-content-between">
|
||||
<span class="dataTables_info" id="paging--${pageName}PagingInfo" role="status" aria-live="polite"></span>
|
||||
<ul class="pagination pagination-primary" id="paging--${pageName}">
|
||||
</ul>
|
||||
</div>
|
||||
<!-- 업무 버튼 -->
|
||||
<span class="container-window-btn-right">
|
||||
<button type="button" class="btn btn-excel w-px-120" id="btnExcel--${pageName}" title="엑셀 저장">
|
||||
엑셀 저장
|
||||
</button>
|
||||
<button type="button" class="btn btn-primary w-px-120" id="btnPrintNhtPdf01--${pageName}" title="고지서 출력(PDF-A4)">
|
||||
고지서 출력(PDF-A4)
|
||||
</button>
|
||||
<button type="button" class="btn btn-primary w-px-120" id="btnPrintNhtPdf02--${pageName}" title="고지서 출력(PDF-Letter)">
|
||||
고지서 출력(PDF-Letter)
|
||||
</button>
|
||||
<button type="button" class="btn btn-primary w-px-120" id="btnPrintNhtOutsourcing--${pageName}" title="고지서 출력(외주파일)">
|
||||
고지서 출력(외주파일)
|
||||
</button>
|
||||
<button type="button" class="btn btn-primary w-px-120" id="btnCreateSndbk--${pageName}" title="반송 등록">
|
||||
반송 확인
|
||||
</button>
|
||||
</span>
|
||||
</span>
|
||||
</div> <!-- 업무 버튼 및 건수 표시 -->
|
||||
|
||||
<!-- DataTables(그리드) -->
|
||||
<div class="card-datatable text-nowrap">
|
||||
<div class="dataTables_wrapper dt-bootstrap5 no-footer" id="DataTables_Table_0_wrapper--${pageName}">
|
||||
<div class="table-responsive ox-scroll oy-scroll h-px-500" id="table-responsive--${pageName}">
|
||||
<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">
|
||||
<tr id="theadTr--${pageName}"
|
||||
data-by="by--${pageName}" data-by-output="byOutput--${pageName}" data-main-option="mainOption--${pageName}" data-sub-option="subOption--${pageName}">
|
||||
<th class="cmn" style="width: 72px;">No.</th>
|
||||
<th class="cmn" style="width: 120px;">발송상태</th>
|
||||
<th class="cmn" style="width: 160px;">등기번호</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: 100px;">우편번호</th>
|
||||
<th class="cmn" style="width: 280px;">주소</th>
|
||||
<th class="cmn" style="width: 320px;">상세주소</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: 200px;">수령인관계</th>
|
||||
<th class="cmn" style="width: 180px;">단속일시</th>
|
||||
<th class="cmn" style="width: 160px;">차량번호</th>
|
||||
<th class="cmn" style="width: 160px;">단속법정동</th>
|
||||
<th class="cmn" style="width: 280px;">단속장소</th>
|
||||
<th class="cmn" style="width: 100px;">회계연도</th>
|
||||
<th class="cmn" style="width: 100px;">부과번호</th>
|
||||
<th class="cmn" style="width: 120px;">부과일자</th>
|
||||
<th class="cmn" style="width: 120px;">납기일자</th>
|
||||
<th class="cmn" style="width: 120px;">과태료금액</th>
|
||||
<th class="cmn" style="width: 120px;">본세</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: 140px;">등록사용자</th>
|
||||
<th class="cmn" style="width: 180px;">수정일시</th>
|
||||
<th class="cmn" style="width: 140px;">수정사용자</th>
|
||||
<th class="cmn dummy-th"></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="tbody--${pageName}">
|
||||
</tbody>
|
||||
<template id="${infoPrefix}Row--${pageName}">
|
||||
<tr data-key="{SNDNG_DTL_ID}">
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{ROW_NUM}</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}">{SNDNG_YMD}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{SNDNG_END_YMD}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{RCPN_NM}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{RCPN_ZIP}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{RCPN_ADDR}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{RCPN_DTL_ADDR}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{DLVR_YMD}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{DLVR_TM}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{UNDLVR_RSN_NM}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{ACTL_RCPN_NM}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{RCPN_REL_NM}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{CRDN_DT}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{VHRNO}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{CRDN_STDG_NM}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{CRDN_PLC}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{FYR}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{LEVY_NO}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{LEVY_YMD}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{DUDT_YMD}</td>
|
||||
<td class="cmn text-end" onclick="{onclick}" ondblclick="{ondblclick}">{FFNLG_AMT}</td>
|
||||
<td class="cmn text-end" onclick="{onclick}" ondblclick="{ondblclick}">{PCPTAX}</td>
|
||||
<td class="cmn text-end" onclick="{onclick}" ondblclick="{ondblclick}">{ADAMT}</td>
|
||||
<td class="cmn text-end" onclick="{onclick}" ondblclick="{ondblclick}">{SUM_AMT}</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}">{MDFCN_DT}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{MDFR_NM}</td>
|
||||
<td class="cmn dummy-td"></td>
|
||||
</tr>
|
||||
</template>
|
||||
<template id="${infoPrefix}NotFound--${pageName}">
|
||||
<tr class="odd">
|
||||
<td valign="top" colspan="31" class="dataTables_empty text-center">${prefixName} 정보를 찾지 못했습니다.</td>
|
||||
</tr>
|
||||
</template>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div> <!-- DataTables(그리드) -->
|
||||
</div> <!-- <div class="card"> -->
|
||||
<!-- Page Body -->
|
||||
|
||||
<span id="tempArea--${pageName}" hidden></span>
|
||||
</div> <!-- <div class="container flex-grow-1 px-0"> -->
|
||||
<!-- Content -->
|
||||
</div>
|
||||
<!-- / inner page html <div class="content-wrapper"> -->
|
||||
|
||||
<script>
|
||||
/**************************************************************************
|
||||
* Global Variable
|
||||
**************************************************************************/
|
||||
pageObject["${pageName}"] = {};
|
||||
|
||||
/**************************************************************************
|
||||
* script 진입
|
||||
**************************************************************************/
|
||||
$(document).ready(function() {
|
||||
// pageObject
|
||||
let $P = pageObject["${pageName}"];
|
||||
|
||||
// infoDialog 호출 용도(view 조회(편집불가), create 등록, update 수정)
|
||||
$P.callPurpose = "${callPurpose}";
|
||||
// FormFields
|
||||
$P.formFields = new FimsFormFields("#frmEdit--${pageName}");
|
||||
|
||||
/**************************************************************************
|
||||
* DatasetControl
|
||||
**************************************************************************/
|
||||
$P.control = new DatasetControl({
|
||||
prefix: "nhtSndngDtl"
|
||||
, prefixName: "고지서 발송 상세"
|
||||
, keymapper: info => info ? info.SNDNG_DTL_ID : ""
|
||||
, dataGetter: obj => obj.${infoPrefix}List
|
||||
, appendData: true
|
||||
, formats: {
|
||||
SNDNG_YMD: dateFormat
|
||||
, SNDNG_END_YMD: dateFormat
|
||||
, DLVR_YMD: dateFormat
|
||||
, LEVY_YMD: dateFormat
|
||||
, DUDT_YMD: dateFormat
|
||||
, FFNLG_AMT: numberFormat
|
||||
, PCPTAX: numberFormat
|
||||
, ADAMT: numberFormat
|
||||
, SUM_AMT: numberFormat
|
||||
, REG_DT: datetimeFormat
|
||||
, MDFCN_DT: datetimeFormat
|
||||
}
|
||||
});
|
||||
// $P.control 설정
|
||||
$P.control.defaultFetchSize = FETCH_XS; // 1 페이지당 조회되는 자료 건수 index.jsp에서 확인 FETCH_XS = 30
|
||||
$P.control.query = { pageNum : 1, fetchSize : $P.control.defaultFetchSize };
|
||||
$P.control.beforeCurrent = null;
|
||||
|
||||
|
||||
/**************************************************************************
|
||||
* DatasetControl 이벤트
|
||||
**************************************************************************/
|
||||
// Dataset 변경 이벤트
|
||||
$P.control.onDatasetChange = (obj, option) => {
|
||||
$P.renderList(obj.${infoPrefix}Total, option);
|
||||
|
||||
$("#paging--${pageName}").setPagingInfo({
|
||||
list: $P.control.dataset
|
||||
, prefix: "paging--${pageName}"
|
||||
, start: obj.${infoPrefix}Start
|
||||
, totalSize: obj.${infoPrefix}Total
|
||||
, fetchSize: obj.${infoPrefix}Fetch
|
||||
, func: "pageObject['${pageName}'].control.load({index})"
|
||||
});
|
||||
|
||||
|
||||
};
|
||||
|
||||
// 현재 선택 자료 변경 이벤트
|
||||
$P.control.onCurrentChange = (item) => {
|
||||
if (!item) return;
|
||||
|
||||
let key = item.data.SNDNG_DTL_ID;
|
||||
|
||||
$("#tbody--${pageName}").setCurrentRow(key);
|
||||
};
|
||||
|
||||
/**************************************************************************
|
||||
* DataTables 이벤트
|
||||
**************************************************************************/
|
||||
// DataTables에 click, dbclick 이벤트
|
||||
$P.renderList = (totalSize, option) => {
|
||||
let ${infoPrefix}List = $P.control.dataset;
|
||||
let empty = ${infoPrefix}List.empty;
|
||||
|
||||
let trs = empty ?
|
||||
[document.getElementById("${infoPrefix}NotFound--${pageName}").innerHTML] : <%-- from template#${infoPrefix}NotFound --%>
|
||||
${infoPrefix}List.inStrings(
|
||||
document.getElementById("${infoPrefix}Row--${pageName}").innerHTML, <%-- from template#${infoPrefix}Row --%>
|
||||
(str, dataItem) => str
|
||||
.replace(/{onclick}/gi, "pageObject['${pageName}'].control.setCurrent('" + dataItem.getValue("SNDNG_DTL_ID") + "');")
|
||||
.replace(/{ondblclick}/gi, "pageObject['${pageName}'].getTotalInfo('" + dataItem.getValue("CRDN_ID") + "');")
|
||||
);
|
||||
|
||||
let noMore = (${infoPrefix}List.length >= totalSize);
|
||||
let initScroll = ($P.control.query.pageNum < 2);
|
||||
if(option != null && option.reloaded){
|
||||
initScroll = false;
|
||||
}
|
||||
$("#table-responsive--${pageName}")[0].changeContent(trs.join(), initScroll, noMore);
|
||||
|
||||
|
||||
//보안모드
|
||||
fn_securityModeToggle($("#securityMode--top").is(":checked"));
|
||||
}
|
||||
|
||||
// DataTables에 스크롤이 맨 밑으로 이동했을 때 이벤트
|
||||
$P.scrollDataList = () => {
|
||||
|
||||
|
||||
$P.control.load($P.control.query.pageNum + 1);
|
||||
}
|
||||
|
||||
// DataTables에 더블 클릭시 개별총정보 dialog
|
||||
$P.getTotalInfo = (crdnId) => {
|
||||
if (typeof crdnId == "undefined" || crdnId == null || crdnId == "") return;
|
||||
|
||||
let params = {
|
||||
callControlName: "pageObject['${pageName}'].control"
|
||||
, sggCd: $P.control.dataset.getValue("SGG_CD")
|
||||
, taskSeCd: $P.control.dataset.getValue("TASK_SE_CD")
|
||||
, crdnId: crdnId
|
||||
}
|
||||
|
||||
ajax.get({
|
||||
url: wctx.url("/sprt/sprt02/010/main.do")
|
||||
, data: params
|
||||
, success: resp => {
|
||||
dialog.open({
|
||||
id: "totalInfoMainDialog"
|
||||
, title: "개별총정보"
|
||||
, content: resp
|
||||
, size: "xxl"
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 사용자 함수(function)
|
||||
**************************************************************************/
|
||||
// 검색 자료 재조회
|
||||
$P.fnRefreshList = () => {
|
||||
|
||||
$P.control.reload({all : true});
|
||||
}
|
||||
|
||||
// 반송 확인(종적결과 등록)
|
||||
$P.createSndbk = (params) => {
|
||||
if (!params) return;
|
||||
|
||||
ajax.post({
|
||||
url: wctx.url("/" + params.taskSeCd + "${infoPrefixUrl}" + "/230/createSndbkList.do")
|
||||
, data: params || {}
|
||||
, success: resp => {
|
||||
let showMessage = resp.rtnMsg.replace(/[S]|[F]/g, params.title);
|
||||
|
||||
dialog.alert({
|
||||
content: showMessage
|
||||
, init: () => { setDialogZindex(); }
|
||||
, onOK: () => { $P.fnRefreshList(); } // 자료 재조회
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 버튼 clickEvent
|
||||
**************************************************************************/
|
||||
// 엑셀 버튼 이벤트
|
||||
$P.fnExcel = () => {
|
||||
if ($P.control.dataset.empty) {
|
||||
dialog.alert({
|
||||
content: "검색된 자료가 없습니다."
|
||||
, init: () => { setDialogZindex(); }
|
||||
, onOK: () => { }
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
// 검색조건
|
||||
$P.control.query = $P.formFields.get(); // 검색 조건
|
||||
$P.control.query.fetchSize = $P.control.defaultFetchSize; // 한번에 조회되는 자료 건수
|
||||
$P.control.query.delYn = "N"; // 삭제 여부
|
||||
|
||||
// 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)")
|
||||
, getCellDefsForPrivacyCell);
|
||||
|
||||
$P.control.query.cellDefs = cellDefs;
|
||||
|
||||
$P.control.download();
|
||||
}
|
||||
|
||||
// 고지서 출력 버튼 이벤트
|
||||
$P.fnMakeFileNht = (title, fileType, paper) => {
|
||||
// validate 확인
|
||||
if (!customValidate($("#frmEdit--${pageName}").find("input, select, textarea"))) return;
|
||||
|
||||
let submitParam = {
|
||||
sggCd: $P.control.dataset.getValue("SGG_CD") // 시군구 코드
|
||||
, taskSeCd: $P.control.dataset.getValue("TASK_SE_CD") // 업무 구분 코드
|
||||
, sndngId: $P.control.dataset.getValue("SNDNG_ID") // 발송 ID
|
||||
};
|
||||
|
||||
let url = "";
|
||||
let fileTypeName = "";
|
||||
|
||||
if (fileType == "pdf") {
|
||||
url = wctx.url("/" + submitParam.taskSeCd + "${infoPrefixUrl}" + "/120/makeNhtPdf.do");
|
||||
fileTypeName = "PDF 파일";
|
||||
} else if (fileType == "outsourcing") {
|
||||
url = wctx.url("/" + submitParam.taskSeCd + "${infoPrefixUrl}" + "/120/makeNhtOutsourcing.do");
|
||||
fileTypeName = "외주 요청 파일";
|
||||
}
|
||||
|
||||
let inBrowser = false;
|
||||
if (fileType == "pdf") {
|
||||
submitParam.paperSeCd = paper;
|
||||
inBrowser = true;
|
||||
}
|
||||
|
||||
if (inBrowser) {
|
||||
var parameter = toQuery(submitParam);
|
||||
var filenameInHeader = "";
|
||||
|
||||
fetch(url + "?" + parameter)
|
||||
.then((response) => {
|
||||
var header = response.headers.get('Content-Disposition');
|
||||
if(!header){
|
||||
response.json().then((responseJson)=>{
|
||||
dialog.alert({
|
||||
content: fileTypeName+" 생성 중 오류가 발생하였습니다."
|
||||
+"<br/>"
|
||||
+responseJson.description,
|
||||
init: () => { setDialogZindex(); }
|
||||
});
|
||||
});
|
||||
new Error("");
|
||||
}
|
||||
var parts = header.split(';');
|
||||
filenameInHeader = decodeURIComponent(parts[1].split('=')[1]);
|
||||
return response.blob();
|
||||
})
|
||||
.then((blob) => {
|
||||
openPDF(blob, filenameInHeader);
|
||||
})
|
||||
.catch(()=>{});
|
||||
} else {
|
||||
var parameter = toQuery(submitParam);
|
||||
document.location.href = url + "?" + parameter;
|
||||
}
|
||||
}
|
||||
|
||||
// 중복자료 삭제
|
||||
$P.fnRemoveDpcnData = () => {
|
||||
//
|
||||
}
|
||||
|
||||
// 반송(종적결과) 확인
|
||||
$P.fnCreateSndbk = () => {
|
||||
// validate 확인
|
||||
if (!customValidate($("#frmEdit--${pageName}").find("input, select, textarea"))) return;
|
||||
|
||||
dialog.alert({
|
||||
content: "종적결과를 확인하시겠습니까?"
|
||||
, onOK: () => {
|
||||
// 파리미터 설정
|
||||
let params = $P.formFields.get(); // mainQuery
|
||||
params.title = title; // 타이틀
|
||||
|
||||
$P.createSndbk(params);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 초기 셋팅
|
||||
**************************************************************************/
|
||||
// 이벤트 설정
|
||||
$P.setEvent = () => {
|
||||
// 기본 버튼 이벤트
|
||||
$("#btnExcel--${pageName}").on("click", () => $P.fnExcel()); // 엑셀
|
||||
|
||||
// 업무 버튼 이벤트
|
||||
$("#btnPrintNhtPdf01--${pageName}").on("click", function() {
|
||||
$P.fnMakeFileNht($(this).attr("title"), "pdf", "01"); // 고지서 출력(PDF-A4)
|
||||
});
|
||||
$("#btnPrintNhtPdf02--${pageName}").on("click", function() {
|
||||
$P.fnMakeFileNht($(this).attr("title"), "pdf", "01"); // 고지서 출력(PDF-Letter)
|
||||
});
|
||||
$("#btnPrintNhtOutsourcing--${pageName}").on("click", function() {
|
||||
$P.fnMakeFileNht($(this).attr("title"), "outsourcing") // 고지서 출력(외주파일)
|
||||
});
|
||||
$("#btnCreateSndbk--${pageName}").on("click", function() {
|
||||
$P.fnCreateSndbk($(this).attr("title")); // 반송 등록
|
||||
});
|
||||
|
||||
// DataTables width 변경 조정
|
||||
fnMakeResizableTable($("#table-responsive--${pageName}")[0]);
|
||||
|
||||
// DataTables 스크롤 이벤트 생성
|
||||
fnMakeScrollableTable($("#table-responsive--${pageName}")[0], $P.scrollDataList);
|
||||
|
||||
// DataTables 스크롤을 위해서 다이얼로그 화면이 생성된 후 Dataset을 설정한다.
|
||||
$("#${infoPrefix}Dialog--${openerPageName}").on("shown.bs.modal", function (e) {
|
||||
$P.control.setData({
|
||||
${infoPrefix}List: ${nhtSndngDtlList}
|
||||
, ${infoPrefix}Start: ${nhtSndngDtlStart}
|
||||
, ${infoPrefix}Fetch: ${nhtSndngDtlFetch}
|
||||
, ${infoPrefix}Total: ${nhtSndngDtlTotal}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
// 초기 화면 설정
|
||||
$P.initForm = () => {
|
||||
// 화면 초기화
|
||||
$("#frmEdit--${pageName}")[0].reset();
|
||||
|
||||
// 기본 데이터 설정
|
||||
$("#sggCd--${pageName}").val("${sggCd}"); // 시군구 코드
|
||||
$("#taskSeCd--${pageName}").val("${taskSeCd}"); // 업무 구분 코드
|
||||
$("#sndngId--${pageName}").val("${sndngId}"); // 발송 ID
|
||||
|
||||
// 업무 구분별 설정
|
||||
$P.setTask("${taskSeCd}");
|
||||
}
|
||||
|
||||
// 업무 구분별 설정
|
||||
$P.setTask = (taskSeCd) => {
|
||||
// 업무구분에 따른 URL 설정
|
||||
$P.control.urls.load = wctx.url("/" + taskSeCd + "${infoPrefixUrl}" + "/120/list.do"); // 검색
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 최초 실행 함수
|
||||
**************************************************************************/
|
||||
// 1. 이벤트 설정
|
||||
$P.setEvent();
|
||||
|
||||
// 2. 초기 화면 설정
|
||||
$P.initForm();
|
||||
|
||||
// 3. 보안모드
|
||||
fn_securityModeToggle($("#securityMode--top").is(":checked"));
|
||||
});
|
||||
|
||||
</script>
|
||||
@ -1,632 +0,0 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
|
||||
<c:set var="prefixName" scope="request">통합 반송 등록</c:set>
|
||||
|
||||
<!-- inner page html -->
|
||||
<div class="content-wrapper">
|
||||
<!-- Content -->
|
||||
<div class="container flex-grow-1 px-0">
|
||||
|
||||
<!-- Page Body -->
|
||||
<div class="card">
|
||||
<div class="wrapper-list">
|
||||
<!-- 상단 버튼 -->
|
||||
<div class="container-page-btn">
|
||||
<button type="button" class="btn btn-outline-dark w-px-120" id="btnReset--${pageName}" title="초기화">
|
||||
초기화
|
||||
</button>
|
||||
<span class="container-window-btn-right">
|
||||
<button type="button" class="btn btn-search w-px-120" id="btnSearch--${pageName}" title="검색">
|
||||
검색
|
||||
</button>
|
||||
<button type="button" class="btn btn-excel w-px-120" id="btnExcel--${pageName}" title="엑셀">
|
||||
엑셀
|
||||
</button>
|
||||
</span>
|
||||
</div> <!-- 상단 버튼 -->
|
||||
|
||||
<!-- 검색 조건 영역 -->
|
||||
<form id="frmSearch--${pageName}" name="frmSearch">
|
||||
<!-- hidden -->
|
||||
<input type="hidden" id="sggCd--${pageName}" name="sggCd" data-map="SGG_CD" />
|
||||
<input type="hidden" id="taskSeCd--${pageName}" name="taskSeCd" data-map="TASK_SE_CD" />
|
||||
|
||||
<!-- 메인 조건 -->
|
||||
<div class="container-search">
|
||||
<div class="row g-1">
|
||||
<!-- 발송 구분 -->
|
||||
<div class="col-4">
|
||||
<label class="form-label fw-bold form-search-title w-px-120 text-end" for="schSndngSeCd--${pageName}">발송구분</label>
|
||||
<select class="form-select w-px-160" id="schSndngSeCd--${pageName}" name="schSndngSeCd">
|
||||
<option value="">전체</option>
|
||||
<c:forEach items="${FIM047List}" var="item">
|
||||
<option value="${item.code}">${item.value}</option>
|
||||
</c:forEach>
|
||||
</select>
|
||||
</div>
|
||||
<!-- 발송 일자 -->
|
||||
<div class="col-4">
|
||||
<label class="form-label fw-bold form-search-title w-px-120 text-end" for="schSndngYmd--${pageName}">발송일자</label>
|
||||
<span class="form-search-linebox">
|
||||
<input type="text" class="form-control form-date" id="schSndngYmd--${pageName}" name="schSndngYmd"
|
||||
data-fmt-type="day" title="시작 날짜 선택" />
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
</span>
|
||||
</div>
|
||||
<!-- 발송 상세 ID -->
|
||||
<div class="col-4">
|
||||
<label class="form-label fw-bold form-search-title w-px-120 text-end" for="sndngDtlId--${pageName}">발송번호</label>
|
||||
<input type="text" class="form-control w-px-200" id="sndngDtlId--${pageName}" name="sndngDtlId" autocomplete="off" />
|
||||
</div>
|
||||
<!-- 회계연도 -->
|
||||
<div class="col-4">
|
||||
<label class="form-label fw-bold form-search-title w-px-120 text-end" for="schFyr--${pageName}">회계연도</label>
|
||||
<input type="text" class="form-control w-px-60" id="schFyr--${pageName}" name="schFyr" maxlength="4" autocomplete="off" />
|
||||
</div>
|
||||
<!-- 고지 번호 -->
|
||||
<div class="col-4">
|
||||
<label class="form-label fw-bold form-search-title w-px-120 text-end" for="schLevyNoFrom--${pageName}">고지번호</label>
|
||||
<input type="text" class="form-control w-px-80" id="schLevyNoFrom--${pageName}" name="schLevyNoFrom" maxlength="6" autocomplete="off" />
|
||||
~
|
||||
<input type="text" class="form-control w-px-80" id="schLevyNoTo--${pageName}" name="schLevyNoTo" maxlength="6" autocomplete="off" />
|
||||
</div>
|
||||
<!-- 수령인 명 -->
|
||||
<div class="col-4">
|
||||
<label class="form-label fw-bold form-search-title w-px-120 text-end" for="schRcpnNm--${pageName}">수령인명</label>
|
||||
<input type="text" class="form-control w-px-200" id="schRcpnNm--${pageName}" name="schRcpnNm" autocomplete="off" />
|
||||
</div>
|
||||
<!-- 차량번호 -->
|
||||
<div class="col-4">
|
||||
<label class="form-label fw-bold form-search-title w-px-120 text-end" for="schVhrno--${pageName}">차량번호</label>
|
||||
<input type="text" class="form-control w-px-160" id="schVhrno--${pageName}" name="schVhrno" autocomplete="off" />
|
||||
</div>
|
||||
<!-- 등기 번호 -->
|
||||
<div class="col-4">
|
||||
<label class="form-label fw-bold form-search-title w-px-120 text-end" for="schRgNo--${pageName}">등기번호</label>
|
||||
<input type="text" class="form-control w-px-160" id="schRgNo--${pageName}" name="schRgNo" autocomplete="off" />
|
||||
</div>
|
||||
</div> <!-- <div class="row g-1"> -->
|
||||
</div> <!-- <div class="container-search"> -->
|
||||
</form>
|
||||
<!-- 검색 조건 영역 -->
|
||||
|
||||
<!-- 업무 버튼 및 건수 표시 -->
|
||||
<div>
|
||||
<span class="container-page-btn">
|
||||
<!-- 건수, 페이지 표시 -->
|
||||
<div class="d-flex flex-row justify-content-between">
|
||||
<span class="dataTables_info" id="paging--${pageName}PagingInfo" role="status" aria-live="polite"></span>
|
||||
<ul class="pagination pagination-primary" id="paging--${pageName}">
|
||||
</ul>
|
||||
</div>
|
||||
</span>
|
||||
</div> <!-- 업무 버튼 및 건수 표시 -->
|
||||
|
||||
<!-- DataTables(그리드) -->
|
||||
<div class="card-datatable text-nowrap">
|
||||
<div class="dataTables_wrapper dt-bootstrap5 no-footer" id="DataTables_Table_0_wrapper--${pageName}">
|
||||
<div class="table-responsive ox-scroll oy-scroll h-px-400" id="table-responsive--${pageName}">
|
||||
<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">
|
||||
<tr id="theadTr--${pageName}">
|
||||
<th class="cmn" style="width: 72px;">No.</th>
|
||||
<th class="cmn" style="width: 56px;"><input type="checkbox" class="form-check-input" id="gridAllCheckbox--${pageName}" onchange="pageObject['${pageName}'].control.select(this.checked);" /></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>
|
||||
<th class="cmn" style="width: 160px;">등기번호</th>
|
||||
<th class="cmn" style="width: 120px;">수납</th>
|
||||
<th class="cmn" style="width: 160px;">발송상세상태</th>
|
||||
<th class="cmn" style="width: 200px;">수령인</th>
|
||||
<th class="cmn" style="width: 120px;">수령인생일</th>
|
||||
<th class="cmn" style="width: 100px;">우편번호</th>
|
||||
<th class="cmn" style="width: 280px;">주소</th>
|
||||
<th class="cmn" style="width: 320px;">상세주소</th>
|
||||
<th class="cmn" style="width: 180px;">단속일시</th>
|
||||
<th class="cmn" style="width: 140px;">차량번호</th>
|
||||
<th class="cmn" style="width: 160px;">법정동</th>
|
||||
<th class="cmn" style="width: 280px;">단속장소</th>
|
||||
<th class="cmn" style="width: 100px;">회계연도</th>
|
||||
<th class="cmn" style="width: 100px;">부과번호</th>
|
||||
<th class="cmn" style="width: 120px;">부과일자</th>
|
||||
<th class="cmn" style="width: 120px;">납기일자</th>
|
||||
<th class="cmn" style="width: 120px;">과태료금액</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: 180px;">등록일시</th>
|
||||
<th class="cmn" style="width: 140px;">등록사용자</th>
|
||||
<th class="cmn" style="width: 180px;">수정일시</th>
|
||||
<th class="cmn" style="width: 140px;">수정사용자</th>
|
||||
<th class="cmn dummy-th"></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="tbody--${pageName}">
|
||||
</tbody>
|
||||
<template id="${infoPrefix}Row--${pageName}">
|
||||
<tr data-key="{SNDNG_DTL_ID}">
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{ROW_NUM}</td>
|
||||
<td class="cmn text-center"><input type="checkbox" class="form-check-input" name="gridCheckbox" value="{SNDNG_DTL_ID}" onchange="pageObject['${pageName}'].control.select('{SNDNG_DTL_ID}', this.checked);" /></td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{SNDNG_DTL_ID}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{SNDNG_SE_NM}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{SNDNG_YMD}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{SNDNG_END_YMD}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{RG_NO}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{SNDNG_RCVMT_NM}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{SNDNG_DTL_STTS_NM}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{RCPN_NM}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{RCPN_BRDT}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{RCPN_ZIP}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{RCPN_ADDR}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{RCPN_DTL_ADDR}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{CRDN_DT}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{VHRNO}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{CRDN_STDG_NM}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{CRDN_PLC}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{FYR}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{LEVY_NO}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{LEVY_YMD}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{DUDT_YMD}</td>
|
||||
<td class="cmn text-end" onclick="{onclick}" ondblclick="{ondblclick}">{FFNLG_AMT}</td>
|
||||
<td class="cmn text-end" onclick="{onclick}" ondblclick="{ondblclick}">{PCPTAX}</td>
|
||||
<td class="cmn text-end" onclick="{onclick}" ondblclick="{ondblclick}">{ADAMT}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{EPAYNO}</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}">{MDFCN_DT}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{MDFR_NM}</td>
|
||||
<td class="cmn dummy-td"></td>
|
||||
</tr>
|
||||
</template>
|
||||
<template id="${infoPrefix}NotFound--${pageName}">
|
||||
<tr class="odd">
|
||||
<td valign="top" colspan="31" class="dataTables_empty text-center">${prefixName} 정보를 찾지 못했습니다.</td>
|
||||
</tr>
|
||||
</template>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div> <!-- DataTables(그리드) -->
|
||||
|
||||
<p></p>
|
||||
|
||||
<!-- 입력 영역 -->
|
||||
<form id="frmEdit--${pageName}" name="frmEdit">
|
||||
<div class="container-search-detail">
|
||||
<!-- 업무 버튼 및 건수 표시 -->
|
||||
<div>
|
||||
<span class="container-page-btn">
|
||||
<!-- 건수, 페이지 표시 -->
|
||||
<div class="d-flex flex-row justify-content-between">
|
||||
<!-- 배달 일자 -->
|
||||
<label class="form-label fw-bold form-search-title w-px-120 text-end required" for="dlvrYmd--${pageName}">발송일자</label>
|
||||
<span class="form-search-linebox">
|
||||
<input type="text" class="form-control form-date" id="dlvrYmd--${pageName}" name="dlvrYmd"
|
||||
data-fmt-type="day" title="시작 날짜 선택" required />
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
</span>
|
||||
<!-- 미배달 사유 코드 -->
|
||||
<label class="form-label fw-bold form-search-title w-px-120 text-end required" for="undlvrRsnCd--${pageName}">미배달사유</label>
|
||||
<select class="form-select w-px-160" id="undlvrRsnCd--${pageName}" name="undlvrRsnCd" required>
|
||||
<option value="">선택하세요</option>
|
||||
<c:forEach items="${FIM081List}" var="item">
|
||||
<option value="${item.code}">${item.value}</option>
|
||||
</c:forEach>
|
||||
</select>
|
||||
</div>
|
||||
<!-- 업무 버튼 -->
|
||||
<span class="container-window-btn-right">
|
||||
<button type="button" class="btn btn-primary w-px-120" id="btnSave--${pageName}" title="반송 등록">
|
||||
반송 등록
|
||||
</button>
|
||||
</span>
|
||||
</span>
|
||||
</div> <!-- 업무 버튼 및 건수 표시 -->
|
||||
</div>
|
||||
</form>
|
||||
<!-- 입력 영역 -->
|
||||
</div> <!-- <div class="wrapper-list"> -->
|
||||
</div> <!-- <div class="card"> -->
|
||||
<!-- Page Body -->
|
||||
|
||||
</div> <!-- <div class="container-xxl flex-grow-1 px-0"> -->
|
||||
<!-- Content -->
|
||||
|
||||
<div class="content-backdrop fade"></div>
|
||||
</div>
|
||||
<!-- / inner page html <div class="content-wrapper"> -->
|
||||
|
||||
<script>
|
||||
/**************************************************************************
|
||||
* Global Variable
|
||||
**************************************************************************/
|
||||
pageObject["${pageName}"] = {};
|
||||
|
||||
/**************************************************************************
|
||||
* script 진입
|
||||
**************************************************************************/
|
||||
$(document).ready(function() {
|
||||
// pageObject
|
||||
let $P = pageObject["${pageName}"];
|
||||
|
||||
// infoDialog 호출 용도(view 조회(편집불가), create 등록, update 수정)
|
||||
$P.callPurpose = "${callPurpose}";
|
||||
// FormFields
|
||||
$P.formFields = new FimsFormFields("#frmSearch--${pageName}");
|
||||
$P.formEditFields = new FimsFormFields("#frmEdit--${pageName}");
|
||||
|
||||
/**************************************************************************
|
||||
* DatasetControl
|
||||
**************************************************************************/
|
||||
$P.control = new DatasetControl({
|
||||
prefix: "sndbkTrgt"
|
||||
, prefixName: "반송 대상"
|
||||
, keymapper: info => info ? info.SNDNG_DTL_ID : ""
|
||||
, dataGetter: obj => obj.${infoPrefix}List
|
||||
, appendData: true
|
||||
, formats: {
|
||||
SNDNG_YMD: dateFormat
|
||||
, SNDNG_END_YMD: dateFormat
|
||||
, LEVY_YMD: dateFormat
|
||||
, DUDT_YMD: dateFormat
|
||||
, FFNLG_AMT: numberFormat
|
||||
, PCPTAX: numberFormat
|
||||
, ADAMT: numberFormat
|
||||
, REG_DT: datetimeFormat
|
||||
, MDFCN_DT: datetimeFormat
|
||||
}
|
||||
});
|
||||
// $P.control 설정
|
||||
$P.control.defaultFetchSize = FETCH_XS; // 1 페이지당 조회되는 자료 건수 index.jsp에서 확인 FETCH_XS = 30
|
||||
$P.control.query = { pageNum : 1, fetchSize : $P.control.defaultFetchSize };
|
||||
$P.control.beforeCurrent = null;
|
||||
|
||||
|
||||
/**************************************************************************
|
||||
* DatasetControl 이벤트
|
||||
**************************************************************************/
|
||||
// Dataset 변경
|
||||
$P.control.onDatasetChange = (obj, option) => {
|
||||
$P.renderList(obj.${infoPrefix}Total, option);
|
||||
|
||||
$("#paging--${pageName}").setPagingInfo({
|
||||
list: $P.control.dataset
|
||||
, prefix: "paging--${pageName}"
|
||||
, start: obj.${infoPrefix}Start
|
||||
, totalSize: obj.${infoPrefix}Total
|
||||
, fetchSize: obj.${infoPrefix}Fetch
|
||||
, func: "pageObject['${pageName}'].control.load({index})"
|
||||
});
|
||||
|
||||
|
||||
};
|
||||
|
||||
// 현재 선택 자료 변경 이벤트
|
||||
$P.control.onCurrentChange = (item) => {
|
||||
if (!item) return;
|
||||
|
||||
let key = item.data.SNDNG_DTL_ID;
|
||||
|
||||
$("#tbody--${pageName}").setCurrentRow(key);
|
||||
};
|
||||
|
||||
// 선택(체크) 변경 이벤트
|
||||
$P.control.onSelectionChange = (selected) => {
|
||||
let ${infoPrefix}List = $P.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()));
|
||||
});
|
||||
|
||||
// DataTables(그리드) 전체 선택(checkbox)
|
||||
if (keys.length < 1) {
|
||||
$("#DataTables_Table_0--${pageName} th input[type='checkbox']").prop("checked", false); // 체크 해제
|
||||
} else if (keys.length == ${infoPrefix}List.length) {
|
||||
$("#DataTables_Table_0--${pageName} th input[type='checkbox']").prop("checked", true); // 체크 설정
|
||||
} else {
|
||||
$("#DataTables_Table_0--${pageName} th input[type='checkbox']").prop("checked", false); // 체크 해제
|
||||
}
|
||||
};
|
||||
|
||||
// 저장 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
|
||||
, init: () => { setDialogZindex(); }
|
||||
, onOK: () => { }
|
||||
});
|
||||
|
||||
if (resp.saved) {
|
||||
dialog.close($P.control.prefix + "Dialog--${openerPageName}");
|
||||
}
|
||||
}
|
||||
|
||||
// 저장
|
||||
$P.control.save = (info) => {
|
||||
if (!info) return;
|
||||
|
||||
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)
|
||||
});
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* DataTables 이벤트
|
||||
**************************************************************************/
|
||||
// DataTables에 click, dbclick 이벤트
|
||||
$P.renderList = (totalSize, option) => {
|
||||
let ${infoPrefix}List = $P.control.dataset;
|
||||
let empty = ${infoPrefix}List.empty;
|
||||
|
||||
let trs = empty ?
|
||||
[document.getElementById("${infoPrefix}NotFound--${pageName}").innerHTML] : <%-- from template#${infoPrefix}NotFound --%>
|
||||
${infoPrefix}List.inStrings(
|
||||
document.getElementById("${infoPrefix}Row--${pageName}").innerHTML, <%-- from template#${infoPrefix}Row --%>
|
||||
(str, dataItem) => str
|
||||
.replace(/{onclick}/gi, "pageObject['${pageName}'].control.setCurrent('" + dataItem.getValue("SNDNG_DTL_ID") + "');")
|
||||
.replace(/{ondblclick}/gi, "pageObject['${pageName}'].getTotalInfo('" + dataItem.getValue("CRDN_ID") + "');")
|
||||
);
|
||||
|
||||
let noMore = (${infoPrefix}List.length >= totalSize);
|
||||
let initScroll = ($P.control.query.pageNum < 2);
|
||||
if(option != null && option.reloaded){
|
||||
initScroll = false;
|
||||
}
|
||||
$("#table-responsive--${pageName}")[0].changeContent(trs.join(), initScroll, noMore);
|
||||
|
||||
|
||||
// checkbox 체크 해제
|
||||
$("#DataTables_Table_0--${pageName} th input[type='checkbox']").prop("checked", false);
|
||||
|
||||
//보안모드
|
||||
fn_securityModeToggle($("#securityMode--top").is(":checked"));
|
||||
}
|
||||
|
||||
// DataTables에 스크롤이 맨 밑으로 이동했을 때 이벤트
|
||||
$P.scrollDataList = () => {
|
||||
|
||||
|
||||
$P.control.load($P.control.query.pageNum + 1);
|
||||
}
|
||||
|
||||
// DataTables에 더블 클릭시 개별총정보 dialog
|
||||
$P.getTotalInfo = (crdnId) => {
|
||||
if (typeof crdnId == "undefined" || crdnId == null || crdnId == "") return;
|
||||
|
||||
let params = {
|
||||
callControlName: "pageObject['${pageName}'].control"
|
||||
, sggCd: $P.control.dataset.getValue("SGG_CD")
|
||||
, taskSeCd: $P.control.dataset.getValue("TASK_SE_CD")
|
||||
, crdnId: crdnId
|
||||
}
|
||||
|
||||
ajax.get({
|
||||
url: wctx.url("/sprt/sprt02/010/main.do")
|
||||
, data: params
|
||||
, success: resp => {
|
||||
dialog.open({
|
||||
id: "totalInfoMainDialog"
|
||||
, title: "개별총정보"
|
||||
, content: resp
|
||||
, size: "xxl"
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 사용자 함수(function)
|
||||
**************************************************************************/
|
||||
// 검색 자료 재조회
|
||||
$P.fnRefreshList = () => {
|
||||
|
||||
$P.control.reload({all : true});
|
||||
}
|
||||
|
||||
// 사용자검색 callback
|
||||
$P.callbackFindUser = (userId, userNm) => {
|
||||
$("#schRgtrCd--${pageName}").val(userId); // 사용자 ID
|
||||
$("#schRgtrNm--${pageName}").val(userNm); // 사용자 명
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 버튼 clickEvent
|
||||
**************************************************************************/
|
||||
// 업무 구분 변경 이벤트
|
||||
$P.fnResetAndChangeBiz = (taskSeCd) => {
|
||||
// 업무 구분 코드
|
||||
if (typeof taskSeCd == "undefined" || taskSeCd == null || taskSeCd == "") {
|
||||
taskSeCd = $("#layout-navbar input[name='taskSeCd']:checked").val();
|
||||
}
|
||||
|
||||
// 초기 기본 설정
|
||||
$P.initForm(taskSeCd);
|
||||
// 업무 구분별 설정
|
||||
$P.setTask(taskSeCd);
|
||||
|
||||
// dataset 초기화
|
||||
$P.control.dataset.clear();
|
||||
}
|
||||
|
||||
// 사용자검색 버튼 클릭 이벤트
|
||||
$P.fnGetFindUser = () => {
|
||||
let params = {
|
||||
openerPageName: "${pageName}"
|
||||
, callbackFuncName: "pageObject['${pageName}']['callbackFindUser']"
|
||||
}
|
||||
|
||||
ajax.get({
|
||||
url: wctx.url("/user/user02/010/main.do") + "?openerPageName=${pageName}"
|
||||
, data: params || {}
|
||||
, success: resp => {
|
||||
dialog.open({
|
||||
id: "userDialog--${pageName}"
|
||||
, title: "사용자 검색"
|
||||
, content: resp
|
||||
, size: "lg"
|
||||
, init: () => { setDialogZindex(); }
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// 검색 버튼 이벤트
|
||||
$P.fnSearchList = () => {
|
||||
// 검색조건
|
||||
$P.control.query = $P.formFields.get(); // 검색 조건
|
||||
$P.control.query.fetchSize = $P.control.defaultFetchSize; // 한번에 조회되는 자료 건수
|
||||
$P.control.query.delYn = "N"; // 삭제 여부
|
||||
|
||||
$P.control.load(1);
|
||||
}
|
||||
|
||||
// 엑셀 버튼 이벤트
|
||||
$P.fnExcel = () => {
|
||||
if ($P.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)")
|
||||
, getCellDefsForPrivacyCell);
|
||||
|
||||
$P.control.query.cellDefs = cellDefs;
|
||||
|
||||
$P.control.download();
|
||||
}
|
||||
|
||||
// 반송 등록 버튼 이벤트
|
||||
$P.fnSave = () => {
|
||||
// 선택 자료
|
||||
let selected = $P.control.dataset.getKeys("selected");
|
||||
|
||||
if (selected.length < 1) {
|
||||
dialog.alert({
|
||||
content: "선택하신 " + $P.control.prefixName + " 정보가 없습니다."
|
||||
, init: () => { setDialogZindex(); }
|
||||
, onOK: () => { }
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
// validate 확인
|
||||
if (!customValidate($("#frmEdit--${pageName}").find("input, select, textarea"))) return;
|
||||
|
||||
let params = $P.formEditFields.get(); // formFields
|
||||
params.sggCd = $("#sggCd--${pageName}").val() // 시군구 코드
|
||||
params.taskSeCd = $("#taskSeCd--${pageName}").val() // 업무 구분 코드
|
||||
params.sndngDtlIds = selected.join(","); // 발송 상세 Ids
|
||||
params.undlvrRsnNm = $("#undlvrRsnCd--${pageName} option:selected").text(); // 미배달 사유 명
|
||||
params.sndngDtlSttsCd = "05"; // 발송 상세 상태 코드(FIM050) - 05: 반송
|
||||
|
||||
dialog.alert({
|
||||
content: "선택하신 " + selected.length + "건의 " + $P.control.prefixName + " 정보를 등록하시겠습니까?"
|
||||
, onOK: () => {
|
||||
$P.control.save(params);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 초기 설정
|
||||
**************************************************************************/
|
||||
// 이벤트 설정
|
||||
$P.setEvent = () => {
|
||||
// 기본 버튼 이벤트
|
||||
$("#btnReset--${pageName}").on("click", () => $P.fnResetAndChangeBiz()); // 초기화
|
||||
$("#btnSearch--${pageName}").on("click", () => $P.fnSearchList()); // 검색
|
||||
$("#btnExcel--${pageName}").on("click", () => $P.fnExcel()); // 엑셀
|
||||
$("#btnFindUser--${pageName}").on("click", () => $P.fnGetFindUser()); // 사용자 검색
|
||||
|
||||
// 동적검색에서 엔터(Enter) 키를 누르면 검색한다.
|
||||
$("#term--${pageName}").onEnterPress(function() {
|
||||
$P.fnSearchList();
|
||||
});
|
||||
|
||||
// form-date 항목에서 키보드로 입력시 날짜 포맷팅 적용
|
||||
$("#frmSearch--${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()); // 저장
|
||||
|
||||
// DataTables width 변경 조정 업무별 그리드가 존재 한다면.. crdn06010-main.jsp 참고
|
||||
fnMakeResizableTable($("#table-responsive--${pageName}")[0]);
|
||||
|
||||
// DataTables 스크롤 이벤트 생성
|
||||
fnMakeScrollableTable($("#table-responsive--${pageName}")[0], $P.scrollDataList);
|
||||
}
|
||||
|
||||
// 초기 화면 설정
|
||||
$P.initForm = (taskSeCd) => {
|
||||
// 화면 초기화
|
||||
$("#frmSearch--${pageName}")[0].reset();
|
||||
|
||||
// input, select 초기화
|
||||
let searchForm = $("#frmSearch--${pageName}");
|
||||
searchForm.find("input[type='radio']").not("[name='taskSeCd']").prop("checked", false);
|
||||
searchForm.find("input[type='checkbox']").prop("checked", false);
|
||||
searchForm.find("input[type='text']").val("");
|
||||
searchForm.find("input[type='hidden']").val("");
|
||||
searchForm.find("select").each(function() { $(this).find("option:eq(0)").prop("selected", true); });
|
||||
|
||||
// 최고 관리자 경우 업무구분을 선택할 수 있도록 하자.
|
||||
$("#frmSearch--${pageName} input[name='taskSeCd']").each(function(i) {
|
||||
$(this).prop("disabled", "true");
|
||||
});
|
||||
|
||||
// 기본 데이터 설정
|
||||
$("#sggCd--${pageName}").val("${sggCd}"); // 시군구 코드
|
||||
$("#taskSeCd--${pageName}").val("${taskSeCd}"); // 업무 구분 코드
|
||||
initDatepicker("frmSearch--${pageName}"); // 달력 초기화
|
||||
$("#schSndngYmd--${pageName}").datepicker("setDate", new Date()); // 발송 일자
|
||||
$("#dlvrYmd--${pageName}").datepicker("setDate", new Date()); // 배달 일자
|
||||
}
|
||||
|
||||
// 업무 구분별 설정
|
||||
$P.setTask = (taskSeCd) => {
|
||||
// 업무구분에 따른 URL 설정
|
||||
$P.control.urls.load = wctx.url("/" + taskSeCd + "${infoPrefixUrl}" + "/210/list.do"); // 검색
|
||||
$P.control.urls.create = wctx.url("/" + taskSeCd + "${infoPrefixUrl}" + "/230/create.do"); // 반송 등록
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 최초 실행 함수
|
||||
**************************************************************************/
|
||||
// 1. 이벤트 설정
|
||||
$P.setEvent();
|
||||
|
||||
// 2. 초기 설정 및 업무 구분 변경
|
||||
$P.fnResetAndChangeBiz($("#layout-navbar input[name='taskSeCd']:checked").val());
|
||||
|
||||
// 3. 보안모드
|
||||
fn_securityModeToggle($("#securityMode--top").is(":checked"));
|
||||
});
|
||||
|
||||
</script>
|
||||
@ -1,810 +0,0 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
|
||||
<c:set var="prefixName" scope="request">반송 현황</c:set>
|
||||
|
||||
<!-- inner page html -->
|
||||
<div class="content-wrapper">
|
||||
<!-- Content -->
|
||||
<div class="container-xxl flex-grow-1 px-0">
|
||||
<div class="card wrapper-list">
|
||||
<!-- 상단 버튼 -->
|
||||
<div class="container-page-btn">
|
||||
<button type="button" class="btn btn-outline-dark w-px-120" id="btnReset--${pageName}" title="초기화">
|
||||
초기화
|
||||
</button>
|
||||
<span class="container-window-btn-right">
|
||||
<button type="button" class="btn btn-search w-px-120" id="btnSearch--${pageName}" title="검색">
|
||||
검색
|
||||
</button>
|
||||
<button type="button" class="btn btn-excel w-px-120" id="btnExcel--${pageName}" title="엑셀">
|
||||
엑셀
|
||||
</button>
|
||||
</span>
|
||||
</div>
|
||||
<!-- 상단 버튼 -->
|
||||
|
||||
<!-- 검색 조건 영역 -->
|
||||
<form id="frmSearch--${pageName}" name="frmSearch">
|
||||
<!-- hidden -->
|
||||
<input type="hidden" id="sggCd--${pageName}" name="sggCd" />
|
||||
|
||||
<!-- 메인 조건 -->
|
||||
<div class="container-search">
|
||||
<div class="row g-1">
|
||||
<!-- 업무 구분 -->
|
||||
<div class="col-12">
|
||||
<span class="form-label fw-bold form-search-title w-px-120 text-end">업무구분</span>
|
||||
<span class="form-search-linebox">
|
||||
<c:forEach items="${taskListForSgg}" var="item">
|
||||
<label>
|
||||
<input type="radio" class="form-check-input" name="taskSeCd" alt="업무구분"
|
||||
value="${item.code}" onchange="pageObject['${pageName}'].fnResetAndChangeBiz(this.value);">
|
||||
${item.value}
|
||||
</label>
|
||||
</c:forEach>
|
||||
</span>
|
||||
</div>
|
||||
<!-- 배달 일자 -->
|
||||
<div class="col-6">
|
||||
<label class="form-label fw-bold form-search-title w-px-120 text-end" for="schDlvrYmdFrom--${pageName}">배달일자</label>
|
||||
<span class="form-search-linebox">
|
||||
<input type="text" class="form-control form-date" id="schDlvrYmdFrom--${pageName}" name="schDlvrYmdFrom"
|
||||
data-fmt-type="day" title="시작 날짜 선택" />
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
~
|
||||
<input type="text" class="form-control form-date" id="schDlvrYmdTo--${pageName}" name="schDlvrYmdTo"
|
||||
data-fmt-type="day" title="종료 날짜 선택" />
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
</span>
|
||||
</div>
|
||||
<!-- 미배달 사유 코드 -->
|
||||
<div class="col-6">
|
||||
<label class="form-label fw-bold form-search-title w-px-120 text-end" for="schUndlvrRsnCd--${pageName}">미배달사유</label>
|
||||
<select class="form-select w-px-160" id="schUndlvrRsnCd--${pageName}" name="schUndlvrRsnCd">
|
||||
<option value="">전체</option>
|
||||
<c:forEach items="${FIM081List}" var="item">
|
||||
<option value="${item.code}">${item.value}</option>
|
||||
</c:forEach>
|
||||
</select>
|
||||
</div>
|
||||
<!-- 발송일자 -->
|
||||
<div class="col-6">
|
||||
<label class="form-label fw-bold form-search-title w-px-120 text-end" for="schSndngYmdFrom--${pageName}">발송일자</label>
|
||||
<span class="form-search-linebox">
|
||||
<input type="text" class="form-control form-date" id="schSndngYmdFrom--${pageName}" name="schSndngYmdFrom"
|
||||
data-fmt-type="day" title="시작 날짜 선택" />
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
~
|
||||
<input type="text" class="form-control form-date" id="schSndngYmdTo--${pageName}" name="schSndngYmdTo"
|
||||
data-fmt-type="day" title="종료 날짜 선택" />
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
</span>
|
||||
</div>
|
||||
<!-- 발송 구분 -->
|
||||
<div class="col-6">
|
||||
<label class="form-label fw-bold form-search-title w-px-120 text-end" for="schSndngSeCd--${pageName}">발송구분</label>
|
||||
<select class="form-select w-px-160" id="schSndngSeCd--${pageName}" name="schSndngSeCd">
|
||||
<option value="">전체</option>
|
||||
<c:forEach items="${FIM047List}" var="item">
|
||||
<option value="${item.code}">${item.value}</option>
|
||||
</c:forEach>
|
||||
</select>
|
||||
</div>
|
||||
<!-- 선택등기 표시 -->
|
||||
<div class="col-6 form-check">
|
||||
<input type="checkbox" class="form-check-input" id="schChcRgIndct--${pageName}" name="schChcRgIndct" value="Y" />
|
||||
<label class="form-check-label" for="schChcRgIndct--${pageName}">선택등기표시</label>
|
||||
</div>
|
||||
<!-- 동적검색 -->
|
||||
<div class="col-6">
|
||||
<input type="hidden" id="by--${pageName}" name="by" />
|
||||
<input type="text" class="form-control fw-bold w-px-120 text-end" id="byOutput--${pageName}" value="동적 검색" readonly />
|
||||
<input type="hidden" id="mainOption--${pageName}" name="mainOption" />
|
||||
<input type="hidden" id="subOption--${pageName}" name="subOption" />
|
||||
<input type="text" class="form-control w-px-400" id="term--${pageName}" name="term" autocomplete="off" />
|
||||
<!-- 상세 검색조건 버튼 -->
|
||||
<span class="flr">
|
||||
<button type="button" class="btn btn-open-detail" data-bs-toggle="collapse" data-bs-target="#searchDetail--${pageName}">
|
||||
<i class="bx bx-chevron-down"></i>
|
||||
상세검색
|
||||
</button>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- 메인 조건 -->
|
||||
|
||||
<!-- 상세 조건 -->
|
||||
<div id="searchDetail--${pageName}" class="container-search container-search-detail collapse">
|
||||
<div class="row g-1">
|
||||
<!-- 단속일자 -->
|
||||
<div class="col-4">
|
||||
<label class="form-label fw-bold form-search-title w-px-120 text-end" for="schCrdnYmdFrom--${pageName}">단속일자</label>
|
||||
<span class="form-search-linebox">
|
||||
<input type="text" class="form-control form-date" id="schCrdnYmdFrom--${pageName}" name="schCrdnYmdFrom"
|
||||
data-fmt-type="day" autocomplete="off" title="시작 날짜 선택" />
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
~
|
||||
<input type="text" class="form-control form-date" id="schCrdnYmdTo--${pageName}" name="schCrdnYmdTo"
|
||||
data-fmt-type="day" autocomplete="off" title="종료 날짜 선택" />
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
</span>
|
||||
</div>
|
||||
<!-- 차량번호 -->
|
||||
<div class="col-4">
|
||||
<label class="form-label fw-bold form-search-title w-px-120 text-end" for="schVhrno--${pageName}">차량번호</label>
|
||||
<input type="text" class="form-control w-px-160" id="schVhrno--${pageName}" name="schVhrno" autocomplete="off" />
|
||||
</div>
|
||||
<!-- 납부자번호 -->
|
||||
<div class="col-4">
|
||||
<label class="form-label fw-bold form-search-title w-px-120 text-end" for="schRtpyrNm--${pageName}">납부자번호</label>
|
||||
<input type="text" class="form-control w-px-160" id="schRtpyrNm--${pageName}" name="schRtpyrNm" autocomplete="off" />
|
||||
</div>
|
||||
<!-- 납부자명 -->
|
||||
<div class="col-4">
|
||||
<label class="form-label fw-bold form-search-title w-px-120 text-end" for="schRtpyrNo--${pageName}">납부자명</label>
|
||||
<input type="text" class="form-control w-px-160" id="schRtpyrNo--${pageName}" name="schRtpyrNo" autocomplete="off" />
|
||||
</div>
|
||||
<!-- 등록일자, 수정일자 -->
|
||||
<div class="col-4">
|
||||
<select class="form-select w-px-120 text-center" id="schRegDateOpt--${pageName}" name="schRegDateOpt">
|
||||
<option value="regDt">등록일자</option>
|
||||
<option value="mdfcnDt">수정일자</option>
|
||||
</select>
|
||||
<span class="form-search-linebox">
|
||||
<input type="text" class="form-control form-date" id="schRegDateFrom--${pageName}" name="schRegDateFrom"
|
||||
data-fmt-type="day" title="시작 날짜 선택" />
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
~
|
||||
<input type="text" class="form-control form-date" id="schRegDateTo--${pageName}" name="schRegDateTo"
|
||||
data-fmt-type="day" title="종료 날짜 선택">
|
||||
<button type="button" class="bx bx-lg bx-calendar bg-white"></button>
|
||||
</span>
|
||||
</div>
|
||||
<!-- 등록자명, 수정자명 -->
|
||||
<div class="col-4">
|
||||
<select class="form-select w-px-120 text-center" id="schRgtrOpt--${pageName}" name="schRgtrOpt">
|
||||
<option value="rgtr">등록자</option>
|
||||
<option value="mdfr">수정자</option>
|
||||
</select>
|
||||
<input type="hidden" id="schRgtrCd--${pageName}" name="schRgtrCd" />
|
||||
<input type="text" class="form-control w-px-160" id="schRgtrNm--${pageName}" name="schRgtrNm" />
|
||||
<button type="button" class="btn btn-sm btn-outline-dark" id="btnFindUser--${pageName}" title="사용자 검색">검색</button>
|
||||
</div>
|
||||
</div>
|
||||
</div> <!-- 상세 조건 -->
|
||||
</form>
|
||||
<!-- 검색 조건 영역 -->
|
||||
|
||||
<!-- 업무 버튼 및 건수 표시 -->
|
||||
<div>
|
||||
<span class="container-page-btn">
|
||||
<!-- 건수, 페이지 표시 -->
|
||||
<div class="d-flex flex-row justify-content-between">
|
||||
<span class="dataTables_info" id="paging--${pageName}PagingInfo" role="status" aria-live="polite"></span>
|
||||
<ul class="pagination pagination-primary" id="paging--${pageName}">
|
||||
</ul>
|
||||
</div>
|
||||
<!-- 업무 버튼 -->
|
||||
<span class="container-window-btn-right">
|
||||
<button type="button" class="btn btn-primary w-px-160" id="btnCreateSndbk--${pageName}" title="반송 등록">
|
||||
수기 반송 등록
|
||||
</button>
|
||||
<button type="button" class="btn btn-primary w-px-160" id="btnCreateWholSvbtc--${pageName}" title="전체 공시송달 등록">
|
||||
전체 공시송달 등록
|
||||
</button>
|
||||
<button type="button" class="btn btn-primary w-px-160" id="btnCreateSlctnSndngLink--${pageName}" title="선택 통합우편 발송">
|
||||
선택 통합우편 발송
|
||||
</button>
|
||||
<button type="button" class="btn btn-primary w-px-160" id="btnCreateWholSndngLink--${pageName}" title="전체 통합우편 발송">
|
||||
전체 통합우편 발송
|
||||
</button>
|
||||
</span>
|
||||
</span>
|
||||
</div>
|
||||
<!-- 업무 버튼 및 건수 표시 -->
|
||||
|
||||
<!-- DataTables(그리드) -->
|
||||
<div class="card-datatable text-nowrap">
|
||||
<div class="dataTables_wrapper dt-bootstrap5 no-footer" id="DataTables_Table_0_wrapper--${pageName}">
|
||||
<div class="table-responsive ox-scroll oy-scroll h-px-500" id="table-responsive--${pageName}">
|
||||
<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">
|
||||
<tr id="theadTr--${pageName}"
|
||||
data-by="by--${pageName}" data-by-output="byOutput--${pageName}" data-main-option="mainOption--${pageName}" data-sub-option="subOption--${pageName}">
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="tbody--${pageName}">
|
||||
</tbody>
|
||||
|
||||
<template id="${infoPrefix}Col--${pageName}">
|
||||
<th class="cmn" style="width: 72px;">No.</th>
|
||||
<th class="cmn" style="width: 56px;"><input type="checkbox" class="form-check-input" id="gridAllCheckbox--${pageName}" onchange="pageObject['${pageName}'].control.select(this.checked);" /></th>
|
||||
<th class="cmn" style="width: 160px;">업무구분</th>
|
||||
<th class="cmn" style="width: 140px;">고지번호</th>
|
||||
<th class="cmn" style="width: 160px;" onclick="searchFromGridTitle('RG_NO', this.innerText, 'match', 'part');">등기번호</th>
|
||||
<th class="cmn" style="width: 120px;" onclick="searchFromGridTitle('DLVR_YMD', this.innerText, 'ymd', '');">배달일자</th>
|
||||
<th class="cmn" style="width: 100px;" onclick="searchFromGridTitle('DLVR_TM', this.innerText, 'time', '');">배달시간</th>
|
||||
<th class="cmn" style="width: 200px;" onclick="searchFromGridTitle('UNDLVR_RSN_NM', this.innerText, 'match', 'part');">미배달사유</th>
|
||||
<th class="cmn" style="width: 160px;" onclick="searchFromGridTitle('ACTL_RCPN_NM', this.innerText, 'match', 'part');">수령인</th>
|
||||
<th class="cmn" style="width: 160px;" onclick="searchFromGridTitle('RCPN_REL_NM', this.innerText, 'match', 'part');">수령인관계</th>
|
||||
<th class="cmn" style="width: 160px;" onclick="searchFromGridTitle('SNDNG_SE_CD', this.innerText, 'codeValue', 'FIM047');">발송구분</th>
|
||||
<th class="cmn" style="width: 120px;" onclick="searchFromGridTitle('SNDNG_YMD', this.innerText, 'ymd', '');">발송일자</th>
|
||||
<th class="cmn" style="width: 120px;" onclick="searchFromGridTitle('FFNLG_AMT', this.innerText, 'match', 'part');">과태료금액</th>
|
||||
<th class="cmn" style="width: 120px;" onclick="searchFromGridTitle('PCPTAX', this.innerText, 'match', 'part');">본세</th>
|
||||
<th class="cmn" style="width: 120px;" onclick="searchFromGridTitle('ADAMT', this.innerText, 'match', 'part');">가산금</th>
|
||||
<th class="cmn" style="width: 200px;" onclick="searchFromGridTitle('RCPN_NM', this.innerText, 'match', 'part');">수령인명</th>
|
||||
<th class="cmn" style="width: 100px;" onclick="searchFromGridTitle('RCPN_ZIP', this.innerText, 'match', 'part');">우편번호</th>
|
||||
<th class="cmn" style="width: 280px;" onclick="searchFromGridTitle('RCPN_ADDR', this.innerText, 'match', 'part');">수령인주소</th>
|
||||
<th class="cmn" style="width: 320px;" onclick="searchFromGridTitle('RCPN_DTL_ADDR', this.innerText, 'match', 'part');">수령인상세주소</th>
|
||||
<th class="cmn" style="width: 180px;" onclick="searchFromGridTitle('CRDN_YMD', this.innerText, 'ymd', '');">단속일시</th>
|
||||
<th class="cmn" style="width: 140px;" onclick="searchFromGridTitle('VHRNO', this.innerText, 'match', 'part');">차량번호</th>
|
||||
<th class="cmn" style="width: 120px;" onclick="searchFromGridTitle('RTPYR_SE_CD', this.innerText, 'codeValue', 'FIM011');">납부자구분</th>
|
||||
<th class="cmn" style="width: 160px;" onclick="searchFromGridTitle('RTPYR_NO', this.innerText, 'ymd', '');">납부자번호</th>
|
||||
<th class="cmn" style="width: 200px;" onclick="searchFromGridTitle('RTPYR_NM', this.innerText, 'match', 'part');">납부자명</th>
|
||||
<th class="cmn" style="width: 160px;" onclick="searchFromGridTitle('VLTN_ARTCL', this.innerText, 'match', 'part');">위반항목</th>
|
||||
<th class="cmn" style="width: 120px;" onclick="searchFromGridTitle('CRDN_STDG_NM', this.innerText, 'match', 'part');">단속법정동</th>
|
||||
<th class="cmn" style="width: 280px;" onclick="searchFromGridTitle('CRDN_PLC', this.innerText, 'match', 'part');">단속장소</th>
|
||||
<th class="cmn" style="width: 160px;" onclick="searchFromGridTitle('CRDN_STTS_CD', this.innerText, 'codeValue', 'FIM010');">처리상태</th>
|
||||
<th class="cmn" style="width: 180px;">등록일시</th>
|
||||
<th class="cmn" style="width: 140px;">등록사용자</th>
|
||||
<th class="cmn" style="width: 180px;">수정일시</th>
|
||||
<th class="cmn" style="width: 140px;">수정사용자</th>
|
||||
<th class="cmn dummy-th"></th>
|
||||
</template>
|
||||
<template id="${infoPrefix}Row--${pageName}">
|
||||
<tr data-key="{SNDNG_DTL_ID}">
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{ROW_NUM}</td>
|
||||
<td class="cmn text-center"><input type="checkbox" class="form-check-input" name="gridCheckbox" value="{SNDNG_DTL_ID}" onchange="pageObject['${pageName}'].control.select('{SNDNG_DTL_ID}', this.checked);" /></td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{TASK_SE_NM}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{GOJI_NO}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{RG_NO}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{DLVR_YMD}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{DLVR_TM}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{UNDLVR_RSN_NM}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{ACTL_RCPN_NM}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{RCPN_REL_NM}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{SNDNG_SE_NM}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{SNDNG_YMD}</td>
|
||||
<td class="cmn text-end" onclick="{onclick}" ondblclick="{ondblclick}">{FFNLG_AMT}</td>
|
||||
<td class="cmn text-end" onclick="{onclick}" ondblclick="{ondblclick}">{PCPTAX}</td>
|
||||
<td class="cmn text-end" onclick="{onclick}" ondblclick="{ondblclick}">{ADAMT}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{RCPN_NM}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{RCPN_ZIP}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{RCPN_ADDR}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{RCPN_DTL_ADDR}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{CRDN_YMD_TM}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{VHRNO}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{RTPYR_SE_NM}</td>
|
||||
<td class="cmn text-center privacy-cell" onclick="{onclick}" ondblclick="{ondblclick}">
|
||||
<span>{RTPYR_NO}</span>
|
||||
<span>*************</span>
|
||||
</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{RTPYR_NM}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{VLTN_ARTCL}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{CRDN_STDG_NM}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{CRDN_PLC}</td>
|
||||
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{CRDN_STTS_NM}</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}">{MDFCN_DT}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{MDFR_NM}</td>
|
||||
<td class="cmn dummy-td"></td>
|
||||
</tr>
|
||||
</template>
|
||||
<template id="${infoPrefix}NotFound--${pageName}">
|
||||
<tr class="bpv">
|
||||
<td valign="top" colspan="33" class="dataTables_empty text-center">${prefixName} 정보를 찾지 못했습니다.</td>
|
||||
</tr>
|
||||
<tr class="dpv">
|
||||
<td valign="top" colspan="33" class="dataTables_empty text-center">${prefixName} 정보를 찾지 못했습니다.</td>
|
||||
</tr>
|
||||
<tr class="eca">
|
||||
<td valign="top" colspan="33" class="dataTables_empty text-center">${prefixName} 정보를 찾지 못했습니다.</td>
|
||||
</tr>
|
||||
<tr class="pvs">
|
||||
<td valign="top" colspan="33" class="dataTables_empty text-center">${prefixName} 정보를 찾지 못했습니다.</td>
|
||||
</tr>
|
||||
<tr class="pes">
|
||||
<td valign="top" colspan="33" class="dataTables_empty text-center">${prefixName} 정보를 찾지 못했습니다.</td>
|
||||
</tr>
|
||||
</template>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- DataTables(그리드) -->
|
||||
</div> <!-- <div class="card wrapper-list"> -->
|
||||
</div> <!-- <div class="container-xxl flex-grow-1 px-0"> -->
|
||||
<!-- Content -->
|
||||
|
||||
<div class="content-backdrop fade"></div>
|
||||
</div>
|
||||
<!-- / inner page html <div class="content-wrapper"> -->
|
||||
|
||||
<script>
|
||||
/**************************************************************************
|
||||
* Global Variable
|
||||
**************************************************************************/
|
||||
pageObject["${pageName}"] = {};
|
||||
|
||||
/**************************************************************************
|
||||
* script 진입
|
||||
**************************************************************************/
|
||||
$(document).ready(function() {
|
||||
// pageObject
|
||||
let $P = pageObject["${pageName}"];
|
||||
|
||||
// FormFields
|
||||
$P.formFields = new FimsFormFields("#frmSearch--${pageName}");
|
||||
|
||||
/**************************************************************************
|
||||
* DatasetControl
|
||||
**************************************************************************/
|
||||
$P.control = new DatasetControl({
|
||||
prefix: "sndbk"
|
||||
, prefixName: "반송"
|
||||
, keymapper: info => info ? info.SNDNG_DTL_ID : ""
|
||||
, dataGetter: obj => obj.${infoPrefix}List
|
||||
, appendData: true
|
||||
, infoSize: "md"
|
||||
, formats: {
|
||||
DLVR_YMD: dateFormat
|
||||
, DLVR_TM: timeFormat
|
||||
, SNDNG_YMD: dateFormat
|
||||
, CRDN_YMD_TM: datetimeFormat
|
||||
, FFNLG_AMT: numberFormat
|
||||
, PCPTAX: numberFormat
|
||||
, ADAMT: numberFormat
|
||||
, REG_DT: datetimeFormat
|
||||
, MDFCN_DT: datetimeFormat
|
||||
}
|
||||
});
|
||||
// $P.control 설정
|
||||
$P.control.defaultFetchSize = FETCH_XS; // 1 페이지당 조회되는 자료 건수 index.jsp에서 확인 FETCH_XS = 30
|
||||
$P.control.query = { pageNum : 1, fetchSize : $P.control.defaultFetchSize };
|
||||
$P.control.beforeCurrent = null;
|
||||
|
||||
|
||||
/**************************************************************************
|
||||
* DatasetControl 이벤트
|
||||
**************************************************************************/
|
||||
// Dataset 변경
|
||||
$P.control.onDatasetChange = (obj, option) => {
|
||||
$P.renderList(obj.${infoPrefix}Total, option);
|
||||
|
||||
$("#paging--${pageName}").setPagingInfo({
|
||||
list: $P.control.dataset
|
||||
, prefix: "paging--${pageName}"
|
||||
, start: obj.${infoPrefix}Start
|
||||
, totalSize: obj.${infoPrefix}Total
|
||||
, fetchSize: obj.${infoPrefix}Fetch
|
||||
, func: "pageObject['${pageName}'].control.load({index})"
|
||||
});
|
||||
|
||||
|
||||
};
|
||||
|
||||
// 현재 선택 자료 변경 이벤트
|
||||
$P.control.onCurrentChange = (item) => {
|
||||
if (!item) return;
|
||||
|
||||
let key = item.data.SNDNG_DTL_ID;
|
||||
|
||||
$("#tbody--${pageName}").setCurrentRow(key);
|
||||
};
|
||||
|
||||
// 선택(체크) 변경 이벤트
|
||||
$P.control.onSelectionChange = (selected) => {
|
||||
let ${infoPrefix}List = $P.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()));
|
||||
});
|
||||
|
||||
// 선택 대상 통합우편 발송 버튼
|
||||
$("#btnCreateSlctnSndngLink--${pageName}").prop("disabled", keys.length < 1);
|
||||
|
||||
// DataTables(그리드) 전체 선택(checkbox)
|
||||
if (keys.length < 1) {
|
||||
$("#DataTables_Table_0--${pageName} th input[type='checkbox']").prop("checked", false); // 체크 해제
|
||||
} else if (keys.length == ${infoPrefix}List.length) {
|
||||
$("#DataTables_Table_0--${pageName} th input[type='checkbox']").prop("checked", true); // 체크 설정
|
||||
} else {
|
||||
$("#DataTables_Table_0--${pageName} th input[type='checkbox']").prop("checked", false); // 체크 해제
|
||||
}
|
||||
};
|
||||
|
||||
/**************************************************************************
|
||||
* DataTables 이벤트
|
||||
**************************************************************************/
|
||||
// DataTables에 click, dbclick 이벤트
|
||||
$P.renderList = (totalSize, option) => {
|
||||
let ${infoPrefix}List = $P.control.dataset;
|
||||
let empty = ${infoPrefix}List.empty;
|
||||
let clsForTask = $("#frmSearch--${pageName} input[name='taskSeCd']:checked").val().toLowerCase(); // 소문자
|
||||
|
||||
// 업무별 그리드 td
|
||||
let foundContent = document.getElementById("${infoPrefix}Row--${pageName}").content;
|
||||
let foundTr = $(foundContent).find("tr")[0].cloneNode(false);
|
||||
let foundTds = $(foundContent).find("." + clsForTask + ",.cmn");
|
||||
|
||||
foundTds.each(function() {
|
||||
foundTr.appendChild(this.cloneNode(true));
|
||||
});
|
||||
|
||||
//
|
||||
let replacer = (str, dataItem) => str
|
||||
.replace(/{onclick}/gi, "pageObject['${pageName}'].control.setCurrent('" + dataItem.getValue("SNDNG_DTL_ID") + "');")
|
||||
.replace(/{ondblclick}/gi, "pageObject['${pageName}'].getTotalInfo('" + dataItem.getValue("CRDN_ID") + "');");
|
||||
|
||||
let trs = empty ? [document.getElementById("${infoPrefix}NotFound--${pageName}").content.querySelector("." + clsForTask + ",.cmn").outerHTML]
|
||||
: ${infoPrefix}List.inStrings(foundTr.outerHTML, replacer);
|
||||
|
||||
let noMore = (${infoPrefix}List.length >= totalSize);
|
||||
let initScroll = ($P.control.query.pageNum < 2);
|
||||
if(option != null && option.reloaded){
|
||||
initScroll = false;
|
||||
}
|
||||
$("#table-responsive--${pageName}")[0].changeContent(trs.join(), initScroll, noMore);
|
||||
|
||||
|
||||
// checkbox 체크 해제
|
||||
$("#DataTables_Table_0--${pageName} th input[type='checkbox']").prop("checked", false);
|
||||
|
||||
//보안모드
|
||||
fn_securityModeToggle($("#securityMode--top").is(":checked"));
|
||||
}
|
||||
|
||||
// DataTables에 스크롤이 맨 밑으로 이동했을 때 이벤트
|
||||
$P.scrollDataList = () => {
|
||||
|
||||
|
||||
$P.control.load($P.control.query.pageNum + 1);
|
||||
}
|
||||
|
||||
// DataTables에 더블 클릭시 개별총정보 dialog
|
||||
$P.getTotalInfo = (crdnId) => {
|
||||
if (typeof crdnId == "undefined" || crdnId == null || crdnId == "") return;
|
||||
|
||||
let params = {
|
||||
callControlName: "pageObject['${pageName}'].control"
|
||||
, sggCd: $P.control.dataset.getValue("SGG_CD")
|
||||
, taskSeCd: $P.control.dataset.getValue("TASK_SE_CD")
|
||||
, crdnId: crdnId
|
||||
}
|
||||
|
||||
ajax.get({
|
||||
url: wctx.url("/sprt/sprt02/010/main.do")
|
||||
, data: params
|
||||
, success: resp => {
|
||||
dialog.open({
|
||||
id: "totalInfoMainDialog"
|
||||
, title: "개별총정보"
|
||||
, content: resp
|
||||
, size: "xxl"
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 사용자 함수(function)
|
||||
**************************************************************************/
|
||||
// 검색 자료 재조회
|
||||
$P.fnRefreshList = () => {
|
||||
$P.control.query.crdnIds = null;
|
||||
|
||||
$P.control.reload({all : true});
|
||||
}
|
||||
|
||||
// 사용자검색 callback
|
||||
$P.callbackFindUser = (userId, userNm) => {
|
||||
$("#schRgtrCd--${pageName}").val(userId); // 사용자 ID
|
||||
$("#schRgtrNm--${pageName}").val(userNm); // 사용자 명
|
||||
}
|
||||
|
||||
// 수기 반송 등록
|
||||
$P.getSndbkInfo = (params) => {
|
||||
if (!params) return;
|
||||
|
||||
ajax.get({
|
||||
url: wctx.url("/" + params.taskSeCd + "${infoPrefixUrl}" + "/210/info.do") + "?openerPageName=${pageName}"
|
||||
, data: params || {}
|
||||
, success: resp => {
|
||||
dialog.open({
|
||||
id: $P.control.prefixed("TrgtDialog--${pageName}")
|
||||
, title: params.title
|
||||
, content: resp
|
||||
, size: "xxl"
|
||||
, onClose: () => {}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// 공시송달 등록
|
||||
$P.getSvbtcInfo = (params) => {
|
||||
if (!params) return;
|
||||
|
||||
ajax.get({
|
||||
url: wctx.url("/" + params.taskSeCd + "${infoPrefixUrl}" + "/260/info.do") + "?openerPageName=${pageName}"
|
||||
, data: params || {}
|
||||
, success: resp => {
|
||||
dialog.open({
|
||||
id: "svbtcDialog--${pageName}"
|
||||
, title: params.title
|
||||
, content: resp
|
||||
, size: $P.control.infoSize
|
||||
, onClose: () => { $P.fnRefreshList(); } // 자료 재조회
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 버튼 clickEvent
|
||||
**************************************************************************/
|
||||
// 업무 구분 변경
|
||||
$P.fnResetAndChangeBiz = (taskSeCd) => {
|
||||
// 업무 구분 코드
|
||||
if (typeof taskSeCd == "undefined" || taskSeCd == null || taskSeCd == "") {
|
||||
taskSeCd = $("#layout-navbar input[name='taskSeCd']:checked").val();
|
||||
}
|
||||
|
||||
// 초기 기본 설정
|
||||
$P.initForm(taskSeCd);
|
||||
// 업무 구분별 설정
|
||||
$P.setTask(taskSeCd);
|
||||
|
||||
// dataset 초기화
|
||||
$P.control.dataset.clear();
|
||||
}
|
||||
|
||||
// 사용자검색 버튼 클릭 이벤트
|
||||
$P.fnGetFindUser = () => {
|
||||
let params = {
|
||||
openerPageName: "${pageName}"
|
||||
, callbackFuncName: "pageObject['${pageName}']['callbackFindUser']"
|
||||
}
|
||||
|
||||
ajax.get({
|
||||
url: wctx.url("/user/user02/010/main.do") + "?openerPageName=${pageName}"
|
||||
, data: params || {}
|
||||
, success: resp => {
|
||||
dialog.open({
|
||||
id: "userDialog--${pageName}"
|
||||
, title: "사용자 검색"
|
||||
, content: resp
|
||||
, size: "lg"
|
||||
, init: () => { setDialogZindex(); }
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// 검색 버튼 이벤트
|
||||
$P.fnSearchList = () => {
|
||||
// 검색조건
|
||||
$P.control.query = $P.formFields.get();
|
||||
$P.control.query.fetchSize = $P.control.defaultFetchSize; // 한번에 조회되는 자료 건수
|
||||
|
||||
$P.control.query.sndngDtlSttsCd = "05"; // FIM050 - 05 반송
|
||||
$P.control.query.rcpnRelNm1 = "무인배달"; // 13
|
||||
$P.control.query.rcpnRelNm2 = "우편수취함"; // 14
|
||||
$P.control.query.rcpnRelNm3 = "전자수취함배달"; // 15
|
||||
$P.control.query.rcpnRelNm4 = "수령희망장소배달"; // 16
|
||||
$P.control.query.delYn = "N"; // 삭제 여부
|
||||
|
||||
$P.control.load(1);
|
||||
}
|
||||
|
||||
// 엑셀 버튼 이벤트
|
||||
$P.fnExcel = () => {
|
||||
if ($P.control.dataset.empty) {
|
||||
dialog.alert({
|
||||
conten : "검색된 자료가 없습니다."
|
||||
, 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)")
|
||||
, getCellDefsForPrivacyCell);
|
||||
|
||||
$P.control.query.cellDefs = cellDefs;
|
||||
|
||||
$P.control.download();
|
||||
}
|
||||
|
||||
// 수기 반송 등록 버튼 이벤트
|
||||
$P.fnCreateSndbk = (title) => {
|
||||
// 파라미터 설정
|
||||
let params = $P.control.query; // 검색 조건
|
||||
params.title = title; // 타이틀
|
||||
params.callPurpose = "create"; // 호출 용도 (등록)
|
||||
params.sggCd = $("#sggCd--${pageName}").val(); // 시군구 코드
|
||||
params.taskSeCd = $("#frmSearch--${pageName} input[name='taskSeCd']:checked").val(); // 업무 구분 코드
|
||||
|
||||
$P.getSndbkInfo(params);
|
||||
}
|
||||
|
||||
// 공시송달 등록 버튼 이벤트
|
||||
$P.fnCreateWholSvbtc = (title) => {
|
||||
if ($P.control.dataset.empty) {
|
||||
dialog.alert({
|
||||
content : "검색된 자료가 없습니다."
|
||||
, onOK : () => { }
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
// 파라미터 설정
|
||||
let params = $P.control.query; // 검색 조건
|
||||
params.title = title; // 타이틀
|
||||
params.callPurpose = "create"; // 호출 용도 (등록)
|
||||
params.sggCd = $P.control.dataset.getValue("SGG_CD") // 시군구 코드
|
||||
params.taskSeCd = $P.control.dataset.getValue("TASK_SE_CD") // 업무 구분 코드
|
||||
params.sndngSeCd = $P.control.dataset.getValue("SNDNG_SE_CD") // 발송 구분 코드
|
||||
params.tnocs = $P.control.dataset.getValue("TOT_CNT") // 총건수
|
||||
|
||||
$P.getSvbtcInfo(params);
|
||||
}
|
||||
|
||||
// 선택 통합우편 발송 버튼 이벤트
|
||||
$P.fnCreateSlctnSndngLink = (title) => {
|
||||
// 선택 자료
|
||||
let selected = $P.control.dataset.getKeys("selected");
|
||||
|
||||
if (selected.length < 1) return;
|
||||
|
||||
// 파라미터 설정
|
||||
let params = $P.control.query; // 검색 조건
|
||||
params.title = title; // 타이틀
|
||||
params.callPurpose = "create"; // 호출 용도 (등록)
|
||||
params.sndngDtlIds = selected.join(","); // 발송 상세 Ids
|
||||
params.sggCd = $P.control.dataset.getValue("SGG_CD") // 시군구 코드
|
||||
params.deptCd = $P.control.dataset.getValue("DEPT_CD") // 부서코드
|
||||
params.taskSeCd = $P.control.dataset.getValue("TASK_SE_CD") // 업무 구분 코드
|
||||
params.sndngSeCd = $P.control.dataset.getValue("SNDNG_SE_CD") // 발송 구분 코드
|
||||
params.tnocs = $P.control.dataset.getValue("TOT_CNT") // 총건수
|
||||
}
|
||||
|
||||
// 전체 통합우편 발송 버튼 이벤트
|
||||
$P.fnCreateWholSndngLink = (title) => {
|
||||
if ($P.control.dataset.empty) {
|
||||
dialog.alert({
|
||||
content : "검색된 자료가 없습니다."
|
||||
, onOK : () => { }
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
// 파라미터 설정
|
||||
let params = $P.control.query; // 검색 조건
|
||||
params.title = title; // 타이틀
|
||||
params.callPurpose = "create"; // 호출 용도 (등록)
|
||||
params.sggCd = $P.control.dataset.getValue("SGG_CD") // 시군구 코드
|
||||
params.deptCd = $P.control.dataset.getValue("DEPT_CD") // 부서코드
|
||||
params.taskSeCd = $P.control.dataset.getValue("TASK_SE_CD") // 업무 구분 코드
|
||||
params.sndngSeCd = $P.control.dataset.getValue("SNDNG_SE_CD") // 발송 구분 코드
|
||||
params.tnocs = $P.control.dataset.getValue("TOT_CNT") // 총건수
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 초기 셋팅
|
||||
**************************************************************************/
|
||||
// 이벤트 설정
|
||||
$P.setEvent = () => {
|
||||
// 기본 버튼 이벤트
|
||||
$("#btnReset--${pageName}").on("click", () => $P.fnResetAndChangeBiz()); // 초기화
|
||||
$("#btnSearch--${pageName}").on("click", () => $P.fnSearchList()); // 검색
|
||||
$("#btnExcel--${pageName}").on("click", () => $P.fnExcel()); // 엑셀
|
||||
$("#btnFindUser--${pageName}").on("click", () => $P.fnGetFindUser()); // 사용자 검색
|
||||
|
||||
// 동적검색에서 엔터(Enter) 키를 누르면 검색한다.
|
||||
$("#term--${pageName}").onEnterPress(function() {
|
||||
$P.fnSearchList();
|
||||
});
|
||||
|
||||
// form-date 항목에서 키보드로 입력시 날짜 포맷팅 적용
|
||||
$("#frmSearch--${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);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// 업무 버튼 이벤트
|
||||
$("#btnCreateSndbk--${pageName}").on("click", function() {
|
||||
$P.fnCreateSndbk($(this).attr("title")); // 수기 반송 등록
|
||||
});
|
||||
$("#btnCreateWholSvbtc--${pageName}").on("click", function() {
|
||||
$P.fnCreateWholSvbtc($(this).attr("title")); // 전체 공시송달 등록
|
||||
});
|
||||
$("#btnCreateSlctnSndngLink--${pageName}").on("click", function() {
|
||||
$P.fnCreateSlctnSndngLink($(this).attr("title")); // 선택 통합우편 발송
|
||||
});
|
||||
$("#btnCreateWholSndngLink--${pageName}").on("click", function() {
|
||||
$P.fnCreateWholSndngLink($(this).attr("title")); // 전체 통합우편 발송
|
||||
});
|
||||
|
||||
// DataTables width 변경 조정
|
||||
fnMakeResizableTable($("#table-responsive--${pageName}")[0]);
|
||||
|
||||
// DataTables 스크롤 이벤트 생성
|
||||
fnMakeScrollableTable($("#table-responsive--${pageName}")[0], $P.scrollDataList);
|
||||
}
|
||||
|
||||
// 초기 화면 설정
|
||||
$P.initForm = (taskSeCd) => {
|
||||
// 화면 초기화
|
||||
$("#frmSearch--${pageName}")[0].reset();
|
||||
|
||||
// input, select 초기화
|
||||
let searchForm = $("#frmSearch--${pageName}");
|
||||
searchForm.find("input[type='radio']").not("[name='taskSeCd']").prop("checked", false);
|
||||
searchForm.find("input[type='checkbox']").prop("checked", false);
|
||||
searchForm.find("input[type='text']").val("");
|
||||
searchForm.find("input[type='hidden']").val("");
|
||||
searchForm.find("select").each(function() { $(this).find("option:eq(0)").prop("selected", true); });
|
||||
|
||||
// 최고 관리자 경우 업무구분을 선택할 수 있도록 하자.
|
||||
$("#frmSearch--${pageName} input[name='taskSeCd']").each(function(i) {
|
||||
$(this).prop("disabled", "true");
|
||||
});
|
||||
|
||||
// 기본 데이터 설정
|
||||
$("#sggCd--${pageName}").val("${sggCd}"); // 시군구 코드
|
||||
$("#frmSearch--${pageName} input[name='taskSeCd'][value='" + taskSeCd + "']").prop("checked", true); // 업무 구분 코드
|
||||
initDatepicker("frmSearch--${pageName}"); // 달력 초기화
|
||||
$("#schDlvrYmdFrom--${pageName}").datepicker("setDate", DateUtil.getDateDay(-7).date);
|
||||
$("#schDlvrYmdTo--${pageName}").datepicker("setDate", new Date());
|
||||
$("#schChcRgIndct--${pageName}").prop("checked", true); // 선택등기표시
|
||||
$("#byOutput--${pageName}").val("동적 검색"); // 동적 검색
|
||||
$("#schRgtrNm--${pageName}").prop("readonly", true); // 사용자 이름
|
||||
}
|
||||
|
||||
// 업무 구분별 설정
|
||||
$P.setTask = (taskSeCd) => {
|
||||
// 업무구분에 따른 URL 설정
|
||||
$P.control.urls.load = wctx.url("/" + taskSeCd + "${infoPrefixUrl}" + "/220/list.do"); // 검색
|
||||
|
||||
// 업무별 조회조건
|
||||
renderForTask("frmSearch--${pageName}", taskSeCd.toLowerCase());
|
||||
|
||||
// 업무별 그리드 th
|
||||
let colContent = document.getElementById("${infoPrefix}Col--${pageName}").content;
|
||||
let cols = $(colContent).find("." + taskSeCd.toLowerCase() + ",.cmn");
|
||||
let colsOuterHTML = "";
|
||||
|
||||
cols.each(function() {
|
||||
colsOuterHTML += this.outerHTML;
|
||||
});
|
||||
$("#table-responsive--${pageName}")[0].changeColumn(colsOuterHTML);
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 최초 실행 함수
|
||||
**************************************************************************/
|
||||
// 1. 이벤트 설정
|
||||
$P.setEvent();
|
||||
|
||||
// 2. 초기 설정 및 업무 구분 변경
|
||||
$P.fnResetAndChangeBiz($("#layout-navbar input[name='taskSeCd']:checked").val());
|
||||
|
||||
// 3. 보안모드
|
||||
fn_securityModeToggle($("#securityMode--top").is(":checked"));
|
||||
});
|
||||
|
||||
</script>
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue