@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 IJSRuntime JS @(Id.HasValue ? "공지 수정" : "공지 등록")
Homepage

@(Id.HasValue ? "공지 수정" : "공지 등록")

@code { [Parameter] public int? Id { get; set; } private bool isSaving; private DateTime? startsAtDate; private DateTime? endsAtDate; private AnnouncementDto model = new(); private string StartsAtText { get => startsAtDate?.ToString("yyyy-MM-dd") ?? ""; set => startsAtDate = DateTime.TryParse(value, out var dt) ? dt : null; } private string EndsAtText { get => endsAtDate?.ToString("yyyy-MM-dd") ?? ""; set => endsAtDate = DateTime.TryParse(value, out var dt) ? dt : null; } 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() { 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; var result = Id.HasValue ? await AnnouncementClient.UpdateAsync(Id.Value, model) : await AnnouncementClient.CreateAsync(model); await JS.InvokeVoidAsync("alert", result != null ? "공지사항이 저장되었습니다." : "저장 실패"); Navigation.NavigateTo("/taxbaik/admin/announcements"); } catch (Exception ex) { await JS.InvokeVoidAsync("alert", $"저장 실패: {ex.Message}"); } finally { isSaving = false; } } }