Edit.cshtml 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. @page "{id:int}"
  2. @model Admin.Pages.Member.Grade.EditModel
  3. @{
  4. ViewData["Title"] = "회원등급 수정";
  5. }
  6. <div class="container">
  7. <h3>@ViewData["Title"]</h3>
  8. <hr />
  9. <partial name="_StatusMessage" />
  10. <form name="f_admin_write" id="fAdminWrite" method="post" accept-charset="utf-8" autocomplete="off" enctype="multipart/form-data">
  11. <input type="hidden" asp-for="Input.ID" />
  12. <div class="row mb-2">
  13. <label class="col-sm-2 col-form-label"><span class="text-danger">*</span> PK</label>
  14. <div class="col-sm-10">
  15. <input type="text" readonly class="form-control-plaintext" value="@Model.Input.ID" />
  16. </div>
  17. </div>
  18. <div class="row mb-2">
  19. <label asp-for="Input.ImageFile" class="col-sm-2 col-form-label">이미지</label>
  20. <div class="col-sm-10">
  21. @if (Model.Input.Image is not null && Model.Input.Image != string.Empty)
  22. {
  23. <img src="@Url.Content(Model.Input.Image)" class="img-fluid img-thumbnail" alt="@Model.Input.KorName" />
  24. <div class="form-check pt-2">
  25. <input type="checkbox" name="isImageRemove" id="isImageRemove" class="form-check-input" value="true" />
  26. <label for="isImageRemove" class="form-check-label">삭제</label>
  27. </div>
  28. <input type="hidden" asp-for="Input.Image" class="form-control" />
  29. }
  30. else
  31. {
  32. <div id="memberGradePrev" hidden>
  33. <img class="img-fluid img-thumbnail" alt="이미지 미리보기" /><br/>
  34. <button type="button" class="btn btn-sm btn-danger mt-2 mb-2 btn-remove-preview">삭제</button>
  35. </div>
  36. <input type="file" asp-for="Input.ImageFile" class="form-control" accept="image/*" />
  37. <span asp-validation-for="Input.ImageFile" class="text-danger"></span>
  38. }
  39. </div>
  40. </div>
  41. <div class="row mb-2">
  42. <label asp-for="Input.KorName" class="col-sm-2 col-form-label"><span class="text-danger">*</span> 한글 명</label>
  43. <div class="col-sm-10">
  44. <input type="text" asp-for="Input.KorName" class="form-control" required />
  45. <span asp-validation-for="Input.KorName" class="text-danger"></span>
  46. </div>
  47. </div>
  48. <div class="row mb-2">
  49. <label asp-for="Input.EngName" class="col-sm-2 col-form-label"><span class="text-danger">*</span> 영문 명</label>
  50. <div class="col-sm-10">
  51. <input type="text" asp-for="Input.EngName" class="form-control" required />
  52. <span asp-validation-for="Input.EngName" class="text-danger"></span>
  53. </div>
  54. </div>
  55. <div class="row mb-2">
  56. <label asp-for="Input.Description" class="col-sm-2 col-form-label">내용</label>
  57. <div class="col-sm-10">
  58. <textarea asp-for="Input.Description" class="form-control" placeholder="최대 1000자" rows="2" maxlength="1000"></textarea>
  59. <span asp-validation-for="Input.Description" class="text-danger"></span>
  60. </div>
  61. </div>
  62. <div class="row mb-2">
  63. <label asp-for="Input.Order" class="col-sm-2 col-form-label"><span class="text-danger">*</span> 순서</label>
  64. <div class="col-sm-10">
  65. <input type="number" asp-for="Input.Order" class="form-control d-inline w-auto" min="-9999" max="9999" required />
  66. <span asp-validation-for="Input.Order" class="text-danger"></span>
  67. </div>
  68. </div>
  69. <div class="row mb-2">
  70. <label asp-for="Input.TotalDonationCount" class="col-sm-2 col-form-label"><span class="text-danger">*</span> 누적 후원 횟수</label>
  71. <div class="col-sm-10">
  72. <div class="input-group">
  73. <input type="number" asp-for="Input.TotalDonationCount" class="form-control w-auto flex-grow-0" min="0" max="1000000000" required />
  74. <span asp-validation-for="Input.TotalDonationCount" class="text-danger"></span>
  75. <div class="input-group-text">회</div>
  76. </div>
  77. </div>
  78. </div>
  79. <div class="row mb-2">
  80. <label asp-for="Input.TotalDonationAmount" class="col-sm-2 col-form-label"><span class="text-danger">*</span> 누적 후원 금액</label>
  81. <div class="col-sm-10">
  82. <div class="input-group">
  83. <input type="number" asp-for="Input.TotalDonationAmount" class="form-control w-auto flex-grow-0" min="0" max="1000000000" required />
  84. <span asp-validation-for="Input.TotalDonationAmount" class="text-danger"></span>
  85. <div class="input-group-text">원</div>
  86. </div>
  87. </div>
  88. </div>
  89. <div class="row mb-2">
  90. <label asp-for="Input.TextColor" class="col-sm-2 col-form-label"><span class="text-danger">*</span> 표시 색상</label>
  91. <div class="col-sm-10">
  92. <input type="text" asp-for="Input.TextColor" class="form-control w-auto flex-grow-0" minlength="4" maxlength="7" required />
  93. <div class="form-text text-muted">
  94. 색상 코드는 #RRGGBB 형식으로 입력하세요. (예: #FF5733)
  95. </div>
  96. </div>
  97. </div>
  98. <div class="row mb-2">
  99. <label asp-for="Input.IsActive" class="col-sm-2 col-form-label">사용 여부</label>
  100. <div class="col-sm-10 align-content-center">
  101. <div class="form-check-inline">
  102. <input type="checkbox" asp-for="Input.IsActive" class="form-check-input" />
  103. <label class="form-check-label" asp-for="Input.IsActive">
  104. 사용합니다.
  105. </label>
  106. <span asp-validation-for="Input.IsActive" class="text-danger"></span>
  107. </div>
  108. </div>
  109. </div>
  110. @if (Model.Input.UpdatedAt is not null)
  111. {
  112. <div class="row mb-2">
  113. <label class="col-sm-2 col-form-label">수정일시</label>
  114. <div class="col-sm-10">
  115. <input asp-for="Input.UpdatedAt" class="form-control-plaintext" type="text" readonly />
  116. </div>
  117. </div>
  118. }
  119. @if (Model.Input.CreatedAt != null)
  120. {
  121. <div class="row mb-2">
  122. <label class="col-sm-2 col-form-label">등록일시</label>
  123. <div class="col-sm-10">
  124. <input asp-for="Input.CreatedAt" class="form-control-plaintext" type="text" readonly />
  125. </div>
  126. </div>
  127. }
  128. <hr />
  129. <div class="d-grid gap-2 text-center d-md-block">
  130. <button type="submit" class="btn btn-sm btn-success">저장</button>
  131. <a asp-page="Index" class="btn btn-sm btn-secondary">취소</a>
  132. </div>
  133. <br />
  134. </form>
  135. </div>
  136. @section Scripts {
  137. <script>
  138. setupImagePreview("Input_ImageFile", "memberGradePrev");
  139. // 이미지 삭제
  140. let oldImageSrc = "";
  141. document.getElementById("isImageRemove")?.addEventListener("change", function (e) {
  142. let image = document.querySelector("img.img-thumbnail");
  143. if (image) {
  144. if (e.target.checked) {
  145. oldImageSrc = image.src;
  146. image.src = "";
  147. image.style.display = "none";
  148. } else {
  149. image.src = oldImageSrc;
  150. image.style.display = "";
  151. }
  152. }
  153. });
  154. </script>
  155. }