Index.cshtml 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. @page
  2. @model Admin.Pages.Channel.Exp.IndexModel
  3. @{
  4. ViewData["Title"] = "채널 경험치 관리";
  5. }
  6. <div class="container">
  7. <h3>@ViewData["Title"]</h3>
  8. <hr />
  9. <div asp-validation-summary="ModelOnly" class="text-danger"></div>
  10. <partial name="_StatusMessage" />
  11. <form method="post" accept-charset="utf-8" autocomplete="off">
  12. <div class="alert alert-info" role="alert">
  13. watch 페이지의 채팅 경험치 / 리더보드 정책을 설정합니다.
  14. <br />
  15. 채팅 참여 시마다 XP 가 적립되며, 방송 세션 단위로 리더보드가 집계됩니다 (YouTube 열성 팬 방식).
  16. </div>
  17. <hr />
  18. <!-- 적립 정책 -->
  19. <details open>
  20. <summary class="fs-5 mb-3">적립 정책</summary>
  21. <div class="row mb-2">
  22. <label asp-for="Input.ChatXpPerMessage" class="col-sm-3 col-form-label"></label>
  23. <div class="col-sm-9">
  24. <input type="number" asp-for="Input.ChatXpPerMessage" class="form-control" min="0" max="100" />
  25. <div class="text-muted form-text">채팅 1건이 지급하는 XP (기본 1)</div>
  26. <span asp-validation-for="Input.ChatXpPerMessage" class="text-danger"></span>
  27. </div>
  28. </div>
  29. <div class="row mb-2">
  30. <label asp-for="Input.DonationXpPerAmount" class="col-sm-3 col-form-label"></label>
  31. <div class="col-sm-9">
  32. <div class="input-group">
  33. <input type="number" asp-for="Input.DonationXpPerAmount" class="form-control" min="1" step="100" />
  34. <span class="input-group-text">POINT / 1 XP</span>
  35. </div>
  36. <div class="text-muted form-text">N POINT당 1 XP 환산 (기본 1000 = 1,000원당 1XP)</div>
  37. <span asp-validation-for="Input.DonationXpPerAmount" class="text-danger"></span>
  38. </div>
  39. </div>
  40. <div class="row mb-2">
  41. <label asp-for="Input.ChatXpSessionLimit" class="col-sm-3 col-form-label"></label>
  42. <div class="col-sm-9">
  43. <input type="number" asp-for="Input.ChatXpSessionLimit" class="form-control" min="0" max="10000" />
  44. <div class="text-muted form-text">방송 1회당 채팅으로 쌓을 수 있는 최대 XP (후원 XP 는 상한 없음)</div>
  45. <span asp-validation-for="Input.ChatXpSessionLimit" class="text-danger"></span>
  46. </div>
  47. </div>
  48. <div class="row mb-2">
  49. <label asp-for="Input.MinContentLength" class="col-sm-3 col-form-label"></label>
  50. <div class="col-sm-9">
  51. <input type="number" asp-for="Input.MinContentLength" class="form-control" min="1" max="500" />
  52. <div class="text-muted form-text">이 글자수 미만 채팅은 XP 가 적립되지 않음 (도배 방지)</div>
  53. <span asp-validation-for="Input.MinContentLength" class="text-danger"></span>
  54. </div>
  55. </div>
  56. <div class="row mb-2">
  57. <label asp-for="Input.RateLimitSec" class="col-sm-3 col-form-label"></label>
  58. <div class="col-sm-9">
  59. <div class="input-group">
  60. <input type="number" asp-for="Input.RateLimitSec" class="form-control" min="0" max="60" />
  61. <span class="input-group-text">초</span>
  62. </div>
  63. <div class="text-muted form-text">채팅 최소 간격 (기본 2초)</div>
  64. <span asp-validation-for="Input.RateLimitSec" class="text-danger"></span>
  65. </div>
  66. </div>
  67. </details>
  68. <hr />
  69. <!-- 리더보드 -->
  70. <details open>
  71. <summary class="fs-5 mb-3">리더보드</summary>
  72. <div class="row mb-2">
  73. <label asp-for="Input.LeaderboardSize" class="col-sm-3 col-form-label"></label>
  74. <div class="col-sm-9">
  75. <input type="number" asp-for="Input.LeaderboardSize" class="form-control" min="1" max="500" />
  76. <div class="text-muted form-text">리더보드에 표시할 상위 N명 (기본 50)</div>
  77. <span asp-validation-for="Input.LeaderboardSize" class="text-danger"></span>
  78. </div>
  79. </div>
  80. <div class="row mb-2">
  81. <label asp-for="Input.CrownTopN" class="col-sm-3 col-form-label"></label>
  82. <div class="col-sm-9">
  83. <input type="number" asp-for="Input.CrownTopN" class="form-control" min="0" max="10" />
  84. <div class="text-muted form-text">채팅 옆에 크라운을 표시할 상위 N명 (기본 3)</div>
  85. <span asp-validation-for="Input.CrownTopN" class="text-danger"></span>
  86. </div>
  87. </div>
  88. </details>
  89. <hr />
  90. <!-- 사용자 UI -->
  91. <details open>
  92. <summary class="fs-5 mb-3">사용자 UI</summary>
  93. <div class="row mb-2">
  94. <label asp-for="Input.UxShowLeaderboard" class="col-sm-3 col-form-label">리더보드 패널 노출</label>
  95. <div class="col-sm-9 align-self-center">
  96. <div class="form-check">
  97. <input type="checkbox" asp-for="Input.UxShowLeaderboard" class="form-check-input" />
  98. <label class="form-check-label" asp-for="Input.UxShowLeaderboard">사용합니다.</label>
  99. </div>
  100. </div>
  101. </div>
  102. <div class="row mb-2">
  103. <label asp-for="Input.UxShowMyXpBadge" class="col-sm-3 col-form-label">"내 XP" 뱃지 노출</label>
  104. <div class="col-sm-9 align-self-center">
  105. <div class="form-check">
  106. <input type="checkbox" asp-for="Input.UxShowMyXpBadge" class="form-check-input" />
  107. <label class="form-check-label" asp-for="Input.UxShowMyXpBadge">사용합니다.</label>
  108. </div>
  109. </div>
  110. </div>
  111. </details>
  112. <hr />
  113. <div class="row">
  114. <div class="col text-center p-3">
  115. <button type="submit" class="btn btn-success">저장하기</button>
  116. </div>
  117. </div>
  118. <br />
  119. </form>
  120. </div>
  121. @section Scripts {
  122. <partial name="_ValidationScriptsPartial" />
  123. }