site.js 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. // Please see documentation at https://learn.microsoft.com/aspnet/core/client-side/bundling-and-minification
  2. // for details on configuring this project to bundle and minify static web assets.
  3. // Write your JavaScript code.
  4. $(function () {
  5. // 사이드 바 토글 유지
  6. let isHidden = aside.isHidden();
  7. if (isHidden) {
  8. aside.hideAside();
  9. } else {
  10. aside.showAside();
  11. }
  12. });
  13. // 좌측 메뉴 처리
  14. class Aside {
  15. constructor() {
  16. this.body = document.body;
  17. this.aside = document.getElementById("aside");
  18. this.btnAsideToggle = document.getElementById("btnAsideToggle");
  19. }
  20. // 사이드 바 토글 시
  21. toggleAside(e) {
  22. let isHidden = this.isHidden();
  23. if (isHidden) {
  24. aside.showAside();
  25. } else {
  26. aside.hideAside();
  27. }
  28. setCookie("hidden-aside", isHidden ? "visible" : "hidden", 7);
  29. }
  30. // 사이드 바 토글 시 아이콘 변경
  31. toggleAsideIcon (isHidden) {
  32. let icon = this.btnAsideToggle.querySelector("i");
  33. if (isHidden) {
  34. icon.classList.remove("bi-arrow-left");
  35. icon.classList.add("bi-arrow-right");
  36. } else {
  37. icon.classList.remove("bi-arrow-right");
  38. icon.classList.add("bi-arrow-left");
  39. }
  40. };
  41. // 숨김 여부 확인
  42. isHidden() {
  43. let isHidden = getCookie("hidden-aside") ;
  44. if (isHidden == "") {
  45. isHidden = this.body.classList.contains("hidden-aside");
  46. }
  47. return (isHidden === "hidden");
  48. }
  49. // 보이기
  50. showAside() {
  51. this.body.classList.remove("hidden-aside");
  52. this.toggleAsideIcon(0);
  53. setCookie("hidden-aside", "visible", 7);
  54. }
  55. // 숨기기
  56. hideAside() {
  57. this.body.classList.add("hidden-aside");
  58. this.toggleAsideIcon(1);
  59. setCookie("hidden-aside", "hidden", 7);
  60. }
  61. }
  62. const aside = new Aside();
  63. document.getElementById("btnAsideToggle").addEventListener("click", (e) => aside.toggleAside(e));
  64. // 화면이 작아지면
  65. window.addEventListener("resize", function () {
  66. if (window.innerWidth > 768) {
  67. aside.showAside(0);
  68. } else {
  69. aside.hideAside(1);
  70. }
  71. });
  72. // 메뉴 토글 유지
  73. document.querySelectorAll(".collapse").forEach(e => {
  74. const collapseID = e.id;
  75. const collapseState = getCookie(collapseID);
  76. if (collapseState === "open") {
  77. new bootstrap.Collapse(e, { show: true });
  78. } else if (collapseState === "closed") {
  79. new bootstrap.Collapse(e, { toggle: false });
  80. }
  81. e.addEventListener("show.bs.collapse", () => {
  82. setCookie(collapseID, "open", 7);
  83. });
  84. e.addEventListener("hide.bs.collapse", () => {
  85. setCookie(collapseID, "closed", 7);
  86. });
  87. });
  88. // 드롭박스 적용
  89. const dropdownList = [...document.querySelectorAll('.dropdown-toggle')].map(e => new bootstrap.Dropdown(e));
  90. // 목록 버튼상자
  91. class ActionButtons {
  92. constructor() {
  93. this.form = document.getElementById("fAdminList");
  94. }
  95. validate() {
  96. let checked = $("input:checkbox.list-check-box:checked");
  97. if (checked.length < 1) {
  98. alert("자료를 하나 이상 선택하세요.");
  99. return false;
  100. }
  101. return true;
  102. }
  103. checkout(e) {
  104. const action = (e.target.dataset.action || e.target.closest("a").href);
  105. if (!action) {
  106. alert("처리 주소를 확인하세요.");
  107. return false;
  108. }
  109. this.form.action = action;
  110. this.form.submit();
  111. }
  112. Update(e) {
  113. if (!this.validate()) {
  114. return false;
  115. }
  116. if (confirm("선택한 자료를 정말 수정 하시겠습니까?")) {
  117. this.checkout(e);
  118. }
  119. }
  120. Delete(e) {
  121. if (!this.validate()) {
  122. return false;
  123. }
  124. if (confirm("선택한 자료를 정말 삭제 하시겠습니까?")) {
  125. this.checkout(e);
  126. }
  127. }
  128. Recover(e) {
  129. if (!this.validate()) {
  130. return false;
  131. }
  132. if (confirm("선택한 자료를 정말 복원 하시겠습니까?")) {
  133. this.checkout(e);
  134. }
  135. }
  136. checkedAll(e) {
  137. let chk = document.getElementsByClassName("list-check-box");
  138. for (let i = 0; i < chk.length; i++) {
  139. if (e.target.getAttribute("form") == chk[i].getAttribute("form")) {
  140. chk[i].checked = e.target.checked;
  141. }
  142. }
  143. if(e.target.checked) {
  144. $("[data-action]").prop("disabled", false);
  145. } else {
  146. $("[data-action]").prop("disabled", true);
  147. }
  148. }
  149. }
  150. const actionButtons = new ActionButtons();
  151. $(document).on("click", "#btnListUpdate", (e) => actionButtons.Update(e));
  152. $(document).on("click", "#btnListDelete", (e) => actionButtons.Delete(e));
  153. $(document).on("click", "#btnListRecover", (e) => actionButtons.Recover(e));
  154. $(document).on("click", ".btn-row-delete", () => confirm("정말 삭제 하시겠습니까?"));
  155. // 모든 라디오, 체크박스 선택/해제
  156. $(document).on("click", "#checkedAll", (e) => actionButtons.checkedAll(e));