| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595 |
- $(function ()
- {
- var tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]'));
- var tooltipList = tooltipTriggerList.map(function (tooltipTriggerEl) {
- return new bootstrap.Tooltip(tooltipTriggerEl)
- });
- var popoverTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="popover"]'));
- var popoverList = popoverTriggerList.map(function (popoverTriggerEl) {
- return new bootstrap.Popover(popoverTriggerEl)
- });
- $(".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) {
- var 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;
- });
- // 이미지 없으면 기본값으로
- var images = document.getElementsByTagName("img");
- if (images.length > 0) {
- for (var i = 0; i < images.length; i++) {
- images[i].onerror = function imgError(Ee) {
- e.srcElement.src = BASE_URL + "/images/no_image.png";
- e.srcElement.style.width = "60px";
- e.srcElement.style.height = "60px";
- };
- }
- }
- });
- $.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) {
- var 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) {
- var field = $(value.element);
- if (field.is(':hidden')) {
- field = field.parent();
- }
- field.tooltip('dispose').tooltip({
- placement: 'bottom',
- title: value.message,
- trigger: 'manual'
- }).tooltip('show');
- });
- }
- });
- // 목록 버튼상자
- function formSubmit(f, actType, actPage, actDesc)
- {
- if ($("input:checkbox.list-check-box:checked", f).length < 1) {
- alert('자료를 하나 이상 선택하세요.');
- return false;
- }
- // if (actType === 'update' && !confirm('선택한 자료를 정말 수정 하시겠습니까?')) return false;
- // if (actType === 'save' && !confirm('선택한 자료를 정말 저장 하시겠습니까?')) return false;
- // if (actType === 'delete' && !confirm('선택한 자료를 정말 삭제 하시겠습니까?')) return false;
- // if (actType === 'recover' && !confirm('선택한 자료를 정말 복원 하시겠습니까?')) return false;
- // if (actType === 'trash' && !confirm('선택한 자료를 정말 휴지통으로 이동하시겠습니까?')) return false;
- var msg;
- var 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 moveTopDocument()
- {
- $('body').scrollTop(0);
- }
- // 모든 라디오, 체크박스 선택/해제
- function allCheckThis(obj){
- var that = obj || null;
- if(that){
- if(that.name){
- var checkBoxs = document.getElementsByName(that.name + '[]');
- checkBoxs.forEach(function(item, index){
- if(item.checked){
- item.checked = false;
- }else{
- item.checked = true;
- }
- });
- }else{ // name이 설정되지 않으면 근처 input 검색하여 처리
- var checkBoxs = $(that).parent().parent().find('input');
- checkBoxs.each(function(e){
- 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() {
- var strWidth;
- var 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 {
- var strDocumentWidth = $(document).outerWidth();
- var strDocumentHeight = $(document).outerHeight();
- window.resizeTo ( strDocumentWidth, strDocumentHeight );
- var strMenuWidth = strDocumentWidth - $(window).width();
- var 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;
- }
- var modalPopup = $(element);
- modalPopup.load(url, function(response, status, xhr){
- var 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 showAjaxCards(obj)
- {
- var baseUrl = obj.id;
- $.ajax({
- url: baseUrl,
- data: {csrf_hash_name : usCsrfHash, baseUrl : "baseUrl=" + baseUrl},
- type: 'POST',
- async: false,
- success: function (html) {
- if(obj.dataset.target){
- $(obj.dataset.target).html(html);
- }
- }
- });
- }
- // 검색기간 지정
- function setDateRange(type, so, eo)
- {
- var w = '';
- var m = '';
- var y = '';
- var d = new Date();
- var c = new Date(new Date(new Date().toLocaleDateString()).getTime()+24*60*60*1000-1);
- var 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;
- }
- var 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);
- var i = 0;
- var cnt = 0;
- var exceed = 0;
- var ch = '';
- var 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초과된 부분은 자동으로 삭제됩니다.');
- var tcnt = 0;
- var xcnt = 0;
- var 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(){
- var $checkedCheckboxes = $('.list-check-box:checked');
- var $btnListUpdate = $('.btn-list-update');
- var $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) {
- var chk = document.getElementsByClassName('list-check-box');
- for (var 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('click', '.view-full-image', function() {
- childWin[childWin.length] = window.open( BASE_URL + '/helpTool/viewImage?imgUrl=' + encodeURIComponent($(this).attr('data-origin-image-url')), 'large_image', 'location=yes,links=no,toolbar=no,top=10,left=10,width=10,height=10,resizable=yes,scrollbars=no,status=no');
- return false;
- });
- // 부트스트랩 모달 열기
- $(document).on("change click", ".modal-popup", function(e)
- {
- if(typeof (this.dataset.href) != undefined && this.dataset.href != '')
- {
- var index = $('.modal-popup').index(this);
- var 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){
- var obj = document.getElementsByName(e.target.name);
- for(var 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) {
- var self = this.api();
- var filter_input = $('#' + settings.nTable.id + '_filter input').unbind();
- var search_button = $('<button type="button" class="btn btn-link btn-sm btn-icon ms-2 mb-1" data-bs-toggle="tooltip" title="Search"><i class="fa fa-fw fa-search"></i></button>').click(function () {
- self.search(filter_input.val()).draw();
- });
- var reset_button = $('<button type="button" class="btn btn-link btn-sm btn-icon mb-1" data-bs-toggle="tooltip" title="Reset"><i class="fa fa-fw fa-undo"></i></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){
- var target = e.target.dataset.target;
- var content = $("#" + target);
- if(this.checked){
- content.show();
- }else{
- content.hide();
- }
- });
|