Prefix.cshtml 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. @page "{id:int}"
  2. @model Admin.Pages.Forum.Board.PrefixModel
  3. @{
  4. ViewData["Title"] = "게시판 관리 - 말머리";
  5. ViewData["Sector"] = "Prefix";
  6. ViewData["BoardID"] = Model.BoardID;
  7. ViewData["BoardList"] = Model.BoardList;
  8. ViewData["QueryString"] = Model.QueryString;
  9. }
  10. <div class="container">
  11. <partial name="_Header" />
  12. <partial name="_StatusMessage" />
  13. <partial name="/Pages/Forum/Board/_NavTabs.cshtml" />
  14. <form id="fAdminWrite" method="post" asp-page-handler="Create" accept-charset="utf-8" autocomplete="off">
  15. <div class="row g-2">
  16. <label class="col-lg-1 col-form-label">말머리</label>
  17. <div class="col-7 col-sm-auto">
  18. <div class="input-group">
  19. <div class="input-group-text">
  20. <input type="color" name="Input.Color" class="h-100" maxlength="10" required />
  21. </div>
  22. <input type="text" name="Input.Name" class="form-control" maxlength="20" required placeholder="이름" />
  23. </div>
  24. </div>
  25. <div class="col col-lg-auto">
  26. <input type="number" name="Input.Order" class="form-control" min="-999" max="999" required placeholder="순서" />
  27. </div>
  28. <div class="col-12 col-sm-auto text-center">
  29. <button type="submit" class="btn btn-primary w-100">등록</button>
  30. </div>
  31. </div>
  32. </form>
  33. <hr/>
  34. <div class="row g-2 align-items-end">
  35. <div class="col">
  36. Total : @Model.Total.ToString("N0")
  37. </div>
  38. <div class="col text-end">
  39. <button type="button" id="btnFListDelete" class="btn btn-sm btn-danger" form="fAdminList" disabled>삭제</button>
  40. <button type="submit" id="btnFListSave" class="btn btn-sm btn-success" form="fAdminList" @(Model.Total <= 0 ? "disabled" : "")> 저장</button>
  41. </div>
  42. </div>
  43. <div class="table-responsive">
  44. <form id="fAdminList" method="post" asp-page-handler="Save" accept-charset="utf-8" autocomplete="off">
  45. <table class="table table-striped table-bordered table-hover mt-3">
  46. <caption>
  47. 게시글 제목에 특정 단어를 넣는 기능입니다. 최대 10개를 추가할 수 있습니다.
  48. </caption>
  49. <colgroup>
  50. <col width="5%"/>
  51. <col width="*"/>
  52. <col width="*"/>
  53. <col width="*"/>
  54. <col width="*"/>
  55. <col width="12%" />
  56. <col width="12%"/>
  57. </colgroup>
  58. <thead>
  59. <tr>
  60. <th>
  61. <div class="form-check form-check-inline">
  62. <input type="checkbox" id="checkedAll" class="form-check-input" value="1" />
  63. <label for="checkedAll" class="form-check-label">ID</label>
  64. </div>
  65. </th>
  66. <th>말머리</th>
  67. <th>순서</th>
  68. <th>사용 횟수</th>
  69. <th>사용 여부</th>
  70. <th>등록일시</th>
  71. <th>수정일시</th>
  72. </tr>
  73. </thead>
  74. <tbody>
  75. @if (Model.Data == null || !Model.Data.Any())
  76. {
  77. <tr>
  78. <td colspan="7">No Data.</td>
  79. </tr>
  80. }
  81. else
  82. {
  83. @foreach (var row in Model.Data)
  84. {
  85. var index = Model.Data.IndexOf(row);
  86. <tr>
  87. <td>
  88. <div class="form-check form-check-inline">
  89. <input type="checkbox" name="CheckList[]" id="CheckList_@index" class="form-check-input list-check-box" value="@row.ID" />
  90. <label for="CheckList_@index" class="form-check-label">@row.ID</label>
  91. </div>
  92. <input type="hidden" name="UpdateItems[@index].ID" class="form-control-plaintext text-center" value="@row.ID" />
  93. </td>
  94. <td>
  95. <div class="input-group">
  96. <div class="input-group-text">
  97. <input type="color" name="UpdateItems[@index].Color" class="h-100" maxlength="10" value="@row.Color" required />
  98. </div>
  99. <input type="text" name="UpdateItems[@index].Name" class="form-control" maxlength="20" value="@row.Name" required />
  100. </div>
  101. </td>
  102. <td>
  103. <input type="number" name="UpdateItems[@index].Order" class="form-control" min="-999" max="999" value="@row.Order" required />
  104. </td>
  105. <td>@row.Posts</td>
  106. <td>
  107. <div class="form-check form-check-inline">
  108. <input type="checkbox" name="UpdateItems[@index].IsActive" id="UpdateItems_@(index)_IsActive" class="form-check-input" checked="@row.IsActive" value="true" />
  109. <label for="UpdateItems_@(index)_IsActive" class="form-check-label">사용</label>
  110. </div>
  111. </td>
  112. <td>@row.CreatedAt</td>
  113. <td>@(row.UpdatedAt ?? "-")</td>
  114. </tr>
  115. }
  116. }
  117. </tbody>
  118. </table>
  119. </form>
  120. </div>
  121. </div>
  122. @section Scripts {
  123. <script>
  124. // 삭제
  125. $(document).on("click", "#btnFListDelete", function() {
  126. if (confirm("삭제 하시겠습니까?")) {
  127. let checked = document.querySelectorAll(".list-check-box:checked");
  128. if (checked.length === 0) {
  129. return false;
  130. }
  131. checked.forEach(function(el) {
  132. let form = document.createElement("form");
  133. form.method = "post";
  134. form.action = "?handler=Delete";
  135. let input = document.createElement("input");
  136. input.type = "hidden";
  137. input.name = "DeleteID";
  138. input.value = el.value;
  139. let token = document.querySelector('input[name="__RequestVerificationToken"]');
  140. if (token) {
  141. let tokenInput = document.createElement("input");
  142. tokenInput.type = "hidden";
  143. tokenInput.name = "__RequestVerificationToken";
  144. tokenInput.value = token.value;
  145. form.appendChild(tokenInput);
  146. }
  147. form.appendChild(input);
  148. document.body.appendChild(form);
  149. form.submit();
  150. });
  151. }
  152. return false;
  153. });
  154. // 저장
  155. $(document).on("click", "#btnFListSave", function() {
  156. if (confirm("저장 하시겠습니까?")) {
  157. let form = document.getElementById("fAdminList");
  158. if (form.checkValidity()) { // HTML5 폼 검증 수행
  159. form.submit();
  160. } else {
  161. form.reportValidity();
  162. }
  163. }
  164. return false;
  165. });
  166. </script>
  167. }