$(function ()
{
/*$('.datepicker').datetimepicker({
dayViewHeaderFormat: 'YYYY MMMM',
format: 'YYYY-MM-DD',
useCurrent: false,
ignoreReadonly: true,
// defaultDate: new Date(),
allowInputToggle: true
});*/
$(".date-picker").datepicker({
dayViewHeaderFormat: 'YYYY MMMM',
format: 'YYYY-MM-DD',
useCurrent: false,
dateFormat: 'yy-mm-dd', // 날짜 포맷이다. 보통 yy-mm-dd 를 많이 사용하는것 같다.
prevText: '이전 달', // 마우스 오버시 이전달 텍스트
nextText: '다음 달', // 마우스 오버시 다음달 텍스트
closeText: '닫기', // 닫기 버튼 텍스트 변경
currentText: '오늘', // 오늘 텍스트 변경
monthNames: ['1월', '2월', '3월', '4월', '5월', '6월', '7월', '8월', '9월', '10월', '11월', '12월'], //한글 캘린더중 월 표시를 위한 부분
monthNamesShort: ['1월', '2월', '3월', '4월', '5월', '6월', '7월', '8월', '9월', '10월', '11월', '12월'], //한글 캘린더 중 월 표시를 위한 부분
dayNames: ['일', '월', '화', '수', '목', '금', '토'], //한글 캘린더 요일 표시 부분
dayNamesShort: ['일', '월', '화', '수', '목', '금', '토'], //한글 요일 표시 부분
dayNamesMin: ['일', '월', '화', '수', '목', '금', '토'], // 한글 요일 표시 부분
showMonthAfterYear: true, // true : 년 월 false : 월 년 순으로 보여줌
yearSuffix: '년', //
showButtonPanel: true, // 오늘로 가는 버튼과 달력 닫기 버튼 보기 옵션
// showOn: "button", // 이미지로 사용 , both : 엘리먼트와 이미지 동시사용
// buttonImage: "/admin/common/images/btn_cal.gif", // 이미지 주소
// buttonImageOnly: true // 이미지만 보이기
onClose: function(value) {
let date = getOnlyDigit(value);
if(date) {
this.value = moment(date, "YYYY-MM-DD").format("YYYY-MM-DD");
}else{
this.value = "";
}
}
});
// 로그아웃
$(document).on("click", "#logout", function() {
$("#logoutForm").submit();
});
var isSubmit = 0;
var $fAdminWrite = $('#fAdminWrite');
var $formOrigin = $fAdminWrite.serialize().trim();
$(window).on('beforeunload', function() {
if ($('#fAdminWrite').serialize().trim() !== $formOrigin && !isSubmit) {
return '저장하지 않은 정보가 있습니다. 저장하지 않은 상태로 이동하시겠습니까 ?';
}
});
$fAdminWrite.submit(function(){
isSubmit = 1;
});
// 이미지 없으면 기본값으로
function imgError() {
event.srcElement.src = BASE_URL + "/images/default/no_image.png";
event.srcElement.style.width = "60";
event.srcElement.style.height = "60";
}
let allImage = document.getElementsByTagName("img");
if (allImage.length > 0) {
for (let i = 0; i < allImage.length; i++) {
allImage[i].onerror = imgError;
}
}
if(typeof select2 != "undefined" && document.querySelectorAll(".select2").length > 0) {
$('.select2').select2();
}
});
$.validator.setDefaults({ // Bootstrap Required.
ignore: [], // hidden
debug: false,
invalidHandler: function (event, validator) {
return onlyInputUnComma(event.currentTarget);
},
submitHandler: function (form) {
return onlyInputUnComma(form);
},
showErrors: function (errorMap, errorList) {
$.each(this.successList, function (index, value) {
let field = $(value);
if (field.is(':hidden')) {
field = field.parent();
}
if (typeof field.tooltip !== "undefined") { // 3.3.7은 destroy 4.0 이후 dispose
field.tooltip('dispose');
}
});
if (errorList.length <= 0) {
$(".tooltip").tooltip("dispose");
}
$.each(errorList, function (index, value) {
let field = $(value.element);
if (field.is(':hidden')) {
field = field.parent();
}
field.tooltip('dispose').tooltip({
placement: 'bottom',
title: value.message,
trigger: 'manual'
}).tooltip('show');
});
}
});
let tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]'));
let tooltipList = tooltipTriggerList.map(function (tooltipTriggerEl) {
return new bootstrap.Tooltip(tooltipTriggerEl)
});
let popoverTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="popover"]'));
let popoverList = popoverTriggerList.map(function (popoverTriggerEl) {
return new bootstrap.Popover(popoverTriggerEl)
});
// 목록 버튼상자
function formSubmit(f, actType, actPage, actDesc)
{
if ($("input:checkbox.list-check-box:checked", f).length < 1) {
alert('자료를 하나 이상 선택하세요.');
return false;
}
let msg;
let input = document.createElement('input');
input.setAttribute('type', 'hidden');
input.setAttribute('name', '_method');
switch(actType) {
case 'update' :
msg = '선택한 자료를 정말 수정 하시겠습니까?';
input.setAttribute('value', 'PUT');
break;
case 'save' :
msg = '선택한 자료를 정말 저장 하시겠습니까?';
break;
case 'delete' :
msg = '선택한 자료를 정말 삭제 하시겠습니까?';
input.setAttribute('value', 'DELETE');
break;
case 'recover' :
msg = '선택한 자료를 정말 복원 하시겠습니까?';
break;
case 'trash' :
msg = '선택한 자료를 정말 휴지통으로 이동하시겠습니까?';
break;
case 'action' :
msg = '선택한 자료를 정말 ' + actDesc + ' 처리 하시겠습니까?';
break;
}
if(!confirm(msg)) {
return false;
}
f.appendChild(input);
f.action = actPage;
f.submit();
}
// 선택삭제
function deleteCheck()
{
if (confirm('정말 삭제하시겠습니까? 삭제하신 후에는 복구가 불가능합니다.')) {
return true;
} else {
return false;
}
}
// 모든 라디오, 체크박스 선택/해제
function allCheckThis(obj) {
let that = (obj || null);
if (that) {
if (that.name) {
let checkBoxs = document.getElementsByName(that.name + '[]');
checkBoxs.forEach(function (item, index) {
if (item.checked) {
item.checked = false;
} else {
item.checked = true;
}
});
} else { // name이 설정되지 않으면 근처 input 검색하여 처리
let checkBoxs = $(that).parent().parent().find('input');
checkBoxs.each(function () {
if (this.value != '') {
if (this.checked) {
this.checked = false;
} else {
this.checked = true;
}
}
});
}
}
}
// 팝업창 생성
// http://naiyumie.tistory.com/entry/windowopen-windowshowModalDialog-%EC%98%B5%EC%85%98-%EC%9C%88%EB%8F%84%EC%9A%B0-%EC%98%A4%ED%94%88 사용법 참조
function ShowModalWindow(url, winName, width, height, reload) {
var reload = (reload || true);
/*
var ua = window.navigator.userAgent;
if(ua.indexOf('MSIE') > 0 || ua.indexOf('Trident') > 0){
aWindow = window.showModalDialog(url, self, 'dialogWidth='+width+'px;dialogHeight='+height+'px;scroll:yes;');
if(!reload){
if(typeof aWindow != "undefined" && aWindow) {
document.location.reload();
}
}
}else{
aWindow = window.open(url, winName, 'menubar=no,status=no,toolbar=no,resizable=no,width='+width+',height='+height+',titlebar=no,scrollbars=no,alwaysRaised=yes,directories=no');
}
*/
var aWindow = window.open(url, winName, 'menubar=no,status=no,toolbar=no,resizable=no,width=' + width + ',height=' + height + ',titlebar=no,scrollbars=no,alwaysRaised=yes,directories=no');
function bodyLoaded() {
if ((aWindow && aWindow.document && aWindow.document.body)) { // Loaded
aWindow.focus();
} else if (aWindow && !aWindow.closed) { // looks like we have a pop up blocker
aWindow.location.reload(true);
aWindow.focus();
} else {
window.setTimeout(function () {
bodyLoaded();
}, 100);
}
}
bodyLoaded();
return aWindow;
}
// 팝업 크기 자동조절
function popupAutoResize() {
let strWidth;
let strHeight;
// innerWidth / innerHeight / outerWidth / outerHeight 지원 브라우저
if (window.innerWidth && window.innerHeight && window.outerWidth && window.outerHeight) {
strWidth = parseInt(document.body.children[1].scrollWidth) + (window.outerWidth - window.innerWidth);
strHeight = parseInt(document.body.children[1].scrollHeight) + (window.outerHeight - window.innerHeight);
} else {
let strDocumentWidth = $(document).outerWidth();
let strDocumentHeight = $(document).outerHeight();
window.resizeTo(strDocumentWidth, strDocumentHeight);
let strMenuWidth = strDocumentWidth - $(window).width();
let strMenuHeight = strDocumentHeight - $(window).height();
strWidth = parseInt(document.body.children[1].scrollWidth) + strMenuWidth;
strHeight = parseInt(document.body.children[1].scrollHeight) + strMenuHeight;
}
window.resizeTo(strWidth, strHeight);
}
// 모달 열기
function initializeModal(element, url) {
if (typeof (element) == undefined || typeof (url) == undefined) {
return false;
}
let modalPopup = $(element);
modalPopup.load(url, function (response, status, xhr) {
let msg = null;
switch (status) {
case 'error' :
msg = '페이지를 호출 할 수 없습니다.';
break;
case 'timeout' :
msg = '호출 시간이 초과 되었습니다.';
break;
case 'notmodified' :
msg = 'NOT MODIFIED';
break;
case 'parsererror' :
msg = 'PARSE ERROR';
break;
case 'success' :
modalPopup.modal('show');
break;
}
if (msg) {
alert(msg);
return false;
}
});
}
// 검색기간 지정
function setDateRange(type, so, eo)
{
let w = '';
let m = '';
let y = '';
let d = new Date();
let c = new Date(new Date(new Date().toLocaleDateString()).getTime()+24*60*60*1000-1);
let endDate = $.datepicker.formatDate('yy-mm-dd', d);
$((typeof eo !== "undefined" ? eo : '.s-end-date')).val(endDate);
switch(type) {
case '1d' :
d.setDate(d.getDate() - 1);
break;
case '7d' :
w = d.getDate();
d.setDate(w - 7);
break;
case '15d' :
w = d.getDate();
d.setDate(w - 15);
break;
case '1m' :
m = d.getMonth();
d.setMonth(m - 1);
break;
case '2m' :
m = d.getMonth();
d.setMonth(m - 2);
break;
case '3m' :
m = d.getMonth();
d.setMonth(m - 3);
break;
case '6m' :
m = d.getMonth();
d.setMonth(m - 6);
break;
default :
// y = d.getFullYear();
// d.setFullYear(y - 1);
break;
}
let startDate = d.toISOString().split('T')[0];
$((typeof so !== "undefined" ? so : '.s-start-date')).val(startDate);
}
function byteCheck(txt, byte) {
txt = document.getElementById(txt);
byte = document.getElementById(byte);
let i = 0;
let cnt = 0;
let exceed = 0;
let ch = '';
let maxByte = 2000;
for (i = 0; i < txt.value.length; i++) {
ch = txt.value.charAt(i);
if (escape(ch).length > 4) {
cnt += 2;
} else {
cnt += 1;
}
}
byte.innerHTML = cnt;
if (cnt > maxByte) {
exceed = cnt - maxByte;
alert('메시지 내용은 80바이트를 넘을수 없습니다.\n\n작성하신 메세지 내용은 ' + exceed + 'byte 가 초과되었습니다.\n\n초과된 부분은 자동으로 삭제됩니다.');
let tcnt = 0;
let xcnt = 0;
let tmp = txt.value;
for (i = 0; i < tmp.length; i++) {
ch = tmp.charAt(i);
if (escape(ch).length > 4) {
tcnt += 2;
} else {
tcnt += 1;
}
if (tcnt > 80) {
tmp = tmp.substring(0, i);
break;
} else {
xcnt = tcnt;
}
}
txt.value = tmp;
byte.innerHTML = xcnt;
return true;
}
}
$(document).on('click', '.btn-list-update', function () { // 선택수정
formSubmit(document.f_admin_list, 'update', this.dataset.listUpdateUrl);
});
$(document).on('click', '.btn-list-save', function () { // 선택저장
formSubmit(document.f_admin_list, 'save', this.dataset.listSaveUrl);
});
$(document).on('click', '.btn-list-delete', function () { // 선택삭제
formSubmit(document.f_admin_list, 'delete', this.dataset.listDeleteUrl);
});
$(document).on('click', '.btn-list-trash', function () { // 전체삭제
formSubmit(document.f_admin_list, 'trash', this.dataset.listTrashUrl);
});
$(document).on('click', '.btn-list-recover', function () { // 전체복구
formSubmit(document.f_admin_list, 'recover', this.dataset.listRecoverUrl);
});
$(document).on('click', '.btn-list-action', function () { // 전체복구
formSubmit(document.f_admin_list, 'action', this.dataset.listActionUrl, this.dataset.desc);
});
$(document).on('click', '.btn-write-cancel', function () { // 취소하기
location.href = this.value;
});
$(document).on('click', '.btn-popup-cancel', function () { // 팝업 닫기
window.close();
});
$(document).on('click', '.btn-one-delete', function () {
if (confirm("한번 삭제한 자료는 복구할 방법이 없습니다.\n\n정말 삭제하시겠습니까?")) {
document.location.href = $(this).attr('data-one-delete-url');
return true;
} else {
return false;
}
});
$(document).on('click', '.btn-list-truncate', function () {
if (confirm("휴지통 전체를 비웁니다.\n\n비운 자료는 절대 복구가 불가능합니다. \n\n그래도 진행하시겠습니까?")) {
document.location.href = $(this).attr('data-list-truncate-url');
return true;
} else {
return false;
}
});
$(document).on('click', '.btn-one-recover', function () {
if (confirm('선택한 자료를 정말 복원하시겠습니까?')) {
document.location.href = $(this).attr('data-one-recover-url');
return true;
} else {
return false;
}
});
$(document).on('click', '.btn-one-trash', function () {
if (confirm('선택한 자료를 정말 휴지통으로 이동하시겠습니까?')) {
document.location.href = $(this).attr('data-one-trash-url');
return true;
} else {
return false;
}
});
// 목록에 행 선택시 선택관련 버튼 활성화
$(document).on('click', '.list-check-box, #chkAll', function (e) {
setTimeout(function () {
let $checkedCheckboxes = $('.list-check-box:checked');
let $btnListUpdate = $('.btn-list-update');
let $btnListSelected = $('.btn-list-selected');
if ($checkedCheckboxes.length > 0) {
$btnListUpdate.removeClass('disabled');
$btnListSelected.removeClass('disabled');
} else {
$btnListUpdate.addClass('disabled');
$btnListSelected.addClass('disabled');
}
}, 300);
});
// 목록 전체선택
$(document).on('click', '#chkAll', function (e) {
let chk = document.getElementsByClassName('list-check-box');
for (let i = 0; i < chk.length; i++) {
if (e.target.getAttribute('form') == chk[i].getAttribute('form')) {
chk[i].checked = this.checked;
}
}
if (this.checked) {
$('[data-action]').prop('disabled', false);
} else {
$('[data-action]').prop('disabled', true);
}
});
// 부트스트랩 모달 열기
$(document).on("change click", ".modal-popup", function (e) {
if (typeof (this.dataset.href) != undefined && this.dataset.href != '') {
let index = $('.modal-popup').index(this);
let href = this.dataset.href;
if (params('index', href) != 1) {
if (href.indexOf('?') != -1) {
// this.dataset.href = href + '&index=' + index;
} else {
this.dataset.href = href + '/?index=' + index;
}
}
initializeModal('#modal-popup', this.dataset.href);
}
});
// 체크박스 하나만 선택하기
$(document).on('change', '.only-one-checked', function (e) {
if (this.checked) {
let obj = document.getElementsByName(e.target.name);
for (let i = 0; i < obj.length; i++) {
if (obj[i].value != e.target.value) {
obj[i].checked = false;
}
}
}
});
// 데이터 테이블
if ($.isFunction($.fn.dataTable)) {
$.extend(true, $.fn.dataTable.defaults, {
columnDefs: [
{
targets: 'actions',
className: 'actions',
searchable: false,
sortable: false
}
],
lengthMenu: [5, 10, 25, 50, 100, 250, 500],
pageLength: 25,
language: {
search: '',
searchPlaceholder: 'Search'
},
processing: true,
stateSave: true,
stateDuration: 0,
responsive: true,
stateSaveParams: function (settings, data) {
data.search.search = "";
data.start = 0;
},
stateSaveCallback: function (settings, data) {
localStorage.setItem($(this).attr('id'), JSON.stringify(data));
},
stateLoadCallback: function () {
return JSON.parse(localStorage.getItem($(this).attr('id')));
},
initComplete: function (settings, json) {
let self = this.api();
let filter_input = $('#' + settings.nTable.id + '_filter input').unbind();
let search_button = $('').click(function () {
self.search(filter_input.val()).draw();
});
let reset_button = $('').click(function () {
filter_input.val('');
search_button.click();
});
$(document).keypress(function (event) {
if (event.which === 13) {
search_button.click();
}
});
$('#' + settings.nTable.id + '_filter').append(search_button, reset_button);
}
});
}
// 체크박스 클릭 시 해당 컨텐츠 내용을 숨김/표시 처리
$(document).on("change", ".content-collapse", function (e) {
let target = e.target.dataset.target;
let content = $("#" + target);
if (this.checked) {
content.show();
} else {
content.hide();
}
});
// 맨 위로
$(document).on("click", "#btnScrollTop", function() {
$("#main").scrollTop(0);
});