3153d3c095
## 변경사항
- Program.cs: app.UsePathBase('/taxbaik') 제거
- Blazor 컴포넌트: /taxbaik/admin/* → ./* 상대 경로로 변경
- 모든 내부 링크 절대 경로 → 상대 경로로 전환
## 현황
✅ 빌드: 0 오류, 0 경고
✅ 헬스체크: HTTP 200
✅ 로그인 페이지: 로드 정상
❌ 로그인 API: 400 오류 (DB 오류 - 조사 중)
## 다음 단계
- LoginEndpoint에서 발생하는 DB 오류 원인 파악 필요
- Razor Pages 절대 경로도 상대 경로로 변경 (보류 중)
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
131 lines
4.1 KiB
Plaintext
131 lines
4.1 KiB
Plaintext
@page "/admin/companies/{id:int}/edit"
|
|
@rendermode @(new InteractiveWebAssemblyRenderMode(prerender: false))
|
|
@attribute [Authorize]
|
|
@using TaxBaik.WasmClient.Components.Admin.Forms
|
|
@inject IApiClient ApiClient
|
|
@inject NavigationManager Navigation
|
|
@inject ISnackbar Snackbar
|
|
@inject IDialogService DialogService
|
|
|
|
<PageTitle>고객사 수정</PageTitle>
|
|
|
|
<AdminPageHeader Title="고객사 수정" Eyebrow="Settings" Subtitle="고객사 정보를 수정합니다.">
|
|
<MudButton Variant="Variant.Outlined" StartIcon="@Icons.Material.Filled.Close" @onclick="GoBack">취소</MudButton>
|
|
</AdminPageHeader>
|
|
|
|
<AdminEditorPanel Loading="@isLoading" SkeletonContent="@CompanySkeleton">
|
|
@if (formModel == null)
|
|
{
|
|
<MudAlert Severity="Severity.Error" Class="mt-4">고객사를 찾을 수 없습니다.</MudAlert>
|
|
}
|
|
else
|
|
{
|
|
<MudPaper Class="pa-4 mt-4" Elevation="1">
|
|
<CompanyForm ButtonText="수정" InitialData="formModel" OnSubmit="HandleUpdate" OnCancel="GoBack" />
|
|
|
|
<MudDivider Class="my-4" />
|
|
|
|
<MudButton Variant="Variant.Outlined" Color="Color.Error" @onclick="DeleteCompany" Class="mt-2">
|
|
고객사 삭제
|
|
</MudButton>
|
|
</MudPaper>
|
|
}
|
|
</AdminEditorPanel>
|
|
|
|
@code {
|
|
[Parameter]
|
|
public int Id { get; set; }
|
|
|
|
private CompanyFormModel? formModel;
|
|
private bool isLoading = true;
|
|
|
|
private RenderFragment CompanySkeleton => builder =>
|
|
{
|
|
builder.OpenComponent<AdminSkeletonRows>(0);
|
|
builder.AddAttribute(1, "Rows", 6);
|
|
builder.AddAttribute(2, "Columns", 3);
|
|
builder.CloseComponent();
|
|
};
|
|
|
|
protected override async Task OnInitializedAsync()
|
|
{
|
|
try
|
|
{
|
|
var company = await ApiClient.GetAsync<dynamic>($"company/{Id}");
|
|
IDictionary<string, object>? dict = company as IDictionary<string, object>;
|
|
if (dict != null)
|
|
{
|
|
formModel = new CompanyFormModel
|
|
{
|
|
CompanyCode = (string)dict["companyCode"],
|
|
CompanyName = (string)dict["companyName"],
|
|
ContactPerson = (string?)dict["contactPerson"],
|
|
Phone = (string?)dict["phone"],
|
|
Email = (string?)dict["email"],
|
|
Memo = (string?)dict["memo"],
|
|
IsActive = (bool)(dynamic)dict["isActive"]
|
|
};
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Snackbar.Add($"고객사 로드 실패: {ex.Message}", Severity.Error);
|
|
}
|
|
finally
|
|
{
|
|
isLoading = false;
|
|
}
|
|
}
|
|
|
|
private void GoBack()
|
|
{
|
|
Navigation.NavigateTo("./companies");
|
|
}
|
|
|
|
private async Task HandleUpdate(CompanyFormModel model)
|
|
{
|
|
try
|
|
{
|
|
await ApiClient.PutAsync<object>($"company/{Id}", new
|
|
{
|
|
companyCode = model.CompanyCode,
|
|
companyName = model.CompanyName,
|
|
contactPerson = model.ContactPerson,
|
|
phone = model.Phone,
|
|
email = model.Email,
|
|
memo = model.Memo,
|
|
isActive = model.IsActive
|
|
});
|
|
|
|
Snackbar.Add("고객사가 수정되었습니다.", Severity.Success);
|
|
Navigation.NavigateTo("./companies");
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Snackbar.Add($"수정 실패: {ex.Message}", Severity.Error);
|
|
}
|
|
}
|
|
|
|
private async Task DeleteCompany()
|
|
{
|
|
var result = await DialogService.ShowMessageBox(
|
|
"고객사 삭제",
|
|
"정말 삭제하시겠습니까? 이 작업은 취소할 수 없습니다.",
|
|
"삭제", "취소");
|
|
|
|
if (result != true)
|
|
return;
|
|
|
|
try
|
|
{
|
|
await ApiClient.DeleteAsync($"company/{Id}");
|
|
Snackbar.Add("고객사가 삭제되었습니다.", Severity.Success);
|
|
Navigation.NavigateTo("./companies");
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Snackbar.Add($"삭제 실패: {ex.Message}", Severity.Error);
|
|
}
|
|
}
|
|
}
|