@page "/admin/announcements/create" @page "/admin/announcements/{Id:int}/edit" @attribute [Authorize] @using TaxBaik.Application.DTOs @using TaxBaik.Web.Services @inject IAnnouncementBrowserClient AnnouncementClient @inject NavigationManager Navigation @inject ISnackbar Snackbar @(Id.HasValue ? "공지 수정" : "공지 등록")
Homepage @(Id.HasValue ? "공지 수정" : "공지 등록")
일반 (파란색) 배너 (주황색) — 중요 이벤트 긴급 (빨간색) — 마감 임박
@(isSaving ? "저장 중..." : "저장") 취소
@code { [Parameter] public int? Id { get; set; } private MudForm? form; private bool isSaving; private DateTime? startsAtDate; private DateTime? endsAtDate; private AnnouncementDto model = new(); protected override async Task OnInitializedAsync() { if (Id.HasValue) { try { var entity = await AnnouncementClient.GetByIdAsync(Id.Value); if (entity is null) { Navigation.NavigateTo("/taxbaik/admin/announcements"); return; } model = new AnnouncementDto { Id = entity.Id, Title = entity.Title, Content = entity.Content, DisplayType = entity.DisplayType, IsActive = entity.IsActive, SortOrder = entity.SortOrder }; startsAtDate = entity.StartsAt?.ToLocalTime(); endsAtDate = entity.EndsAt?.ToLocalTime(); } catch { Navigation.NavigateTo("/taxbaik/admin/announcements"); } } } private async Task SaveAsync() { if (form is null) return; await form.Validate(); if (!form.IsValid) return; isSaving = true; try { model.StartsAt = startsAtDate.HasValue ? DateTime.SpecifyKind(startsAtDate.Value.Date, DateTimeKind.Local).ToUniversalTime() : null; model.EndsAt = endsAtDate.HasValue ? DateTime.SpecifyKind(endsAtDate.Value.Date.AddDays(1).AddSeconds(-1), DateTimeKind.Local).ToUniversalTime() : null; if (Id.HasValue) { var result = await AnnouncementClient.UpdateAsync(Id.Value, model); if (result != null) Snackbar.Add("공지사항이 저장되었습니다.", Severity.Success); else Snackbar.Add("저장 실패", Severity.Error); } else { var result = await AnnouncementClient.CreateAsync(model); if (result != null) Snackbar.Add("공지사항이 저장되었습니다.", Severity.Success); else Snackbar.Add("저장 실패", Severity.Error); } Navigation.NavigateTo("/taxbaik/admin/announcements"); } catch (Exception ex) { Snackbar.Add($"저장 실패: {ex.Message}", Severity.Error); } finally { isSaving = false; } } }