@page "/admin/common-codes" @rendermode InteractiveWebAssembly @using TaxBaik.Web.Services.AdminClients @using TaxBaik.Domain.Entities @attribute [Authorize] @inject ICommonCodeBrowserClient CommonCodeClient @inject ISnackbar Snackbar 공통관리 @code { private List groups = []; private List codes = []; private string selectedGroup = ""; private bool isLoading = true; private CommonCode editModel = new(); private bool isCreateMode = true; protected override async Task OnInitializedAsync() { groups = await CommonCodeClient.GetGroupsAsync(); selectedGroup = groups.FirstOrDefault() ?? ""; await LoadCodes(); PrepareCreate(); } private async Task OnGroupChanged(string value) { selectedGroup = value; await LoadCodes(); PrepareCreate(); } private async Task LoadCodes() { isLoading = true; codes = string.IsNullOrWhiteSpace(selectedGroup) ? [] : await CommonCodeClient.GetByGroupAsync(selectedGroup); isLoading = false; } private void PrepareCreate() { isCreateMode = true; editModel = new CommonCode { CodeGroup = selectedGroup, IsActive = true }; } private void EditCode(CommonCode code) { isCreateMode = false; editModel = new CommonCode { CodeGroup = code.CodeGroup, CodeValue = code.CodeValue, CodeName = code.CodeName, SortOrder = code.SortOrder, IsActive = code.IsActive }; } private async Task SaveCode() { editModel.CodeGroup = editModel.CodeGroup?.Trim() ?? string.Empty; editModel.CodeValue = editModel.CodeValue?.Trim() ?? string.Empty; editModel.CodeName = editModel.CodeName?.Trim() ?? string.Empty; if (string.IsNullOrWhiteSpace(editModel.CodeGroup) || string.IsNullOrWhiteSpace(editModel.CodeValue) || string.IsNullOrWhiteSpace(editModel.CodeName)) { Snackbar.Add("그룹, 값, 이름은 모두 입력해야 합니다.", Severity.Error); return; } if (editModel.CodeGroup.Any(char.IsWhiteSpace)) { Snackbar.Add("code_group에는 공백을 넣을 수 없습니다.", Severity.Error); return; } if (editModel.CodeValue.Any(char.IsWhiteSpace)) { Snackbar.Add("code_value에는 공백을 넣을 수 없습니다.", Severity.Error); return; } if (!await CommonCodeClient.UpsertAsync(editModel)) { Snackbar.Add("저장 실패", Severity.Error); return; } Snackbar.Add("저장되었습니다.", Severity.Success); await LoadCodes(); PrepareCreate(); } private async Task DeleteCode(CommonCode code) { if (!await CommonCodeClient.DeleteAsync(code.CodeGroup, code.CodeValue)) { Snackbar.Add("삭제 실패", Severity.Error); return; } Snackbar.Add("삭제되었습니다.", Severity.Success); await LoadCodes(); PrepareCreate(); } }