| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182 |
- @page "{id:int}"
- @model Admin.Pages.Channel.List.EditModel
- @{
- ViewData["Title"] = "채널 수정";
- }
- <div class="container">
- <h3>@ViewData["Title"]</h3>
- <hr />
- <partial name="_StatusMessage" />
- <div class="alert alert-success" role="alert">
- 채널 등록 시 YouTube API를 통해 자동 수집된 정보입니다.<br />
- 관리자가 직접 수정 시 잘못된 결과가 발생할 수 있습니다.
- </div>
- <form id="fAdminWrite" method="post" accept-charset="utf-8" autocomplete="off">
- <input type="hidden" asp-for="Input.ID" />
- <input type="hidden" asp-for="Input.MemberID" />
- <div class="row mb-2">
- <label class="col-sm-2 col-form-label">PK</label>
- <div class="col-sm-10">
- <input type="text" asp-for="Input.ID" class="form-control-plaintext" readonly />
- </div>
- </div>
- <div class="row mb-2">
- <label class="col-sm-2 col-form-label">회원(소유자)</label>
- <div class="col-sm-10">
- <input type="text" readonly class="form-control-plaintext" value="[@Model.Input.MemberID] @Model.MemberInfo" />
- </div>
- </div>
- <div class="row mb-2">
- <label asp-for="Input.Name" class="col-sm-2 col-form-label"><span class="text-danger">*</span> 이름</label>
- <div class="col-sm-10">
- <input type="text" asp-for="Input.Name" class="form-control" required maxlength="200" />
- </div>
- </div>
- <div class="row mb-2">
- <label asp-for="Input.Handle" class="col-sm-2 col-form-label">핸들</label>
- <div class="col-sm-10">
- <div class="input-group">
- <span class="input-group-text">@@</span>
- <input type="text" asp-for="Input.Handle" class="form-control" maxlength="30" />
- </div>
- </div>
- </div>
- <div class="row mb-2">
- <label asp-for="Input.YouTubeUrl" class="col-sm-2 col-form-label"><span class="text-danger">*</span> YouTube 주소</label>
- <div class="col-sm-10">
- <input type="url" asp-for="Input.YouTubeUrl" class="form-control" required maxlength="255" />
- <div class="text-muted form-text">
- YouTube 채널 주소 (예: https://www.youtube.com/channel/UCxxxxxxxxxxxxxxxxxxxxxx)
- </div>
- </div>
- </div>
- <div class="row mb-2">
- <label asp-for="Input.DonationCode" class="col-sm-2 col-form-label">후원 코드</label>
- <div class="col-sm-10">
- <div class="row">
- <div class="col col-md-auto">
- <div class="input-group">
- <input type="text" asp-for="Input.DonationCode" id="channelDonationCode" class="form-control" maxlength="7" placeholder="자동 생성" autocomplete="off" />
- <button type="button" id="btnRegenerateDonationCode" class="btn btn-outline-secondary" title="새 코드 재생성">
- <i class="fa-solid fa-rotate"></i> 재생성
- </button>
- </div>
- </div>
- </div>
- <small class="form-text text-muted">자동 생성된 6자 영숫자 코드 (UNIQUE, 대문자). 직접 4~7자 영문/숫자로 입력하거나 재생성 버튼으로 갱신할 수 있습니다. 비워두면 후원 코드를 해제합니다.</small>
- <span asp-validation-for="Input.DonationCode" class="text-danger"></span>
- </div>
- </div>
- <div class="row mb-2">
- <label asp-for="Input.PlatformFeeRate" class="col-sm-2 col-form-label"><span class="text-danger">*</span> 후원 수수료(%)</label>
- <div class="col-sm-10">
- <div class="row">
- <div class="col col-md-auto">
- <div class="input-group">
- <input type="number" asp-for="Input.PlatformFeeRate" class="form-control" required min="0" max="100" step="any" />
- <span class="input-group-text">%</span>
- </div>
- </div>
- </div>
- <small class="form-text text-muted">후원 받은 금액 중 dpot 이 가져가는 비율 (채널주는 100-PlatformFee% 보유)</small>
- <span asp-validation-for="Input.PlatformFeeRate" class="text-danger"></span>
- </div>
- </div>
- <div class="row mb-2">
- <label asp-for="Input.StoreCommissionRate" class="col-sm-2 col-form-label"><span class="text-danger">*</span> 상점 보상률(%)</label>
- <div class="col-sm-10">
- <div class="row">
- <div class="col col-md-auto">
- <div class="input-group">
- <input type="number" asp-for="Input.StoreCommissionRate" class="form-control" required min="0" max="100" step="any" />
- <span class="input-group-text">%</span>
- </div>
- </div>
- </div>
- <small class="form-text text-muted">상점 후원 시 채널주에게 보상으로 지급하는 비율 (StoreRevenue 잔액에 입금)</small>
- <span asp-validation-for="Input.StoreCommissionRate" class="text-danger"></span>
- </div>
- </div>
- <div class="row mb-2">
- <label asp-for="Input.IsVerified" class="col-sm-2 col-form-label">인증 여부</label>
- <div class="col-sm-10 align-content-center">
- <div class="form-check form-check-inline">
- <input type="checkbox" asp-for="Input.IsVerified" class="form-check-input" />
- <label class="form-check-label" asp-for="Input.IsVerified">인증합니다.</label>
- </div>
- </div>
- </div>
- <div class="row mb-2">
- <label asp-for="Input.IsActive" class="col-sm-2 col-form-label">사용 여부</label>
- <div class="col-sm-10 align-content-center">
- <div class="form-check form-check-inline">
- <input type="checkbox" asp-for="Input.IsActive" class="form-check-input" />
- <label class="form-check-label" asp-for="Input.IsActive">사용합니다.</label>
- </div>
- </div>
- </div>
- @if (Model.Input.UpdatedAt is not null)
- {
- <div class="row mb-2">
- <label class="col-sm-2 col-form-label">수정일시</label>
- <div class="col-sm-10">
- <input type="text" asp-for="Input.UpdatedAt" class="form-control-plaintext" readonly />
- </div>
- </div>
- }
- <div class="row mb-2">
- <label class="col-sm-2 col-form-label">등록일시</label>
- <div class="col-sm-10">
- <input type="text" asp-for="Input.CreatedAt" class="form-control-plaintext" readonly />
- </div>
- </div>
- <hr />
- <div class="d-grid gap-2 text-center d-md-block">
- <button type="submit" class="btn btn-success">저장</button>
- <a href="@(Model.ReturnUrl ?? "/Channel/List")" class="btn btn-secondary">취소</a>
- <button type="submit"
- class="btn btn-danger"
- formaction="?handler=Delete"
- formnovalidate
- onclick="return confirm('삭제 하시겠습니까?');">
- 삭제
- </button>
- </div>
- <br />
- </form>
- </div>
- @section Scripts {
- <script>
- // 후원 코드 재생성
- document.getElementById('btnRegenerateDonationCode').addEventListener('click', async function () {
- const btn = this;
- btn.disabled = true;
- try {
- const res = await fetch('?handler=GenerateDonationCode', {
- method: 'GET',
- headers: { 'Accept': 'application/json' }
- });
- if (!res.ok) {
- throw new Error('코드 생성 실패');
- }
- const data = await res.json();
- if (data && data.code) {
- document.getElementById('channelDonationCode').value = data.code;
- }
- } catch (e) {
- alert('후원 코드 재생성 중 오류가 발생했습니다.');
- } finally {
- btn.disabled = false;
- }
- });
- </script>
- }
|