site.js 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221
  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. function GetCheckedBoxIDs() {
  94. return Array.from(document.querySelectorAll('input[type="checkbox"].list-check-box:checked')).map(c => c.value);
  95. }
  96. // 목록 버튼상자
  97. class ActionButtons {
  98. constructor() {
  99. this.form = document.getElementById("fAdminList");
  100. }
  101. validate() {
  102. let checked = $("input:checkbox.list-check-box:checked");
  103. if (checked.length < 1) {
  104. alert("항목을 하나 이상 선택하세요.");
  105. return false;
  106. }
  107. return true;
  108. }
  109. checkout() {
  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. let ids = GetCheckedBoxIDs();
  122. if (ids.length > 1) {
  123. if (confirm(`${ids.length}건의 항목을 정말 삭제 하시겠습니까?`)) {
  124. if (!this.validate()) {
  125. return false;
  126. }
  127. }
  128. } else {
  129. if (!confirm("선택한 항목을 정말 삭제 하시겠습니까?")) {
  130. return false;
  131. }
  132. let id = e.target.dataset.id;
  133. if (id) {
  134. this.form.elements[`ids_${id}`].checked = true;
  135. }
  136. }
  137. setTimeout(() => this.checkout(e), 100);
  138. }
  139. Recover(e) {
  140. if (!this.validate()) {
  141. return false;
  142. }
  143. if (confirm("선택한 항목을 정말 복원 하시겠습니까?")) {
  144. this.checkout(e);
  145. }
  146. }
  147. Execute(e) {
  148. if (!this.validate()) {
  149. return false;
  150. }
  151. if (confirm("선택한 항목을 정말 처리 하시겠습니까?")) {
  152. this.checkout(e);
  153. }
  154. }
  155. checkedAll(e) {
  156. let chk = document.getElementsByClassName("list-check-box");
  157. for (let i = 0; i < chk.length; i++) {
  158. let targetFormName = (e.target.getAttribute("form") || e.target.form.id);
  159. let chkFormName = (chk[i].getAttribute("form") || chk[i].form.id);
  160. if (targetFormName == chkFormName) {
  161. chk[i].checked = e.target.checked;
  162. }
  163. }
  164. this.toggleDisabled();
  165. }
  166. toggleDisabled() {
  167. let checked = $("input:checkbox.list-check-box:checked");
  168. if (checked.length > 0) {
  169. $('button[form="fAdminList"]').prop("disabled", false);
  170. } else {
  171. $('button[form="fAdminList"]').prop("disabled", true);
  172. }
  173. }
  174. }
  175. const actionButtons = new ActionButtons();
  176. $(document).on("click", "#btnListUpdate", (e) => actionButtons.Update(e));
  177. $(document).on("click", "#btnListDelete", (e) => actionButtons.Delete(e));
  178. $(document).on("click", "#btnListRecover", (e) => actionButtons.Recover(e));
  179. $(document).on("click", "#btnListExecute", (e) => actionButtons.Execute(e));
  180. $(document).on("click", ".btn-row-delete", (e) => actionButtons.Delete(e));
  181. $(document).on("click", ".btn-row-execute", () => confirm("정말 처리하시겠습니까?"));
  182. $(document).on("click", "#checkedAll", (e) => actionButtons.checkedAll(e));
  183. $(document).on("change", "input.list-check-box", actionButtons.toggleDisabled);