View.cshtml 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. @page "{id:int}"
  2. @model Admin.Pages.Member.Wallet.List.ViewModel
  3. @using Domain.Entities.Wallets.ValueObject
  4. @{
  5. ViewData["Title"] = "(C) 충전 하기";
  6. }
  7. <div class="container">
  8. <h3>@ViewData["Title"]</h3>
  9. <hr />
  10. <partial name="_StatusMessage" />
  11. <div class="alert alert-warning" role="alert">
  12. 관리자 비밀번호 확인 후 충전 또는 차감 처리됩니다.
  13. </div>
  14. <form name="f_admin_write" id="fAdminWrite" method="post" asp-page-handler="Charge" accept-charset="utf-8" autocomplete="off">
  15. <div class="row mb-2">
  16. <label class="col-sm-2 col-form-label">회원 ID</label>
  17. <div class="col-sm-10">
  18. <input type="text" class="form-control-plaintext" value="@Model.Member.ID" readonly disabled />
  19. </div>
  20. </div>
  21. <div class="row mb-2">
  22. <label class="col-sm-2 col-form-label">회원 이메일</label>
  23. <div class="col-sm-10">
  24. <input type="text" class="form-control-plaintext" value="@Model.Member.Email" readonly disabled />
  25. </div>
  26. </div>
  27. <div class="row mb-2">
  28. <label class="col-sm-2 mb-2">회원 등급</label>
  29. <div class="col-sm-10">
  30. @(Model.Member.GradeName ?? "-")
  31. </div>
  32. </div>
  33. <div class="row mb-3">
  34. <label class="col-sm-2">보유 잔액(P)</label>
  35. <div class="col-sm-10">
  36. @Model.Wallet.Balance
  37. </div>
  38. </div>
  39. <div class="row mb-1">
  40. <label class="col-sm-2 col-form-label">잔액 유형</label>
  41. <div class="col-sm-10">
  42. <div class="form-check">
  43. <input class="form-check-input" type="radio" name="BalanceType" id="bt_auto" value="" checked="@(Model.BalanceType is null)" />
  44. <label class="form-check-label" for="bt_auto">
  45. 자동 (기본) — 충전: <strong>조정</strong> 잔액으로 입금 / 차감: 전체 잔액에서 정책 순서대로 분할 차감
  46. </label>
  47. </div>
  48. <div class="mt-2">
  49. @foreach (var row in Model.Wallet.Balances.Where(c => c.Type != WalletBalanceType.Locked))
  50. {
  51. var isWithdrawable = row.Type is WalletBalanceType.Donation or WalletBalanceType.StoreRevenue;
  52. <div class="form-check form-check-inline">
  53. <input class="form-check-input" type="radio" name="BalanceType" id="bt_@((int)row.Type)" value="@((int)row.Type)" checked="@(Model.BalanceType == row.Type)" />
  54. <label class="form-check-label" for="bt_@((int)row.Type)">
  55. @row.TypeName
  56. @if (isWithdrawable)
  57. {
  58. <span class="text-danger" title="출금 가능 금액입니다">⚠</span>
  59. }
  60. <small class="text-muted">(@row.Amount P)</small>
  61. </label>
  62. </div>
  63. }
  64. </div>
  65. <div class="form-text mt-3">
  66. <ul>
  67. <li>특정 유형 선택 시 해당 잔액으로만 충전/차감되며, 차감은 그 잔액이 부족하면 실패합니다.</li>
  68. <li><span class="text-danger">⚠</span> 표시는 출금 가능 금액이므로 신중히 조정하세요. 거래 장부에는 모두 <strong>조정</strong> 거래로 기록됩니다.</li>
  69. </ul>
  70. </div>
  71. </div>
  72. </div>
  73. <div class="row mb-2">
  74. <label asp-for="Amount" class="col-sm-2 col-form-label"><span>*</span> 충전 금액</label>
  75. <div class="col-sm-10">
  76. <div class="input-group">
  77. <input type="number" asp-for="Amount" class="form-control w-auto d-flex flex-grow-0" required min="-99999999" max="99999999" step="any" autofocus />
  78. <span class="input-group-text">P</span>
  79. </div>
  80. <span asp-validation-for="Amount" class="text-danger"></span>
  81. </div>
  82. </div>
  83. <div class="row mb-2">
  84. <label asp-for="Password" class="col-sm-2 col-form-label"><span>*</span> 비밀번호</label>
  85. <div class="col-sm-10">
  86. <input type="password" asp-for="Password" class="form-control" required maxlength="100"/>
  87. <span asp-validation-for="Password" class="text-danger"></span>
  88. </div>
  89. </div>
  90. <div class="row mb-2">
  91. <label asp-for="Memo" class="col-sm-2 col-form-label">메모</label>
  92. <div class="col-sm-10">
  93. <textarea asp-for="Memo" class="form-control" rows="5" maxlength="1000"></textarea>
  94. <span asp-validation-for="Memo" class="text-danger"></span>
  95. </div>
  96. </div>
  97. <hr />
  98. <div class="d-grid gap-2 text-center d-md-block">
  99. <button type="submit" class="btn btn-success">저장</button>
  100. <a href="/Member/Wallet/List" class="btn btn-secondary">취소</a>
  101. </div>
  102. <br />
  103. </form>
  104. </div>
  105. @section Scripts {
  106. <script>
  107. $("#fAdminWrite").validate({
  108. rules: {
  109. "Amount": {
  110. required: true
  111. },
  112. "Password": {
  113. required: true
  114. }
  115. },
  116. messages: {
  117. "Amount": {
  118. required: "충전 금액을 입력해주세요."
  119. },
  120. "Password": {
  121. required: "비밀번호를 입력해주세요."
  122. }
  123. },
  124. submitHandler: function(form) {
  125. form.submit();
  126. }
  127. });
  128. </script>
  129. }