site.js 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211
  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. const instance = bootstrap.Collapse.getOrCreateInstance(e, {
  77. toggle: false
  78. });
  79. if (collapseState === "open") {
  80. instance.show();
  81. } else {
  82. instance.hide();
  83. }
  84. e.addEventListener("show.bs.collapse", () => {
  85. setCookie(collapseID, "open", 7);
  86. });
  87. e.addEventListener("hide.bs.collapse", () => {
  88. setCookie(collapseID, "closed", 7);
  89. });
  90. });
  91. // 드롭박스 적용
  92. const dropdownList = [...document.querySelectorAll('.dropdown-toggle')].map(e => new bootstrap.Dropdown(e));
  93. // 목록 버튼상자
  94. class ActionButtons {
  95. constructor() {
  96. this.form = document.getElementById("fAdminList");
  97. }
  98. validate() {
  99. let checked = $("input:checkbox.list-check-box:checked");
  100. if (checked.length < 1) {
  101. alert("항목을 하나 이상 선택하세요.");
  102. return false;
  103. }
  104. return true;
  105. }
  106. checkout(e) {
  107. const action = (e.target.dataset.action || e.target.closest("a").href);
  108. if (!action) {
  109. alert("처리 주소를 확인하세요.");
  110. return false;
  111. }
  112. this.form.action = action + window.location.search;
  113. this.form.submit();
  114. }
  115. Update(e) {
  116. if (!this.validate()) {
  117. return false;
  118. }
  119. if (confirm("선택한 항목을 정말 수정 하시겠습니까?")) {
  120. this.checkout(e);
  121. }
  122. }
  123. Delete(e) {
  124. if (!this.validate()) {
  125. return false;
  126. }
  127. if (confirm("선택한 항목을 정말 삭제 하시겠습니까?")) {
  128. this.checkout(e);
  129. }
  130. }
  131. Recover(e) {
  132. if (!this.validate()) {
  133. return false;
  134. }
  135. if (confirm("선택한 항목을 정말 복원 하시겠습니까?")) {
  136. this.checkout(e);
  137. }
  138. }
  139. Execute(e) {
  140. if (!this.validate()) {
  141. return false;
  142. }
  143. if (confirm("선택한 항목을 정말 처리 하시겠습니까?")) {
  144. this.checkout(e);
  145. }
  146. }
  147. checkedAll(e) {
  148. let chk = document.getElementsByClassName("list-check-box");
  149. for (let i = 0; i < chk.length; i++) {
  150. let targetFormName = (e.target.getAttribute("form") || e.target.form.id);
  151. let chkFormName = (chk[i].getAttribute("form") || chk[i].form.id);
  152. if (targetFormName == chkFormName) {
  153. chk[i].checked = e.target.checked;
  154. }
  155. }
  156. this.toggleDisabled();
  157. }
  158. toggleDisabled() {
  159. let checked = $("input:checkbox.list-check-box:checked");
  160. if (checked.length > 0) {
  161. $("[data-action]").prop("disabled", false);
  162. } else {
  163. $("[data-action]").prop("disabled", true);
  164. }
  165. }
  166. }
  167. const actionButtons = new ActionButtons();
  168. $(document).on("click", "#btnListUpdate", (e) => actionButtons.Update(e));
  169. $(document).on("click", "#btnListDelete", (e) => actionButtons.Delete(e));
  170. $(document).on("click", "#btnListRecover", (e) => actionButtons.Recover(e));
  171. $(document).on("click", "#btnListExecute", (e) => actionButtons.Execute(e));
  172. $(document).on("click", ".btn-row-delete", () => confirm("정말 삭제하시겠습니까?"));
  173. $(document).on("click", ".btn-row-execute", () => confirm("정말 처리하시겠습니까?"));
  174. $(document).on("click", "#checkedAll", (e) => actionButtons.checkedAll(e));
  175. $(document).on("change", "input.list-check-box", actionButtons.toggleDisabled);