@page "/admin/companies" @attribute [Authorize] @inject IApiClient ApiClient @inject ISnackbar Snackbar 고객사 관리 Settings 고객사 관리 등록된 고객사를 관리하고 새로운 고객사를 추가합니다. 새 고객사 등록 @($"전체 고객사 {totalCompanies}개") 페이지 @currentPage / @totalPages 수정 이전 다음 @code { private List companies = []; private bool isLoading = true; private int currentPage = 1; private int totalPages = 1; private int totalCompanies = 0; private const int PageSize = 20; protected override async Task OnInitializedAsync() { await LoadData(); } private async Task LoadData() { try { isLoading = true; var response = await ApiClient.GetAsync($"company?page={currentPage}&pageSize={PageSize}"); IDictionary? dict = response as IDictionary; if (dict != null) { totalCompanies = (int)(dynamic)dict["total"]; totalPages = (totalCompanies + PageSize - 1) / PageSize; if (dict["data"] is System.Collections.IEnumerable dataList) { companies = new List(); foreach (var item in dataList) { if (item is IDictionary companyDict) { companies.Add(new CompanyDto { Id = (int)(dynamic)companyDict["id"], CompanyCode = (string)companyDict["companyCode"], CompanyName = (string)companyDict["companyName"], ContactPerson = (string?)companyDict["contactPerson"], Phone = (string?)companyDict["phone"], Email = (string?)companyDict["email"], IsActive = (bool)(dynamic)companyDict["isActive"], CreatedAt = DateTime.Parse(companyDict["createdAt"].ToString()!) }); } } } } } catch (Exception ex) { Snackbar.Add($"고객사 로드 실패: {ex.Message}", Severity.Error); } finally { isLoading = false; } } private async Task NextPage() { currentPage++; await LoadData(); } private async Task PreviousPage() { currentPage = Math.Max(1, currentPage - 1); await LoadData(); } private class CompanyDto { public int Id { get; set; } public string CompanyCode { get; set; } = ""; public string CompanyName { get; set; } = ""; public string? ContactPerson { get; set; } public string? Phone { get; set; } public string? Email { get; set; } public bool IsActive { get; set; } public DateTime CreatedAt { get; set; } } }