| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247 |
- // Please see documentation at https://learn.microsoft.com/aspnet/core/client-side/bundling-and-minification
- // for details on configuring this project to bundle and minify static web assets.
- // Write your JavaScript code.
- $(function () {
- // 사이드 바 토글 유지
- let isHidden = aside.isHidden();
- if (isHidden) {
- aside.hideAside();
- } else {
- aside.showAside();
- }
- // 사이드바 스크롤 위치 복원
- const savedAsideScroll = sessionStorage.getItem("aside-scroll");
- if (savedAsideScroll) {
- document.getElementById("aside").scrollTop = parseInt(savedAsideScroll);
- }
- // 메인 콘텐츠 스크롤 위치 복원
- const savedMainScroll = sessionStorage.getItem("main-scroll");
- if (savedMainScroll) {
- document.getElementById("main").scrollTop = parseInt(savedMainScroll);
- }
- });
- // 페이지 이동 전 스크롤 위치 저장
- window.addEventListener("beforeunload", function () {
- sessionStorage.setItem("aside-scroll", document.getElementById("aside").scrollTop);
- sessionStorage.setItem("main-scroll", document.getElementById("main").scrollTop);
- });
- // 좌측 메뉴 처리
- class Aside {
- constructor() {
- this.body = document.body;
- this.aside = document.getElementById("aside");
- this.btnAsideToggle = document.getElementById("btnAsideToggle");
- }
- // 사이드 바 토글 시
- toggleAside(e) {
- let isHidden = this.isHidden();
- if (isHidden) {
- aside.showAside();
- } else {
- aside.hideAside();
- }
- setCookie("hidden-aside", isHidden ? "visible" : "hidden", 7);
- }
- // 사이드 바 토글 시 아이콘 변경
- toggleAsideIcon (isHidden) {
- let icon = this.btnAsideToggle.querySelector("i");
- if (isHidden) {
- icon.classList.remove("bi-arrow-left");
- icon.classList.add("bi-arrow-right");
- } else {
- icon.classList.remove("bi-arrow-right");
- icon.classList.add("bi-arrow-left");
- }
- };
- // 숨김 여부 확인
- isHidden() {
- let isHidden = getCookie("hidden-aside") ;
- if (isHidden == "") {
- isHidden = this.body.classList.contains("hidden-aside");
- }
- return (isHidden === "hidden");
- }
- // 보이기
- showAside() {
- this.body.classList.remove("hidden-aside");
- this.toggleAsideIcon(0);
- setCookie("hidden-aside", "visible", 7);
- }
- // 숨기기
- hideAside() {
- this.body.classList.add("hidden-aside");
- this.toggleAsideIcon(1);
- setCookie("hidden-aside", "hidden", 7);
- }
- }
- const aside = new Aside();
- document.getElementById("btnAsideToggle").addEventListener("click", (e) => aside.toggleAside(e));
- // 화면이 작아지면
- window.addEventListener("resize", function () {
- if (window.innerWidth > 768) {
- aside.showAside(0);
- } else {
- aside.hideAside(1);
- }
- });
- // 메뉴 토글 유지
- document.querySelectorAll(".collapse").forEach(e => {
- const collapseID = e.id;
- const collapseState = getCookie(collapseID);
- const instance = bootstrap.Collapse.getOrCreateInstance(e, {
- toggle: false
- });
- if (collapseState === "open") {
- instance.show();
- } else {
- instance.hide();
- }
- e.addEventListener("show.bs.collapse", () => {
- setCookie(collapseID, "open", 7);
- });
- e.addEventListener("hide.bs.collapse", () => {
- setCookie(collapseID, "closed", 7);
- });
- });
- // 드롭박스 적용
- const dropdownList = [...document.querySelectorAll('.dropdown-toggle')].map(e => new bootstrap.Dropdown(e));
- function GetCheckedBoxIDs() {
- return Array.from(document.querySelectorAll('input[type="checkbox"].list-check-box:checked')).map(c => c.value);
- }
- // 목록 버튼상자
- class ActionButtons {
- constructor() {
- this.form = document.getElementById("fAdminList");
- }
- validate() {
- let checked = $("input:checkbox.list-check-box:checked");
- if (checked.length < 1) {
- alert("항목을 하나 이상 선택하세요.");
- return false;
- }
- return true;
- }
- checkout(e, action)
- {
- let handler = "";
- switch (action) {
- case "Restore":
- handler = "?handler=Restore";
- break;
- case "Delete":
- handler = "?handler=Delete";
- break;
- case "Update":
- handler = "?handler=Update";
- break;
- }
- if (handler) {
- this.form.action = handler;
- }
- this.form.submit();
- }
- Update(e) {
- if (!this.validate()) {
- return false;
- }
- if (confirm("선택한 항목을 정말 수정 하시겠습니까?")) {
- this.checkout(e, "Update");
- }
- }
- Delete(e) {
- let ids = GetCheckedBoxIDs();
- if (ids.length > 1) {
- if (confirm(`${ids.length}건의 항목을 정말 삭제 하시겠습니까?`)) {
- if (!this.validate()) {
- return false;
- }
- }
- } else {
- if (!confirm("선택한 항목을 정말 삭제 하시겠습니까?")) {
- return false;
- }
- let id = e.target.dataset.id;
- if (id) {
- this.form.elements[`ids_${id}`].checked = true;
- }
- }
- setTimeout(() => this.checkout(e, "Delete"), 100);
- }
- Restore(e) {
- if (!this.validate()) {
- return false;
- }
- if (confirm("선택한 항목을 정말 복원 하시겠습니까?")) {
- this.checkout(e, "Restore");
- }
- }
- checkedAll(e) {
- let chk = document.getElementsByClassName("list-check-box");
- for (let i = 0; i < chk.length; i++) {
- let targetFormName = (e.target.getAttribute("form") || e.target.form.id);
- let chkFormName = (chk[i].getAttribute("form") || chk[i].form.id);
- if (targetFormName == chkFormName) {
- chk[i].checked = e.target.checked;
- }
- }
- this.toggleDisabled();
- }
- toggleDisabled() {
- let checked = $("input:checkbox.list-check-box:checked");
- if (checked.length > 0) {
- $('button[form="fAdminList"]').prop("disabled", false);
- } else {
- $('button[form="fAdminList"]').prop("disabled", true);
- }
- }
- }
- const actionButtons = new ActionButtons();
- $(document).on("click", "#btnListUpdate", (e) => actionButtons.Update(e));
- $(document).on("click", "#btnListDelete", (e) => actionButtons.Delete(e));
- $(document).on("click", "#btnListRestore", (e) => actionButtons.Restore(e));
- $(document).on("click", "#btnListExecute", (e) => actionButtons.Execute(e));
- $(document).on("click", ".btn-row-delete", (e) => actionButtons.Delete(e));
- $(document).on("click", "#checkedAll", (e) => actionButtons.checkedAll(e));
- $(document).on("change", "input.list-check-box", actionButtons.toggleDisabled);
|