@page "{id:int}" @model Admin.Pages.Store.Coupon.CodesModel @using Domain.Entities.Store.ValueObject @{ ViewData["Title"] = "쿠폰 코드 풀"; }

@ViewData["Title"]


쿠폰명
@Model.CouponName
게임명
@Model.GameName
상품명
@Model.ProductName
사용 가능

@Model.AvailableCount

결제 진행 중

@Model.ReservedCount

발급됨

@Model.IssuedCount

사용됨

@Model.UsedCount

만료

@Model.ExpiredCount

@Html.AntiForgeryToken()

CSV 양식 (UTF-8, 헤더 1행 + 데이터 N행, 최대 10MB):

ID, Code, Status, IssuedToMemberID, IssuedToMemberName, IssuedToMemberEmail, IssuedAt, UsedAt, CreatedAt

  • Status: 0 = 미사용(신규 입고) / 1 = 사용됨
  • Status=1 인 경우 IssuedToMemberID, IssuedAt, UsedAt 필수. 회원 ID 는 DB에 실존해야 함 (없으면 행 skip)
  • ID, IssuedToMemberName/Email, CreatedAt 는 참고용 — Import 시 무시
  • 일시 형식: yyyy-MM-dd HH:mm:ss (KST)
  • 이미 등록된 코드는 자동 skip
결과: @Model.Total
목록
@Html.AntiForgeryToken()
@Html.AntiForgeryToken()
@Html.AntiForgeryToken()
@if (Model.List == null || Model.List.Count <= 0) { } else { @foreach (var row in Model.List) { var rowClass = row.StatusText switch { "사용 가능" => "table-success", "결제 진행 중" => "table-warning", "발급됨" => "table-info", "사용됨" => "table-secondary", "만료" => "table-danger", _ => "" }; // 체크박스 활성 조건: 액션(삭제/만료/복귀) 대상이 될 수 있는 상태만. Reserved/Used 는 제외. var selectable = row.StatusText is "사용 가능" or "발급됨" or "만료"; var statusKey = row.StatusText switch { "사용 가능" => "available", "발급됨" => "issued", "만료" => "expired", _ => "" }; } }
번호 코드 상태 회원ID 회원 별명 이메일 발급일 사용일 등록일
등록된 코드가 없습니다. 위에서 CSV Import 해주세요.
@if (selectable) { } else { } @row.Num @row.Code @row.StatusText @(row.IssuedToMemberID?.ToString() ?? "-") @(row.IssuedToMemberName ?? "-") @(row.IssuedToMemberEmail ?? "-") @(row.IssuedAt ?? "-") @(row.UsedAt ?? "-") @row.CreatedAt
@section Scripts { }