초기자료 메인화면 수정(tui그리드 제거)

main
이범준 1 year ago
parent 80cd6cce9c
commit 2c4c515c5d

@ -4,11 +4,12 @@ import javax.annotation.Resource;
import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.ModelAndView;
import cokr.xit.base.web.ApplicationController;
import cokr.xit.fims.crdn.service.CrdnQuery; import cokr.xit.fims.crdn.service.CrdnQuery;
import cokr.xit.fims.crdn.service.CrdnService; import cokr.xit.fims.crdn.service.CrdnService;
import cokr.xit.foundation.web.AbstractController; import cokr.xit.foundation.web.AbstractController;
public class AbstractCrdnController extends AbstractController { public class AbstractCrdnController extends ApplicationController {
@Resource(name="crdnService") @Resource(name="crdnService")
private CrdnService crdnService; private CrdnService crdnService;

@ -35,22 +35,11 @@ public class CrdnController extends AbstractCrdnController {
ModelAndView mav = new ModelAndView(); ModelAndView mav = new ModelAndView();
mav.setViewName("fims/crdn/initData-main"); mav.setViewName("fims/crdn/initData-main");
mav.addObject("pageSuffix","initData-main"); mav.addObject("pageSuffix","initData-main");
setCommonCodes(mav);
return mav;
}
private void setCommonCodes(ModelAndView mav) { Map<String, List<CommonCode>> commonCodes = getCodesOf("FIM001", "FIM002", "FIM026");
Map<String, List<CommonCode>> byGroups = codeService.getCodesOf( mav.addObject("FIM001", commonCodes.get("FIM001"));
"FIM001" addCodes(commonCodes, mav, "FIM002", "FIM026");
, "FIM002" return mav;
);
if ("jsonView".equals(mav.getViewName())) {
mav.addAllObjects(byGroups);
} else {
byGroups.forEach((k, v) -> {
mav.addObject(k, toJson(v));
});
}
} }
@RequestMapping(name="주정차과태료업무 단속자료 목록", value="/PVS/list.do") @RequestMapping(name="주정차과태료업무 단속자료 목록", value="/PVS/list.do")

@ -125,10 +125,28 @@
</div> </div>
<div id="grid"></div> <div class="card-datatable text-nowrap">
<div id="DataTables_Table_0_wrapper--${pageSuffix}" class="dataTables_wrapper dt-bootstrap5 no-footer">
<div id="table-responsive--${pageSuffix}" class="table-responsive"
style="max-width: 1200px;overflow-x: scroll;height:400px;overflow-y: scroll;border-width: 1px">
<table id="DataTables_Table_0"
class="datatables-ajax table table-bordered dataTable no-footer"
aria-describedby="DataTables_Table_0_info"
>
<thead>
<tr id="crdnTheadTr--${pageSuffix}">
</tr>
</thead>
<tbody id="crdnTbody--${pageSuffix}">
</tbody>
</table>
</div>
<div class="d-flex flex-row p-3 justify-content-between"> <div class="d-flex flex-row p-3 justify-content-between">
<label id="crdnPagingInfo" class="dataTables_info" role="status" aria-live="polite"></label> <label id="crdnPagingInfo" class="dataTables_info" role="status" aria-live="polite"></label>
<ul id="crdnPaging--${pageSuffix}" class="pagination pagination-primary"></ul> <ul id="crdnPaging--${pageSuffix}" class="pagination pagination-primary">
</ul>
</div>
</div>
</div> </div>
</div> </div>
</div> </div>
@ -154,18 +172,15 @@ $(function(){
/************************************************************************** /**************************************************************************
* Global Variable * Global Variable
**************************************************************************/ **************************************************************************/
/** var FIM002 = new CommonCodes(${FIM002});
* tui-grid array var FIM026 = new CommonCodes(${FIM026});
* @type {*[]}
*/ ////////////////////////////////////////////////
var GRID = {};
/** /**
* PageNavigation * PageNavigation
* @type {*[]} * @type {*[]}
*/ */
var pageNav = {}; var pageNav = {};
/** /**
* 팝업 객체 * 팝업 객체
* @type {null} * @type {null}
@ -175,26 +190,38 @@ popup = null;
* *
*/ */
var popupDiv; var popupDiv;
/** /**
* 팝업창에서 호출하는 콜백함수 * 팝업창에서 호출하는 콜백함수
*/ */
var callbackSearch = () => searchCrdnList(); var callbackSearch = () => searchCrdnList();
//////////////////////////////////////////////////
var crdnControl = new DatasetControl({ var crdnControl = new DatasetControl({
prefix:"crdn", prefix:"crdn",
prefixName:"초기자료", prefixName:"초기자료",
infoSize:"xl", infoSize:"xl",
urls : { urls : {
load : "" load : "",
getInfo : ""
},
formats: {
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_REG_SE_CD: FIM026
}, },
keymapper:info => info ? info.CRDN_ID : "", keymapper:info => info ? info.CRDN_ID : "",
dataGetter:obj => obj.crdnList, dataGetter:obj => obj.crdnList,
appendData:true appendData:true
}); });
crdnControl.scrollFuncName = scrollCrdns;
crdnControl.onDatasetChange = obj => { crdnControl.onDatasetChange = obj => {
@ -214,27 +241,34 @@ crdnControl.onDatasetChange = obj => {
function fnResetAndChangeBiz(sysSeCd){ function fnResetAndChangeBiz(sysSeCd){
GRID.clear(); $("#crdnTbody--${pageSuffix}").html("");
crdnControl.urls.load = wctx.url("/crdn/"+ sysSeCd +"/list.do"); crdnControl.urls.load = wctx.url("/crdn/"+ sysSeCd +"/list.do");
crdnControl.urls.getInfo = wctx.url("/crdn/"+ sysSeCd +"/info.do");
} }
function searchCrdnList(){ function searchCrdnList(){
crdnControl.query = fnBiz.getParams(); crdnControl.query = fnBiz.getParams();
GRID.clear(); $("#crdnTbody--${pageSuffix}").html("");
crdnControl.load(1); crdnControl.load(1);
} }
function scrollCrdns(){ function scrollCrdns(){
crdnControl.load(crdnControl.query.pageNum + 1); crdnControl.load(crdnControl.query.pageNum + 1);
} }
function renderCrdnList(data) { function renderCrdnList(data) {
if(!crdnControl.appendData){ if(!crdnControl.appendData){
GRID.clear(); $("#crdnTbody--${pageSuffix}").html("");
} }
GRID.appendRows(data.crdnList); var crdnList = crdnControl.dataset;
var empty = crdnList.empty;
var trs = empty ? [ tbodyTemplate.notFound ] : crdnList.inStrings(tbodyTemplate.found);
$("#crdnTbody--${pageSuffix}").html(trs.join());
} }
/******************************* /*******************************
@ -253,9 +287,11 @@ var fnBiz = {
,crdnSeCd: form.find("[name='crdnSeCd']:checked").val() ,crdnSeCd: form.find("[name='crdnSeCd']:checked").val()
,crdnSttsCd: form.find("[name='crdnSttsCd']").val() ,crdnSttsCd: form.find("[name='crdnSttsCd']").val()
,ctznAnsYn: form.find("[name='ctznAnsYn']:checked").val() ,ctznAnsYn: form.find("[name='ctznAnsYn']:checked").val()
,fetchSize: 20 ,fetchSize: 30
} }
} }
,resetBtn: function() { }
,pagePopup: function(flag, params){ ,pagePopup: function(flag, params){
var url; var url;
var popTitle; var popTitle;
@ -291,38 +327,8 @@ var fnBiz = {
} }
popup = CmmPopup.openModal(url, params, popOption, popTitle); popup = CmmPopup.openModal(url, params, popOption, popTitle);
} }
,onClickGrid: function(props){
var selColumn = props.columnInfo.name;
switch (selColumn){
case 'cvlcptRcptNo':
popupDiv = 'edit';
var rowDatas = GRID.store.data.rawData.map(d => {
return {crdnSeCd: d.crdnSeCd, crdnId: d.crdnId, crdnSttsCd: d.crdnSttsCd}
})
pageNav = new PageNavigation(GRID, rowDatas, props.rowKey);
fnBiz.pagePopup(popupDiv, pageNav.gridInfo.curRowData);
$(".tooltip").remove();
break;
default:
break;
}
}
,resetBtn: function() {
}
,onDblClickGrid: function (props) {
popupDiv = 'total';
var rowDatas = GRID.store.data.rawData.map(d => {
return {crdnSeCd: d.crdnSeCd, crdnId: d.crdnId, crdnSttsCd: d.crdnSttsCd}
});
pageNav = new PageNavigation(GRID, rowDatas, props.rowKey);
fnBiz.pagePopup(popupDiv, pageNav.gridInfo.curRowData);
}
,getAnswerSeCode: (stsCode) => { ,getAnswerSeCode: (stsCode) => {
/* /*
,{value: '10', text: '부과대상'} ,{value: '10', text: '부과대상'}
@ -348,7 +354,7 @@ var fnBiz = {
} }
return answerSeCode; return answerSeCode;
} }
}; };
/************************************************************************** /**************************************************************************
* event * event
@ -375,234 +381,50 @@ $(() => {
* Grid * Grid
******************************* */ ******************************* */
var gridColumns = [ var gridColumns = [
{ { header: '차량번호', name: 'VHRNO', width: 80, align: 'center' },
header: '등록구분', { header: '단속구분(신고방법)', name: 'CRDN_SE_CD', width: 100, align: 'center' },
name: 'CRDN_REG_SE_CD', { header: '위반일시', name: 'CRDN_YMD_TM', width: 120, align: 'center' },
minWidth: 50, { header: '사진건수', name: 'ATCH_FILE_CNT', width: 40, align: 'center' },
sortable: false, { header: '수납금액', name: 'RCVMT_AMT', width: 100, align: 'right' },
align: 'center', { header: '위반횟수', name: 'VLTN_NMTM', width: 80, align: 'right' },
formatter({value}) { { header: '위반장소', name: 'CRDN_PLC', width: 150 },
return (new CommonCodes(ComboCodeData.crdnRegSeCd)).value(value); { header: '주민번호(전체)', name: 'RTPYR_NO', width: 110, align: 'center', className: "privacy" },
} { header: '주민번호(마스킹)', name: 'RTPYR_NO_MASK', width: 110, align: 'center', className: "privacy-mask" },
}, { header: '특기사항', name: 'ETC_CN', width: 80, align: 'center' },
{ { header: '서손사유', name: 'ETC_CN', width: 80, align: 'center' },
header: '접수번호', { header: '처리상태명', name: 'CRDN_STTS_NM', width: 80},
name: 'CVLCPT_RCPT_NO', { header: '민원접수번호', name: 'CVLCPT_RCPT_NO', width: 150, align: 'center' },
minWidth: 130, { header: '민원접수일자', name: 'CVLCPT_RCPT_YMD', width: 80, align: 'center' },
sortable: false, { header: '처리기한', name: 'CVLCPT_PRCS_PRNMNT_DT', width: 80, align: 'center' },
align: 'center', { header: '신고자', name: 'CVLCPT_APLCNT_NM', width: 80, align: 'center' },
renderer: { { header: '등록구분', name: 'CRDN_REG_SE_CD', width: 50, align: 'center' },
type: CustomButtonRenderer, { header: '등록일시', name: 'REG_DT', width: 150, align: 'center' },
options: { { header: '최종처리일시', name: 'MDFCN_DT', width: 150, align: 'center' },
formatter: (props)=>{ { header: '상태', name: 'CRDN_STTS_CD', hidden: true },
var rowData = props.grid.getRow(props.rowKey); { header: '서손ID', name: 'LEVY_EXCL_ID', hidden: true },
return { { header: '소유자ID', name: 'RTPYR_ID', hidden: true },
formatter: rowData.crdnSeCd === '09' ? rowData.cvlcptRcptNo : rowData.fileLinkId { header: '서손사유코드', name: 'LEVY_EXCL_RSN_CD', hidden: true },
,element: "text" { header: 'interfaceSeqN', name: 'INTERFACE_SEQN', hidden: true }
,dataAttrs : {
bsToggle: "tooltip",
bsOffset: "0,4",
bsPlacement: "top",
bsHtml: "true"
}
,attrs : {
title : "<i class='bx bx-window bx-xs'></i> <span>단속현황 정보</span>"
}
}
}
,eventFunction: fnBiz.onClickGrid
,eventType: "click"
}
}
},
{
header: '차량번호',
name: 'VHRNO',
minWidth: 80,
sortable: false,
align: 'center'
},
{
header: '단속구분(신고방법)',
name: 'CRDN_SE_CD',
minWidth: 100,
sortable: false,
align: 'center',
formatter({value}) {
return (new CommonCodes(ComboCodeData.crdnSeCd)).value(value);
}
},
{
header: '위반일시',
name: 'CRDN_YMD_TM',
minWidth: 120,
sortable: false,
align: 'center',
formatter({value}) {
return datetimeFormat.format(value); //
}
},
{
header: '사진건수',
name: 'ATCH_FILE_CNT',
minWidth: 40,
sortable: false,
align: 'center'
},
{
header: '수납금액',
name: 'RCVMT_AMT',
minWidth: 100,
sortable: false,
align: 'right',
formatter({value}) {
return numberFormat.format(value); //
}
},
{
header: '위반횟수',
name: 'VLTN_NMTM',
minWidth: 80,
sortable: false,
align: 'right'
},
{
header: '위반장소',
name: 'CRDN_PLC',
minWidth: 200,
sortable: false
},
{
header: '주민번호(전체)',
name: 'RTPYR_NO',
minWidth: 110,
sortable: false,
align: 'center',
className: "privacy"
},
{
header: '주민번호(마스킹)',
name: 'RTPYR_NO_MASK',
minWidth: 110,
sortable: false,
align: 'center',
className: "privacy-mask"
},
{
header: '특기사항',
name: 'ETC_CN',
width: 80,
sortable: false,
align: 'center'
},
{
header: '서손사유',
name: 'ETC_CN', //levyExclRsnCd
width: 80,
sortable: false,
align: 'center'
},
{
header: '처리상태명',
name: 'CRDN_STTS_NM',
hidden: true
},
{
header: '접수일자',
name: 'CVLCPT_RCPT_YMD',
minWidth: 80,
sortable: false,
align: 'center',
formatter({value}) {
return dateFormat.format(value); //
}
},
{
header: '처리기한',
name: 'CVLCPT_PRCS_PRNMNT_DT',
minWidth: 80,
sortable: false,
align: 'center',
formatter({value}) {
return dateFormat.format(value); //
}
},
{
header: '신고자',
name: 'CVLCPT_APLCNT_NM',
minWidth: 80,
sortable: false,
align: 'center'
},
{
header: '등록일시',
name: 'REG_DT',
minWidth: 150,
sortable: false,
align: 'center',
formatter({value}) {
return datetimeFormat.format(value); //
}
},
{
header: '최종처리일시',
name: 'MDFCN_DT',
minWidth: 150,
sortable: false,
align: 'center',
formatter({value}) {
return datetimeFormat.format(value);
}
},
{
header: '상태',
name: 'CRDN_STTS_CD',
hidden: true
},
{
header: '서손ID',
name: 'LEVY_EXCL_ID',
hidden: true
},
{
header: '소유자ID',
name: 'RTPYR_ID',
hidden: true
},
{
header: '서손사유코드',
name: 'LEVY_EXCL_RSN_CD',
hidden: true
},
{
header: 'interfaceSeqN',
name: 'INTERFACE_SEQN',
hidden: true
}
]; ];
var gridOptions = { var gridOptions = {
el: 'grid', theadTr: 'crdnTheadTr--${pageSuffix}',
rowHeaders: ['rowNum'], rowHeader: 'No.',
columns: gridColumns, trDataKey: 'CRDN_ID',
columnOptions: { infoPrefix: "crdn",
frozenCount: 3 prefixName : "단속",
}, clickEvent : "crdnControl.setCurrent('{CRDN_ID}')",
scrollFuncName : crdnControl.scrollFuncName dblClickEvent : "crdnControl.getInfo({})",
columns: gridColumns
}; };
var tbodyTemplate = {};
var initGrid = () => {
GRID = TuiGrid.of(gridOptions);
GRID.on('dblclick', function (props) { fnBiz.onDblClickGrid(props); });
};
$(document).ready(function(){ $(document).ready(function(){
//페이지로딩 후 초기화 //페이지로딩 후 초기화
fnBiz.resetBtn(); fnBiz.resetBtn();
initGrid(); tbodyTemplate = initGrid(gridOptions);
$("#schDateFrom--${pageSuffix}").datepicker({ $("#schDateFrom--${pageSuffix}").datepicker({
changeMonth: true, changeMonth: true,
@ -624,6 +446,14 @@ $(document).ready(function(){
var defaultBizValue = $("#layout-navbar input[name='sysSeCd']:checked").val(); var defaultBizValue = $("#layout-navbar input[name='sysSeCd']:checked").val();
$("#frmSearch--${pageSuffix} input[name='sysSeCd'][value='" + defaultBizValue + "']").prop("checked",true); $("#frmSearch--${pageSuffix} input[name='sysSeCd'][value='" + defaultBizValue + "']").prop("checked",true);
fnResetAndChangeBiz(defaultBizValue); fnResetAndChangeBiz(defaultBizValue);
//스크롤 이벤트 추가
$("#table-responsive--${pageSuffix}").scroll(function(){
var el = $(this);
if((el[0].scrollHeight - el.scrollTop() + 15) == el.outerHeight()){
scrollCrdns();
}
});
}); });
</script> </script>

@ -38,11 +38,6 @@
<link rel="stylesheet" href="<c:url value="/resources/css/fims/framework/common/common.css"/>"/> <link rel="stylesheet" href="<c:url value="/resources/css/fims/framework/common/common.css"/>"/>
<link rel="stylesheet" href="<c:url value="/resources/3rd-party/jquery-ui/1.13.2/themes/redmond/jquery-ui.css"/>" /> <link rel="stylesheet" href="<c:url value="/resources/3rd-party/jquery-ui/1.13.2/themes/redmond/jquery-ui.css"/>" />
<link rel="stylesheet" href="<c:url value="/resources/lib/fims/framework/datepicker/datepicker.css"/>" /> <link rel="stylesheet" href="<c:url value="/resources/lib/fims/framework/datepicker/datepicker.css"/>" />
<link rel="stylesheet" href="<c:url value="/resources/3rd-party/tui/grid/4.21.5/tui-grid/tui-grid.css"/>" />
<link rel="stylesheet" href="<c:url value="/resources/css/fims/framework/common/xit-tui-grid.css"/>" />
<link rel="stylesheet" href="<c:url value="/resources/3rd-party/tui/grid/4.21.5/tui-pagination/tui-pagination.css"/>" />
</head> </head>

@ -41,17 +41,15 @@
<script src="<c:url value="/resources/js/base/user.js?${ver}"/>"></script> <script src="<c:url value="/resources/js/base/user.js?${ver}"/>"></script>
<script src="<c:url value="/resources/js/base/authority.js?${ver}"/>"></script> <script src="<c:url value="/resources/js/base/authority.js?${ver}"/>"></script>
<!-- 날짜 관련 유틸 --> <!-- 날짜 관련 유틸 -->
<script src="<c:url value="/resources/js/fims/framework/cmm/cmmDateUtil.js"/>?${ver}"></script> <script src="<c:url value="/resources/js/fims/framework/cmm/cmmDateUtil.js"/>?${ver}"></script>
<!-- 데이트픽커 --> <!-- 데이트픽커 -->
<script src="<c:url value="/resources/lib/fims/framework/datepicker/datepicker.js?${ver}"/>"></script> <script src="<c:url value="/resources/lib/fims/framework/datepicker/datepicker.js?${ver}"/>"></script>
<!-- tui그리드 --> <!-- 그리드 템플릿 설정 -->
<script type="text/javascript" src="<c:url value="/resources/3rd-party/tuiGrid/js/tui-code-snippet.js" />"></script> <script src="<c:url value="/resources/js/fims/framework/cmm/initGrid.js"/>?${ver}"></script>
<script type="text/javascript" src="<c:url value="/resources/3rd-party/tui/grid/4.21.5/tui-pagination/tui-pagination.js" />"></script>
<script type="text/javascript" src="<c:url value="/resources/3rd-party/tui/grid/4.21.5/tui-grid/tui-grid.js" />"></script>
<script type="text/javascript" src="<c:url value="/resources/js/fims/framework/cmm/xit-tui-grid.js" />"></script>
<!-- 코드 변수 --> <!-- 코드 변수 -->
<script type="text/javascript" src="<c:url value="/resources/js/fims/biz/common/codeComboData.js" />"></script> <script type="text/javascript" src="<c:url value="/resources/js/fims/biz/common/codeComboData.js" />"></script>

@ -1,562 +0,0 @@
/*!
* TOAST UI Date Picker
* @version 4.3.1
* @author NHN. FE Development Lab <dl_javascript@nhn.com>
* @license MIT
*/
@charset "utf-8";
.tui-calendar {
position: relative;
background-color: #fff;
border: 1px solid #aaa;
width: 274px;
}
.tui-calendar * {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
.tui-calendar div {
text-align: center
}
.tui-calendar caption {
padding: 0
}
.tui-calendar caption span {
overflow: hidden;
position: absolute;
clip: rect(0 0 0 0);
width: 1px;
height: 1px;
margin: -1px;
padding: 0
}
.tui-calendar button, .tui-datepicker-dropdown button, .tui-datepicker-selector button {
-webkit-appearance: none;
-moz-appearance: none;
appearance: none
}
.tui-ico-date, .tui-ico-time, .tui-datepicker-dropdown .tui-ico-check, .tui-ico-caret {
overflow: hidden;
display: inline-block;
width: 1px;
height: 1px;
line-height: 300px;
background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAC8AAAA+CAYAAAC7rUKSAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpERjdGMzkzODVEQkRFNjExQkVCMjlDOUFDNzZDM0E5NCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDo1ODVCRTc4NkM2QkQxMUU2OTgzMzhGQjZFMjcyMTQ1RSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo1ODVCRTc4NUM2QkQxMUU2OTgzMzhGQjZFMjcyMTQ1RSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M2IChXaW5kb3dzKSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjFERENDMTc0QjlDNkU2MTE5OTc0QjIwOTY3QkQzNjZBIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkRGN0YzOTM4NURCREU2MTFCRUIyOUM5QUM3NkMzQTk0Ii8+IDwvcmRmOkRlc2NyaXB0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) no-repeat
}
.tui-ico-date {
width: 12px;
height: 12px;
background-position: -17px 0
}
.tui-ico-time {
width: 12px;
height: 12px;
background-position: 0 -30px
}
.tui-ico-caret {
width: 7px;
height: 4px;
background-position: 0 -58px
}
.tui-calendar-month, .tui-calendar-year {
width: 202px;
}
.tui-calendar-month .tui-calendar-body, .tui-calendar-year .tui-calendar-body {
width: 202px;
margin: 0 auto;
}
.tui-calendar .tui-calendar-header {
position: relative;
border-bottom: 1px solid #efefef
}
.tui-calendar .tui-calendar-header-inner {
padding: 17px 50px 15px;
height: 50px
}
.tui-calendar .tui-calendar-title-today {
height: 30px;
margin: 0;
font-size: 12px;
line-height: 34px;
color: #777;
background-color: #f4f4f4
}
.tui-calendar .tui-calendar-title-today:hover {
color: #333;
background-color: #edf4fc;
cursor: pointer;
}
.tui-calendar .tui-calendar-title {
display: inline-block;
font-size: 18px;
font-weight: normal;
font-style: normal;
line-height: 1;
color: #333;
cursor: default;
vertical-align: top
}
.tui-calendar-btn {
overflow: hidden;
position: absolute;
top: 0;
width: 32px;
height: 50px;
line-height: 400px;
z-index: 10;
cursor: pointer;
border: none;
background-color: #fff;
}
.tui-calendar .tui-calendar-btn-prev-month {
left: 0
}
.tui-calendar .tui-calendar-btn-next-month {
right: 0
}
.tui-calendar .tui-calendar-btn-prev-year {
left: 0
}
.tui-calendar .tui-calendar-btn-next-year {
right: 0
}
.tui-calendar .tui-calendar-btn-prev-month:after, .tui-calendar .tui-calendar-btn-next-month:after, .tui-calendar .tui-calendar-btn-prev-year:after, .tui-calendar .tui-calendar-btn-next-year:after {
overflow: hidden;
position: absolute;
top: 50%;
margin-top: -5px;
line-height: 400px;
background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAC8AAAA+CAYAAAC7rUKSAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpERjdGMzkzODVEQkRFNjExQkVCMjlDOUFDNzZDM0E5NCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDo1ODVCRTc4NkM2QkQxMUU2OTgzMzhGQjZFMjcyMTQ1RSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo1ODVCRTc4NUM2QkQxMUU2OTgzMzhGQjZFMjcyMTQ1RSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M2IChXaW5kb3dzKSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjFERENDMTc0QjlDNkU2MTE5OTc0QjIwOTY3QkQzNjZBIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkRGN0YzOTM4NURCREU2MTFCRUIyOUM5QUM3NkMzQTk0Ii8+IDwvcmRmOkRlc2NyaXB0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) no-repeat;
content: ''
}
.tui-calendar .tui-calendar-btn-prev-month:after, .tui-calendar.tui-calendar-month .tui-calendar-btn-prev-year:after {
width: 6px;
height: 11px;
left: 50%;
margin-left: -3px;
background-position: 0 0
}
.tui-calendar .tui-calendar-btn-next-month:after, .tui-calendar.tui-calendar-month .tui-calendar-btn-next-year:after {
width: 6px;
height: 11px;
right: 50%;
margin-right: -3px;
background-position: -8px 0
}
.tui-calendar .tui-calendar-btn-prev-year:after {
width: 11px;
height: 10px;
left: 50%;
margin-left: -6px;
background-position: -16px -36px
}
.tui-calendar .tui-calendar-btn-next-year:after {
width: 11px;
height: 10px;
right: 50%;
margin-right: -6px;
background-position: -16px -49px
}
.tui-calendar.tui-calendar-month .tui-calendar-btn-prev-year, .tui-calendar.tui-calendar-month .tui-calendar-btn-next-year {
width: 50px
}
.tui-calendar .tui-calendar-has-btns .tui-calendar-btn-prev-year {
left: 10px
}
.tui-calendar .tui-calendar-has-btns .tui-calendar-btn-next-year {
right: 10px
}
.tui-calendar .tui-calendar-has-btns .tui-calendar-btn-prev-month {
left: 44px
}
.tui-calendar .tui-calendar-has-btns .tui-calendar-btn-next-month {
right: 44px
}
.tui-calendar .tui-calendar-body-header th {
color: #777
}
.tui-calendar .tui-calendar-body-inner {
width: 100%;
margin: 0 auto;
table-layout: fixed;
border-collapse: collapse;
text-align: center;
font-size: 12px
}
.tui-calendar th {
font-weight: normal;
cursor: default
}
.tui-calendar th, .tui-calendar td {
height: 39px;
text-align: center;
color: #999
}
.tui-calendar .tui-is-blocked:hover {
cursor: default
}
.tui-calendar .tui-calendar-month {
width: 25%;
height: 50px
}
.tui-calendar .tui-calendar-today {
color: #4b96e6
}
.tui-calendar .tui-calendar-prev-month, .tui-calendar .tui-calendar-next-month {
color: #ccc
}
.tui-calendar .tui-calendar-prev-month.tui-calendar-date, .tui-calendar .tui-calendar-next-month.tui-calendar-date {
visibility: hidden
}
.tui-calendar .tui-calendar-btn-choice {
background-color: #4b96e6
}
.tui-calendar .tui-calendar-btn-close {
background-color: #777
}
.tui-calendar .tui-calendar-year {
width: 25%;
height: 50px
}
.tui-calendar.tui-calendar-year .tui-calendar-btn-prev-year:after {
width: 6px;
height: 11px;
left: 50%;
margin-left: -3px;
background-position: 0 0
}
.tui-calendar.tui-calendar-year .tui-calendar-btn-next-year:after {
width: 6px;
height: 11px;
right: 50%;
margin-right: -3px;
background-position: -8px 0
}
.tui-calendar.tui-calendar-year .tui-calendar-btn-prev-year, .tui-calendar.tui-calendar-year .tui-calendar-btn-next-year {
width: 50px
}
.tui-datepicker {
border: 1px solid #aaa;
background-color: white;
position: absolute;
}
.tui-datepicker * {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
.tui-datepicker-type-date {
width: 274px;
}
.tui-datepicker-body .tui-calendar-month, .tui-datepicker-body .tui-calendar-year {
width: auto;
}
.tui-datepicker .tui-calendar {
border: 0;
}
.tui-datepicker .tui-calendar-title {
cursor: pointer;
}
.tui-datepicker .tui-calendar-title.tui-calendar-title-year-to-year {
cursor: auto;
}
.tui-datepicker-body .tui-timepicker, .tui-datepicker-footer .tui-timepicker {
width: 274px;
position: static;
padding: 20px 46px 20px 47px;
border: 0
}
.tui-datepicker-footer .tui-timepicker {
border-top: 1px solid #eee
}
.tui-datepicker-selector {
padding: 10px;
font-size: 0;
text-align: center;
border-bottom: 1px solid #eee
}
.tui-datepicker-selector-button {
width: 50%;
height: 26px;
font-size: 12px;
line-height: 23px;
border: 1px solid #ddd;
background-color: #fff;
color: #777;
outline: none;
cursor: pointer
}
.tui-datepicker-selector-button.tui-is-checked {
background-color: #eee;
color: #333
}
.tui-datepicker-selector-button+.tui-datepicker-selector-button {
margin-left: -1px
}
.tui-datepicker-selector-button [class^=tui-ico-] {
margin: 5px 9px 0 0;
vertical-align: top;
}
.tui-datepicker-selector-button.tui-is-checked .tui-ico-date, .tui-datepicker-input.tui-has-focus .tui-ico-date {
background-position: -17px -14px
}
.tui-datepicker-selector-button.tui-is-checked .tui-ico-time {
background-position: 0 -44px
}
.tui-datepicker-area {
position: relative
}
.tui-datepicker-input {
position: relative;
display: inline-block;
width: 120px;
height: 28px;
vertical-align: top;
border: 1px solid #ddd
}
.tui-datepicker-input * {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
.tui-datepicker-input > input {
width: 100%;
height: 100%;
padding: 6px 27px 6px 10px;
font-size: 12px;
line-height: 14px;
vertical-align: top;
border: 0;
color: #333
}
.tui-datepicker-input > .tui-ico-date {
position: absolute;
top: 50%;
right: 8px;
margin: -6px 0 0 0
}
.tui-datepicker-input.tui-has-focus {
border-color: #aaa
}
.tui-datetime-input {
width: 170px
}
.tui-datepicker .tui-is-blocked {
cursor: default;
color: #ddd
}
.tui-datepicker .tui-is-valid {
color: #999
}
.tui-datepicker .tui-is-selectable:hover {
background-color: #edf4fc;
cursor: pointer;
}
.tui-datepicker .tui-is-selectable.tui-is-selected, .tui-datepicker.tui-rangepicker .tui-is-selectable.tui-is-selected {
background-color: #4b96e6;
color: #fff
}
.tui-datepicker.tui-rangepicker .tui-is-selected-range {
background-color: #edf4fc;
}
.tui-datepicker-dropdown {
display: inline-block;
width: 120px
}
.tui-datepicker-dropdown .tui-dropdown-button {
width: 100%;
height: 28px;
padding: 0 10px;
font-size: 12px;
line-height: 20px;
border: 1px solid #ddd;
padding: 0 30px 0 10px;
text-align: left;
background: #fff;
cursor: pointer
}
.tui-datepicker-dropdown {
position: relative
}
.tui-datepicker-dropdown .tui-ico-caret {
position: absolute;
top: 12px;
right: 10px
}
.tui-datepicker-dropdown .tui-dropdown-menu {
display: none;
position: absolute;
top: 27px;
left: 0;
right: 0;
width: 100%;
padding: 5px 0;
margin: 0;
overflow-y: auto;
min-width: 0;
max-height: 198px;
font-size: 12px;
border: 1px solid #ddd;
border-top-color: #fff;
z-index: 10;
box-sizing: border-box;
box-shadow: none;
border-radius: 0
}
.tui-datepicker-dropdown.tui-is-open .tui-dropdown-button {
display: block
}
.tui-datepicker-dropdown.tui-is-open .tui-dropdown-menu, .tui-datepicker-dropdown.tui-is-open .tui-dropdown-button {
display: block;
border-color: #aaa
}
.tui-datepicker-dropdown.tui-is-open .tui-ico-caret {
background-position: -21px -28px
}
.tui-datepicker-dropdown .tui-menu-item {
position: relative;
overflow: hidden;
position: relative;
height: 28px;
line-height: 28px;
background-color: #fff;
z-index: 10
}
.tui-datepicker-dropdown .tui-menu-item-btn {
position: relative;
width: 100%;
font-size: 12px;
font-weight: normal;
line-height: 28px;
padding: 0 10px 0 30px;
text-align: left;
color: #333;
background-color: #fff;
border: 0;
cursor: pointer;
z-index: 9
}
.tui-datepicker-dropdown .tui-menu-item-btn:hover, .tui-menu-item-btn:focus, .tui-menu-item-btn:active {
color: #333;
background-color: #f4f4f4
}
.tui-datepicker-dropdown .tui-menu-item .tui-ico-check {
display: none;
overflow: hidden;
position: absolute;
width: 10px;
height: 8px;
top: 10px;
left: 10px;
background-position: -31px -54px;
z-index: 10;
content: 'aaa'
}
.tui-datepicker-dropdown .tui-menu-item.tui-is-selected .tui-ico-check {
display: block
}
.tui-datepicker-dropdown .tui-menu-item.tui-is-selected .tui-menu-item-btn {
font-weight: bold
}
.tui-dropdown-area {
font-size: 0
}
.tui-dropdown-area .tui-datepicker-dropdown+.tui-datepicker-dropdown {
margin-left: 5px
}
.tui-hidden {
display: none;
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -1,202 +0,0 @@
/*!
* TOAST UI Pagination
* @version 3.4.1
* @author NHN FE Development Team <dl_javascript@nhn.com>
* @license MIT
*/
@charset 'utf-8';
.tui-pagination * {
-moz-user-select: none;
-webkit-user-select: none;
-ms-user-select: none;
user-select: none;
}
.tui-ico-ellipsis, .tui-ico-first, .tui-ico-last, .tui-ico-next, .tui-ico-prev {
overflow: hidden;
}
.tui-pagination {
height: 28px;
margin: 14px 0 12px;
line-height: normal;
text-align: center;
font-size: 0;
}
.tui-pagination .tui-page-btn {
display: inline-block;
position: relative;
width: 28px;
padding: 8px 0 6px;
margin-left: 0;
color: #333;
font-size: 12px;
font-weight: normal;
line-height: 1;
text-decoration: none;
vertical-align: middle;
border: 1px solid #ddd;
border-width: 1px 0;
}
.tui-pagination .tui-page-btn:hover {
background-color: #f4f4f4;
}
.tui-pagination .tui-is-selected, .tui-pagination strong {
color: #fff;
background: #4b96e6;
border-color: #4b96e6;
cursor: default;
}
.tui-pagination .tui-is-selected:hover {
background-color: #4b96e6;
}
.tui-pagination .tui-first-child.tui-is-selected, .tui-pagination strong.tui-first-child {
margin-left: 0
}
.tui-pagination .tui-first-child, .tui-pagination .tui-prev-is-ellip {
border-left: 1px solid #ddd
}
.tui-pagination .tui-last-child, .tui-pagination .tui-next-is-ellip {
border-right: 1px solid #ddd
}
.tui-pagination .tui-first-child.tui-is-selected {
border-left: 1px solid #4b96e6
}
.tui-pagination .tui-last-child.tui-is-selected {
border-right: 1px solid #4b96e6
}
.tui-pagination .tui-first, .tui-pagination .tui-prev, .tui-pagination .tui-next, .tui-pagination .tui-last, .tui-pagination .tui-prev-is-ellip, .tui-pagination .tui-next-is-ellip {
overflow: hidden;
height: 26px;
padding: 0;
font-size: 0;
line-height: 26px;
white-space: nowrap;
font-weight: normal;
border: 1px solid #ddd;
}
.tui-pagination .tui-prev-is-ellip {
border-right: 0
}
.tui-pagination .tui-next-is-ellip {
border-left: 0
}
.tui-pagination .tui-first+.tui-prev, .tui-pagination .tui-next+.tui-last {
border-left: 0
}
.tui-pagination .tui-ico-first, .tui-pagination .tui-ico-prev, .tui-pagination .tui-ico-next, .tui-pagination .tui-ico-last, .tui-pagination .tui-ico-ellip {
background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAiCAYAAAA+stv/AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6N0YwN0I4MUNDNjk0MTFFNjgzNjg5NTM0OEZDQ0YxNTUiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6N0YwN0I4MURDNjk0MTFFNjgzNjg5NTM0OEZDQ0YxNTUiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo3RjA3QjgxQUM2OTQxMUU2ODM2ODk1MzQ4RkNDRjE1NSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo3RjA3QjgxQkM2OTQxMUU2ODM2ODk1MzQ4RkNDRjE1NSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PlM+zvEAAAMuSURBVHjaxFdrS5RREH73Zako6kt92x8QRR+qXYjoQneTyKCoMAmKspLI6EMQFBjSxehCdLGixa5maHbZilIro9uH2C2IoF+w/6EstJnleXV2mvO+W6458CA+45mZc+aceV5jyWTSU7aEsJOwUXO5XK7A5fN5vWYFoZawXnOJRKLAufLEDbKTsCmC08nblN/izDy+Iu9h0TNwSw3OlbwLXIXBSSuK6avkNSp5h+JKSX4nInlRTC6g0kheGZG8ykheFZHcjClb0Gcs6nP08Ad+DkRwXlRMH9XUoLpl4C1OWhd22oZWuDhpZkxfOHlxuypCc+UooiimbMFz4Vwewukiqo0iqkOKKIrpO5x1EZy0biSsjeDMPDHvL8yYgCUbTUST971RtjjNaO7VDRxLYOcIHwm3Hes6sOaJ4C4ScoSWEk+voBV8AtdxYVYLJwc/Q9jmKOAy4RZhreDShCYIWZQFUzQdx61dB3HghPexkwr4xhAuqQAvCWsID/kUcaM/42l1Y815R/KicR2o4SuM0kdYfBcBWSN6CGMJZ1WgNzi1DNZwu74QFqNAXnMqLLmH6gN7S1iFvk4kXCV8FQEnERpVwPeElRgw7G8mfCMswqY4ToPQimtaK3xjTvcr7hcQZjz/vyuuX+iDUytkAXNQ2X7snm0q4TV21mgknofXs0/c/mlYw3fgWMToHixgPo6xHq+CbTqhF6/hhJF8AfpfJ57rDKw5TjhZin746DEH2oELwjYTgY6iAOvDIoNR2w5uFvreEPIC/tAKvoR7CFsQMLBdhEOiFdrYv1kNou2EA65B5NKP/6YFLl0YdS2IkRYEzyKmnknR7/Q/weBpQT9aVQu8TCYjtaIVk3JETqAFWrDB4W8WQydcDbPZrL4HUb97qVSqR4zhcYSb6k96MVXZPx5CNTS1BoZmUXwY7XuHt8yDaIIhWB+En4u8YJ7AMO9QFoLFb3sy4Yjyf8KceUGYQjg8El9EPw39KEUrylJAMDFPG7tnmw1/E1DWFrB4PSUcJFwx/HMJjzEd085X8I/JF+LjpR7PURt/Dzwg7Bb6UtYC9mL2dzr8nHiraxBJ+y3AAOpc//DIQNiHAAAAAElFTkSuQmCC) no-repeat 0 0;
display: inline-block;
vertical-align: middle;
font-size: 0px;
}
.tui-pagination .tui-prev-is-ellip, .tui-pagination .tui-next-is-ellip {
padding: 0;
line-height: 1;
}
.tui-pagination .tui-prev {
margin-right: 10px;
}
.tui-pagination .tui-next {
margin-left: 10px;
}
.tui-pagination .tui-ico-first {
width: 11px;
height: 10px;
background-position: 0px 0px
}
.tui-pagination .tui-ico-prev {
width: 6px;
height: 10px;
background-position: -26px 0px
}
.tui-pagination .tui-ico-next {
width: 6px;
height: 10px;
background-position: -13px -24px
}
.tui-pagination .tui-ico-last {
width: 11px;
height: 10px;
background-position: 0px -12px
}
.tui-pagination .tui-ico-ellip {
width: 10px;
height: 2px;
margin-top: 16px;
vertical-align: top;
background-position: 0px -24px
}
.tui-pagination .tui-is-disabled:hover {
background: #fff;
cursor: default
}
.tui-pagination .tui-is-disabled .tui-ico-prev {
background-position: -26px -12px
}
.tui-pagination .tui-is-disabled .tui-ico-first {
background-position: -13px 0px
}
.tui-pagination .tui-is-disabled .tui-ico-next {
background-position: -21px -24px
}
.tui-pagination .tui-is-disabled .tui-ico-last {
background-position: -13px -12px
}
.tui-page-inputs {
display: inline-block;
vertical-align: top;
}
.tui-page-inputs .tui-page-input {
display: inline-block;
width: 10px;
height: 12px;
padding: 8px 0 6px;
font-size: 12px;
text-align: center;
color: #333;
border: 0;
outline: none;
}
.tui-page-inputs .tui-page-current {
color: #4b96e6
}
.tui-page-separator {
display: inline-block;
font-size: 12px;
height: 12px;
padding: 8px 0 6px;
vertical-align: top
}

@ -1,286 +0,0 @@
/*!
* TOAST UI Time Picker
* @version 2.1.4
* @author NHN FE Development Lab <dl_javascript@nhn.com>
* @license MIT
*/
@charset 'utf-8';
.tui-timepicker * {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
.tui-timepicker button {
border-radius: 0;
}
.tui-timepicker input, .tui-timepicker select {
font-weight: normal;
}
.tui-ico-t-btn, .tui-timepicker-input-radio, .tui-ico-colon, .tui-ico-time {
overflow: hidden;
display: inline-block;
width: 1px;
height: 1px;
line-height: 300px;
background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAC8AAAA+CAYAAAC7rUKSAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpERjdGMzkzODVEQkRFNjExQkVCMjlDOUFDNzZDM0E5NCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDo1ODVCRTc4NkM2QkQxMUU2OTgzMzhGQjZFMjcyMTQ1RSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo1ODVCRTc4NUM2QkQxMUU2OTgzMzhGQjZFMjcyMTQ1RSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M2IChXaW5kb3dzKSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjFERENDMTc0QjlDNkU2MTE5OTc0QjIwOTY3QkQzNjZBIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkRGN0YzOTM4NURCREU2MTFCRUIyOUM5QUM3NkMzQTk0Ii8+IDwvcmRmOkRlc2NyaXB0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) no-repeat;
}
.tui-timepicker .tui-timepicker-select {
-webkit-appearance: none;
-moz-appearance: none;
-o-appearance: none;
appearance: none;
border-radius: 0;
}
.tui-timepicker .tui-timepicker-select::-ms-expand {
display: none;
}
.tui-calendar-select-content .tui-timepicker {
border: 0;
margin: 0 auto;
}
.tui-timepicker input {
font-size: 16px;
text-align: center;
font-weight: normal;
}
.tui-timepicker {
position: relative;
top: -1px;
padding: 30px 20px;
font-weight: bold;
border: 1px solid #aaa;
background: white;
text-align: center;
}
.tui-timepicker-row {
width: 100%;
font-size: 0;
}
.tui-timepicker-column {
display: inline-block;
vertical-align: middle;
}
.tui-timepicker-btn-area {
position: relative;
height: 88px;
padding: 19px 0
}
.tui-timepicker-spinbox {
width: 52px;
}
.tui-timepicker-selectbox+.tui-timepicker-selectbox {
padding-left: 5px;
}
.tui-timepicker-btn-area .tui-timepicker-spinbox-input {
width: 100%;
height: 100%;
line-height: 46px;
border: 1px solid #ddd;
}
.tui-timepicker-btn {
position: absolute;
left: 0;
width: 100%;
height: 20px;
background-color: transparent;
border: 1px solid #ddd;
cursor: pointer;
}
.tui-timepicker-btn:hover, .tui-timepicker-btn:focus, .tui-timepicker-btn:active {
background-color: #f4f4f4;
}
.tui-timepicker-btn-up {
top: 0;
}
.tui-timepicker-btn-down {
bottom: 0
}
.tui-timepicker-btn .tui-ico-t-btn {
width: 13px;
height: 7px;
}
.tui-timepicker-btn-up .tui-ico-t-btn {
background-position: 0 -12px;
}
.tui-timepicker-btn-down .tui-ico-t-btn {
background-position: 0 -21px;
}
.tui-timepicker-colon {
width: 22px;
}
.tui-timepicker-body .tui-timepicker-colon, .tui-timepicker-footer .tui-timepicker-colon {
width: 18px;
}
.tui-ico-colon {
width: 2px;
height: 7px;
background-position: -17px -28px;
}
.tui-timepicker-select {
width: 52px;
height: 28px;
padding: 5px 0 5px 9px;
font-size: 12px;
border: 1px solid #ddd;
background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAECAYAAACHtL/sAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6Mzk1NDA2RTVCREIxMTFFNjhENTJFMjdDNDQ3RDJCMTEiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6Mzk1NDA2RTZCREIxMTFFNjhENTJFMjdDNDQ3RDJCMTEiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDozOTU0MDZFM0JEQjExMUU2OEQ1MkUyN0M0NDdEMkIxMSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDozOTU0MDZFNEJEQjExMUU2OEQ1MkUyN0M0NDdEMkIxMSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PpZ5HPgAAAAxSURBVHjaYjQ2Nv7PgBswgogzZ87gVMAEU4RLMyHABKUFyNGMbMBHJEOI1gwCAAEGAPSlBRrNcMApAAAAAElFTkSuQmCC) no-repeat;
background-position: 100% 50%;
cursor: pointer;
}
.tui-timepicker-check-lst {
list-style: none;
padding: 0;
margin: 0;
}
.tui-timepicker-check {
margin-top: 11px;
}
.tui-timepicker-check:first-child {
margin-top: 0;
}
.tui-timepicker-checkbox {
padding-left: 16px;
}
.tui-timepicker-radio {
overflow: hidden;
position: relative;
text-align: left;
}
.tui-timepicker-radio input {
position: absolute;
left: -9999px;
width: 1px;
height: 1px;
}
.tui-timepicker-radio-label {
display: inline-block;
padding-left: 20px;
font-size: 12px;
line-height: 16px;
vertical-align: top;
color: #777;
cursor: pointer
}
.tui-timepicker-input-radio {
position: absolute;
display: block;
top: 0;
left: 0;
width: 16px;
height: 16px;
vertical-align: middle;
background-position: -31px 0;
}
.tui-timepicker-radio .tui-timepicker-meridiem-checked+.tui-timepicker-radio-label .tui-timepicker-input-radio {
background-position: -31px -18px;
}
.tui-timepicker-radio input:disabled+.tui-timepicker-radio-label .tui-timepicker-input-radio {
background-position: -31px -36px;
}
.tui-ico-time {
width: 12px;
height: 12px;
background-position: 0 -30px
}
.tui-timepicker-area {
position: relative
}
.tui-time-input {
position: relative;
display: inline-block;
width: 120px;
height: 28px;
border: 1px solid #ddd
}
.tui-time-input input {
width: 100%;
height: 100%;
padding: 0 27px 0 10px;
font-size: 12px;
border: 0;
color: #333;
box-sizing: border-box
}
.tui-time-input .tui-ico-time {
position: absolute;
top: 50%;
right: 8px;
margin: -6px 0 0 0
}
.tui-time-input.tui-has-focus {
border-color: #aaa
}
.tui-time-input .tui-ico-time {
background-position: 0 -30px
}
.tui-time-input.tui-has-focus .tui-ico-time {
background-position: 0 -44px
}
.tui-has-left.tui-timepicker-body, .tui-has-left .tui-timepicker-row {
position: relative;
}
.tui-has-left .tui-timepicker-row:after {
display: block;
clear: both;
content: '';
}
.tui-has-left .tui-is-add-picker {
float: left;
padding: 0 5px 0 0;
}
.tui-has-left .tui-timepicker-checkbox {
float: left;
margin-top: 23px;
padding: 0 16px 0 0;
}
.tui-hidden {
display: none;
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

@ -38,46 +38,10 @@ input[data-fmt-type=time], input[data-fmt-type=day] {
/*---- 모달 ----*/ /*---- 모달 ----*/
.modal-wrap { .modal-wrap {
position: fixed; max-height:800px;
left: 0; overflow-y:scroll;
top: 0;
width: 100%;
height: 100%;
display: none;
background: rgba(0, 0, 0, 0.7);
z-index: 1000; }
.modal-wrap .modal-cell {
display: table-cell;
vertical-align: middle;
text-align: center;
overflow-y: scroll; }
.modal-wrap .modal-cell .cont-box {
display: none;
position: relative;
margin: 0 auto;
background: #fff;
width: 500px;
padding: 40px 30px;
-webkit-box-sizing: border-box;
box-sizing: border-box; }
.modal-wrap .modal-cell .cont-box .btn-box {
padding-top: 10px;
margin-bottom: -10px; }
.modal-wrap .modal-cell .cont-box .btn-close {
position: absolute;
top: 10px;
right: 10px;
background: transparent;
border: none;
font-size: 30px; }
.modal-wrap .modal-cell .cont-box .btn-close::after {
content: "\f00d"; }
@media screen and (max-width: 760px) {
.modal-wrap .modal-cell .cont-box {
width: 90%; }
} }
button.btnDark { button.btnDark {
border: 1px solid #564a44; border: 1px solid #564a44;
background: #564a44; background: #564a44;

@ -1,70 +0,0 @@
@charset "utf-8";
/* *********************************************
* tui-grid Custom
* @ 2020.06.10.
* @
* @
*
********************************************* */
/* selected row */
table.tui-grid-table tr.tui-grid-cell-current-row > td{
background-color: rgba(199, 235, 235, 1);
}
table.tui-grid-table tr.tui-grid-cell-current-row > td:focus{
outline: none;
}
/* font size */
table.tui-grid-table th{
border-color: #fff;
font-size: 13px;
font-family: 'notokr-bold';
color: #101010;
}
table.tui-grid-table td div{
font-size: 0.75rem;
}
/* header color */
table.tui-grid-table th.tui-grid-cell-header, table.tui-grid-table th.tui-grid-cell-row-header{
background-color: #eee;
border-right: 1px solid #fff;
border-top: 2px solid #d0d0d0;;
}
/* grid cell */
/* table.tui-grid-table td.tui-grid-cell div.tui-grid-cell-content{ */
/* overflow: auto; */
/* } */
table.tui-grid-table td.tui-grid-cell-editable > div.tui-grid-cell-content{
/* border: 1px outset; */
cursor: pointer;
}
/* 2020.09.16 정지현*/
/* summary영역 수정 */
.tui-grid-summary-area .tui-grid-cell {
text-align: right;
font-size: 11px;
padding-right: 5px;
background-color: rgba(238, 238, 238, 1);
border: 1px solid white;
}
.tui-grid-table tr {
border-bottom: 1px solid #eee;
}
/* "CustomButtonRenderer" print cell .. */
table.tui-grid-table tr > td > span > p {
color: #0000ee;
cursor: pointer;
padding-bottom: 1px;
border-bottom: solid 1px;
padding-left: 10px;
}

@ -0,0 +1,83 @@
var initGrid = (gridOptions) => {
var tableBodyTemplate = {};
var strThs = "";
var strBodyTrs = "";
var colCnt = 0;
if(gridOptions.rowHeader){
strThs += `<th tabindex="0" aria-controls="DataTables_Table_0" rowspan="1" colspan="1"
style="width: 50px; text-align:center;">
${gridOptions.rowHeader}
</th>`;
colCnt++
}
strBodyTrs += `<tr data-key="${gridOptions.trDataKey}">`;
if(gridOptions.rowHeader){
strBodyTrs += `<td
onclick="${gridOptions.clickEvent}"
ondblclick="${gridOptions.dblClickEvent}"
>{ROW_NUM}
</td>`;
}
var gridColumns = gridOptions.columns;
gridColumns.forEach(function(item, idx, arr){
var gHeader = item.header;
var gWidth = item.width;
if(!gWidth){
gWidth = "0px";
}
var gHidden = item.hidden;
if(!gHidden){
gHidden = "";
colCnt++;
} else {
gHidden = "hidden";
}
strThs += `<th
tabindex="0" rowspan="1" colspan="1" class="sorting"
style="width: ${gWidth};"
${gHidden}
>${gHeader}
</th>`;
strBodyTrs += `<td
onclick="${gridOptions.clickEvent}"
ondblclick="${gridOptions.dblClickEvent}"
${gHidden}
>{${item.name}}
</td>`;
//var gAlign = item.align; 정렬
});
strBodyTrs += `</tr>`;
tableBodyTemplate.found = strBodyTrs;
$("#"+gridOptions.theadTr).append(strThs);
var notFound = `<tr class="odd">
<td valign="top" colspan="${colCnt}" class="dataTables_empty text-center">${gridOptions.prefixName} 정보를 찾지 못했습니다.</td>
</tr>`;
tableBodyTemplate.notFound = notFound;
return tableBodyTemplate;
//$("#"+gridTheadTr).append();
//스크롤이벤트
// GRID.on('dblclick', function (props) { fnBiz.onDblClickGrid(props); }); 더블클릭
};

@ -1,626 +0,0 @@
const Grid = tui.Grid;
/**
* <pre>
* tui Grid 도구
* -참조사이트
* ->듀토리얼: https://github.com/nhn/tui.grid/tree/master/packages/toast-ui.grid/docs/ko
* ->예제: http://nhn.github.io/tui.grid/latest/tutorial-example01-basic
*
* grid server data : GRID.store.data.rawData
* 페이지 이동 : GRID.getPagination().movePageTo(2);
* --> move후에 dataset reset(reload) 위해 'successResponse' 이벤트에
* GRID.resetData(res.data?.contents) 호출
* GRID.getPagination().getCurrentPage()
* 페이지 이벤트 : afterMove, beforeMove
* @author 박민규
* @date 2020.05.25.
* </pre>
*/
const customTheme = {
selection: {
background: '#4daaf9',
border: '#004082'
},
scrollbar: {
background: '#f5f5f5',
thumb: '#d9d9d9',
active: '#c1c1c1'
},
row: {
even: {
background: '#f2f4ff'
},
hover: {
background: '#ccc'
}
},
cell: {
normal: {
background: '#fbfbfb',
border: '#e0e0e0',
showVerticalBorder: true
},
header: {
background: '#eee',
border: '#ccc',
showVerticalBorder: true
},
rowHeader: {
border: '#ccc',
showVerticalBorder: true
},
editable: {
background: '#fbfbfb'
},
selectedHeader: {
background: '#d8d8d8'
},
focused: {
border: '#418ed4'
},
disabled: {
text: '#b0b0b0'
}
}
}
class CustomRowNumberRenderer {
constructor(props) {
const el = document.createElement('span');
this.el = el;
this.el.innerHTML = this.getRowNum(props);
}
getRowNum(props) {
if(props.grid.paginationInfoRef == null){
return Number(props.formattedValue);
}
if(props.grid.paginationInfoRef.pagingType == null){
return Number(props.formattedValue);
}
if(props.grid.paginationInfoRef.pagingType == "scroll"){
return Number(props.formattedValue);
}
const currentPage = props.grid.paginationInfoRef.pageNum;
return Number(props.formattedValue) + (currentPage - 1) * props.grid.paginationInfoRef.fetchSize;
}
getElement() {
return this.el;
}
render(props) {
this.el.innerHTML = this.getRowNum(props);
}
}
const TuiGrid = {
instance: null,
defaultOptions: {
el: $('#grid'),
//[선택]DataSource 정보(readData|createData|updateData|modifyData|deleteData 등)
data: {
headers: {
AJAX: true
},
withCredentials: false,
initialRequest: false,
api: {
readData: {
contentType: 'application/json',
dataType: 'json',
method: 'get',
initParams: {}
}
, createData: {url: '', method: 'POST'}
, updateData: {url: '', method: 'PUT'}
, modifyData: {url: '', method: 'PUT'}
, deleteData: {url: '', method: 'DELETE'}
}
},
header: {}, //[선택]헤더정보(헤더 명칭 및 매핑 field)
columns: [], //[필수]컬럼정보(헤더 명칭 및 매핑 field)
rowHeaders: [], //[선택]ROW 헤더 타입(rowNum: 순번, checkbox: 체크박스)
bodyHeight: 467, //[선택]Grid 높이 (number(단위: px)|'auto'|'fitToParent')
minBodyHeight: 350, //[선택]Grid 최소 높이 (단위: px)
rowHeight: 30, //[선택]Grid row 높이 (number(단위: px)|'auto' )
minRowHeight: 25, //[선택]Grid row 최소 높이 (단위: px)
pageOptions: {
useClient: false,
page: 1,
perPage: 15
}, //[선택]한 페이지에 출력할 건수
columnOptions: { //[선택]고정 컬럼
//frozenCount: 0 //고정컬럼 갯수
frozenBorderWidth: 2 //고정컬럼 보더(border) 두께
, resizable: true
, minWidth: 100 //최소 사이즈
},
summary: [], //[선택]하단합계
treeColumnOptions: {}, //[선택]tree 구조 grid
},
of: function(options) {
this.instance = null;
// rowNum fix
if(options.scrollFuncName != null) {
options.rowHeaders.filter((r, idx) => {
if (r === 'rowNum') {
options.rowHeaders[idx] = {
type: 'rowNum',
renderer: {
type: CustomRowNumberRenderer
}
}
}
})
}
const newOptions = $.extend(true, {}, this.defaultOptions, options, {data: null});
newOptions.el = document.getElementById(options.el);
//this.elId = options.el;
// language
tui.Grid.setLanguage('ko');
// theme
tui.Grid.applyTheme('custom', eval(customTheme));
//Grid.applyTheme('custom', customTheme);
//Grid.applyTheme('striped');
this.instance = new tui.Grid(newOptions);
$(".tui-grid-pagination").attr("hidden","hidden");
if(options.scrollFuncName != null){
this.instance.on('scrollEnd', options.scrollFuncName);
}
return this.instance;
},
/** Excel Export */
exportExcel : function(_instance, fileName, rowHeader){
/* 필수값 설정 */
var _gridId = _instance.el.id;
var _frstColTyp = rowHeader;
var _arrHeader = [];
var _arrName = [];
var _mCustomRenderer = {};
/* =================
* 2021.04.30. 박민규
* 컬럼 취득 방법 변경
* AsIs: GridConfig 설정한 Columns 정보
* ToBe: instance 설정된 Columns 정보
================= */
//2021.04.30. 주석처리
// this.getOptColumns().forEach(function(opt, idx){
_instance.getColumns().forEach(function(opt, idx){
_arrHeader.push(opt.header);
_arrName.push(opt.name);
//2021.04.30. 주석처리
// if(!fnIsEmpty(opt.renderer)){
if(!(fnIsEmpty(opt.renderer)||'DefaultRenderer'==opt.renderer.type.name||fnIsEmpty(opt.renderer.type.name))){ //브라우저별 opt.renderer.type.name 값의 차이 => Chrome: "DefaultRenderer", IE: undefined
_mCustomRenderer[opt.name] = opt.renderer;
}
});
/* grid head Setting */
var elementTHEAD = document.createElement('table');
var $sltHeader = $('#'+_gridId+' .tui-grid-header-area > table.tui-grid-table').clone();
//head 처리(table 고정셀 이용 시)
if($sltHeader.length>1){
//좌측 table의 head Selector
var firstTableTh = $sltHeader.find('tr:last-child th');
//우측 table row의 헤드(th)를 좌측 table row에 병합
for(var i=1; i<$sltHeader.length; i++){
$sltHeader.eq(i).find('tr').each(function(idx, row){
var firstTableRow = $sltHeader.eq(0).find('tr:eq('+idx+')');
if(firstTableRow.length == 0){
//<tr> 신규생성
var tr = document.createElement('tr');
tr.innerHTML = row.innerHTML;
$sltHeader.eq(0).append(tr);
//firstTable <th>의 rowspan 변경
for(var j=0; j<firstTableTh.length; j++){
firstTableTh.eq(j).attr('rowspan', Number(firstTableTh.eq(j).attr('rowspan'))+1);
}
}
else{
firstTableRow.append(row.innerHTML);
}
});
}
}
elementTHEAD.innerHTML = $sltHeader.eq(0).find('tbody').html();
/* grid body Setting */
var elementTBODY = document.createElement('tbody');
_instance.getData().forEach(function(row, idxRow){
var elementTR = document.createElement('tr');
//타입별 <td> element 생성( 첫번째 컬럼타입 설정 시 )
if(!fnIsEmpty(_frstColTyp))
elementTR.appendChild(fnCreateTdByFrstCol(_frstColTyp, row));
//<td> element 생성
_arrName.forEach(function(columnName, idxColumn){
var columnVal = '';
var customRenderer = _mCustomRenderer[columnName];
if(fnIsEmpty(customRenderer)){
//column Value 설정
columnVal = fnNvl(row[columnName]);
}else{
//prop 객체 생성
var columnInfo = {};
columnInfo['renderer'] = customRenderer;
columnInfo['name'] = columnName;
var props = {};
props['columnInfo'] = columnInfo;
props['rowKey'] = row.rowKey;
props['grid'] = _instance;
//렌더러 호출
customRenderer.type(props);
//column Value 설정
columnVal = fnNvl(row[columnName]);
if(row.rowKey<15){
// console.log('[export]rowKey->'+row.rowKey+'/ column->'+columnName+' / value->'+row[columnName]);
// console.log(_instance.getRow(row.rowKey));
}
}
var elementTD = document.createElement('td');
elementTD.innerHTML = columnVal;
elementTR.appendChild(elementTD);
});
elementTBODY.appendChild(elementTR);
});
/* grid table Setting */
var elementTABLE = document.createElement('table');
elementTABLE.appendChild(elementTHEAD);
elementTABLE.appendChild(elementTBODY);
/* export Excel */
var fileUtil = new XitFileExportUtil(fileName, 'table', elementTABLE);
fileUtil.exportExcel();
/* member Function Declare */
//isEmpty Function
function fnIsEmpty(val){
if(val==undefined||val==null||val==''||val=={}||val==[])
return true;
return false;
}
//nvl Function
function fnNvl(val, replaceVal){
replaceVal = fnIsEmpty(replaceVal)?'':replaceVal;
val = fnIsEmpty(val)?replaceVal:val;
return val;
}
//<td> element 생성 Function
function fnCreateTdByFrstCol(colType, row){
var returnVal = '';
/* column 타입별 value 설정 */
switch (colType) {
case 'rowNum':
returnVal = row._attributes.rowNum;
break;
case 'checkbox':
if(row._attributes.checked)
returnVal = '☑';
else
returnVal = '□';
break;
default:
return returnVal;
break;
}
/* <td> element 생성 */
var elementFrstTD = document.createElement('td');
elementFrstTD.innerHTML = returnVal;
return elementFrstTD;
}
}
}
/**
* Button 렌더러
* -설명: Grid의 cell에 Button을 생성 한다.
* 버튼명칭에 format 사용이 가능하며 사용방법은 아래와 같다.
* ex) value: 'A is {0}. B is {1}. {0}!={1}',
* listColumns: ['컬럼1', '컬럼2']
* @param value 버튼에 출력 명칭
* @param listColumns format에 매칭할 컬럼 목록
* @param callbackFnc 버튼 클릭 호출 함수명
* @author 박민규
* @date 2020.05.28.
*/
var XitButtonRenderer = function(props){
// console.log('XitButtonRenderer Called!!-> '+props.columnInfo.name);
//options get
var opt = props.columnInfo.renderer.options;
var value = opt.value;
var callbackFnc = opt.callbackFnc;
var args = opt.listColumns;
//"value" Formatting
if(args != undefined){
var row = props.grid.getRow(props.rowKey);
for(var i=0; i<args.length; i++){
var regEx = new RegExp('\\{'+i+'\\}', 'gi');
value = value.replace(regEx, row[args[i]]);
}
}
//Element Setting
var el = document.createElement('input');
el.type = 'button';
el.value = value;
//EventListener Setting
el.addEventListener('click', function(){
var callback = callbackFnc+'(props)';
eval(callback);
});
//Element render
this.el = el;
// this.render(props);
if(props.rowKey<15){
// console.log('[Renderer]rowKey->'+props.rowKey+' column->'+props.columnInfo.name+' / el.value->'+el.value);
}
//DataSet Injection ( Dataset에 추가해야 "복사(ctrl+c)" 기능 사용 가능 )
props.grid.setValue(props.rowKey, props.columnInfo.name, el.value, false);
}
XitButtonRenderer.prototype.getElement = function(){
return this.el;
}
XitButtonRenderer.prototype.render = function(props){
this.el.value = props.value;
}
/**
* column 병합 렌더러
* -설명: 다수의 Column을 하나의 Column으로 병합하여 cell에 출력 한다.
* 필요 format 사용이 가능하며 사용방법은 아래와 같다. (포맷 사용 "구분자(separator)" 적용되지 않는다)
* [단순 컬럼 병합]
* ex) listColumns: ['컬럼1', '컬럼2'],
* separator: '/'
* [포맷사용 컬럼 병합]
* ex) listColumns: ['컬럼1', '컬럼2'],
* format: 'A is {0}. B is {1}. {0}!={1}'
* @param listColumns 병합할 컬럼 name 목록
* @param separator 컬럼 연결 구분자(default: 공백(' '))
* @param format 출력 포맷
* @author 박민규
* @date 2020.05.28.
*/
var XitColumnMergeRenderer = function(props){
// console.log('XitColumnMergeRenderer Called!!-> '+props.columnInfo.name);
//options get
var opt = props.columnInfo.renderer.options;
var args = opt.listColumns;
var separator = opt.separator;
if(fnIsEmpty(separator))
separator = ' ';
var value = opt.format;
//Columns merge
if(fnIsEmpty(value)){
var arrStr = [];
var row = props.grid.getRow(props.rowKey);
args.forEach(function(column){
arrStr.push(row[column]);
});
value = arrStr.join(separator);
}else{
var row = props.grid.getRow(props.rowKey);
for(var i=0; i<args.length; i++){
var regEx = new RegExp('\\{'+i+'\\}', 'gi');
value = value.replace(regEx, fnNvl(row[args[i]]));
}
}
function fnNvl(val){
if(val==undefined||val==null)
return '';
return val;
}
function fnIsEmpty(val){
if(val==undefined||val==null||val==''||val==[]||val=={})
return true;
return false;
}
//Element Setting
var el = document.createElement('div');
el.setAttribute('class', 'tui-grid-cell-content');
el.innerHTML = value;
//Element render
this.el = el;
// this.render(props);
if(props.rowKey<15){
// console.log('[Renderer]rowKey->'+props.rowKey+' column->'+props.columnInfo.name+' / el.value->'+el.innerHTML);
}
//DataSet Injection ( Dataset에 추가해야 "복사(ctrl+c)" 기능 사용 가능 )
props.grid.setValue(props.rowKey, props.columnInfo.name, el.innerHTML, false);
}
XitColumnMergeRenderer.prototype.getElement = function(){
return this.el;
}
XitColumnMergeRenderer.prototype.render = function(props){
this.el.value = props.value;
}
/**
* Button 렌더러
* @author 최유수
* @date 2020.07.15.
* formatter : 안에 입력될 문자열.
,eventType : 셀에 이벤트.
,eventFunction : 이벤트에 부여될 함수.
element 속성
element : 생성 엘리먼트 속성
type : 생성 엘리먼트의 타입
value : 들어갈 텍스트
*/
/**
* 요구사항
* 속성을 부여할때
*
* 1.셀에 개발자가 원하는 Element를 생성 있음
* 2.1 속성에 개발자가 원하는 이벤트를 부여 있음
* 3. 2 이벤트에 개발자가 원하는 함수를 부여 있음
* 4. 개발자가 원하는만큼 유형을 추가 있음.(유형이 여러개일수도 아닐수도 있음)
*/
var CustomButtonRenderer = function(props){
//options get
var opt = props.columnInfo.renderer.options;
//formatter를 구성할 인자값(해당 인자값은 함수형일때 배열일 수 있음.)
var formatter = opt.formatter;
//이벤트로 사용할 함수
var eventFunction = opt.eventFunction;
//이벤트 속성
var eventType = opt.eventType;
//객체 유형
var element = opt.element;
//객체의 type 속성
var type = opt.type;
var formattObject = formatter;
if(typeof formatter =="function"){
//formatter가 함수에 의해 구현이됨, Return값은 Arr<Object>, Objcect임;
//Object는 formatter : Text 와 Element로 구성됨.
formattObject = formatter(props);
}else{
//formatter가 단순 텍스트임.
formattObject = opt;
}
var ele = cellMaker(formattObject , eventFunction , eventType , element , type , props);
this.el = ele;
}
CustomButtonRenderer.prototype.getElement = function(){
return this.el;
}
//셀을 만듦.
var cellMaker = function(formattObject , eventFunction , eventType , element , type , props){
var spanEle = document.createElement("span");
var ele;
//셀에 1개 이상의 데이터가 들어가는 경우
if(formattObject instanceof Array && formattObject.length != 0){
formattObject.forEach(function(elementObject , index , arrays){
elementObject["eventFunction"] = eventFunction;
elementObject["eventType"] = eventType;
ele = elMaker(elementObject , props);
$(spanEle).append(ele);
//객체가 다수이면 띄어쓰기 함
if(index < formattObject.length -1){
$(spanEle).append(document.createTextNode('\u00a0 // \u00a0'));
}
});
}
//셀에 데이터가 1개이지만 함수로 Obj를 가져와서 만듦
if(formattObject instanceof Object){
formattObject["eventFunction"] = eventFunction;
formattObject["eventType"] = eventType;
ele = elMaker(formattObject , props);
spanEle.appendChild(ele);
}
return spanEle;
}
var elMaker = function(elementObject, props){
var text = elementObject.formatter
var eventType = elementObject.eventType
var element = elementObject.element
var eventFunction = elementObject.eventFunction
var type = elementObject.type
var datasetAttrs = elementObject.dataAttrs
var attrs = elementObject.attrs
var ele;
if(element == "text"){
ele = document.createElement("p");
ele.style.whiteSpace = 'nowrap';
ele.style.display = 'inline-block';
ele.style.fontSize = '11px';
ele.style.fontFamily = 'Nanum Barun Gothic';
ele.appendChild(document.createTextNode(text));
}else{
ele = document.createElement(element);
ele.type = type;
ele.value = text;
}
//요소에 기타 어트리뷰트 부여
if(attrs){
let keys = Object.keys(attrs);
for(let i= 0; i < keys.length; i++){
ele.setAttribute(keys[i], attrs[keys[i]]);
}
}
//요소에 데이터셋 어트리뷰트 부여
if(datasetAttrs){
let bootstrapTooltipYn = false;
let keys = Object.keys(datasetAttrs);
for(let i= 0; i < keys.length; i++){
ele.setAttribute("data-"+toKebabCase(keys[i]), datasetAttrs[keys[i]]);
if(("data-"+toKebabCase(keys[i])) == "data-bs-toggle"){
if(datasetAttrs[keys[i]] == "tooltip"){
bootstrapTooltipYn = true;
}
}
}
if(bootstrapTooltipYn){
new bootstrap.Tooltip(ele);
}
}
//이벤트가 함수이면 이벤트 부여함.
if(typeof eventFunction =="function"){
ele.addEventListener(eventType, function(event){eventFunction(props, event)});
}
return ele;
}
function toKebabCase(str) {
return str.replace(/([a-z])([A-Z])/g, "$1-$2").toLowerCase();
}
Loading…
Cancel
Save