8202c3278b
TaxBaik CI/CD / build-and-deploy (push) Failing after 2m17s
Phase 8: Complete WebAssembly 렌더 모드 전환 (정공법) Migration Summary: - ALL Admin components → TaxBaik.Web.Client - Routes.razor, Pages/*, Layout/*, Shared/*, Forms/* - App.razor → TaxBaik.WasmClient (호스트 컴포넌트) - Shared utilities → TaxBaik.Application.Utils Architecture: ✅ App.razor: TaxBaik.WasmClient (WebAssembly, 호스트) ✅ Routes + Pages: TaxBaik.WasmClient (WebAssembly) ✅ Layout + Shared + Forms: TaxBaik.WasmClient (WebAssembly) ✅ Services: TaxBaik.Web (API-First) Key Changes: - Namespaces: TaxBaik.Web.Components.Admin → TaxBaik.WasmClient.Components.Admin - Shared utilities: TaxBaik.Application.Utils (single source of truth) - Program.cs: MapRazorComponents<TaxBaik.WasmClient.Components.Admin.App>() - _Imports.razor: Components/Admin 폴더에 재구성 Build Status: ✅ 0 errors, 0 warnings Benefits: - Stateless server (no Circuit memory) - Client-side rendering (WebAssembly) - Unlimited concurrent users (horizontal scaling) - ERP-ready architecture Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
73 lines
3.5 KiB
Plaintext
73 lines
3.5 KiB
Plaintext
<AdminDataPanel Loading="@Loading">
|
|
<AdminFormSection Title="코드 목록" Description="그룹별 공통코드와 상태를 관리합니다." CssClass="mb-4">
|
|
<MudTable Items="@Codes" Dense="true" Hover="true">
|
|
<HeaderContent>
|
|
<MudTh>그룹</MudTh>
|
|
<MudTh>값</MudTh>
|
|
<MudTh>이름</MudTh>
|
|
<MudTh>순서</MudTh>
|
|
<MudTh>상태</MudTh>
|
|
<MudTh>작업</MudTh>
|
|
</HeaderContent>
|
|
<RowTemplate>
|
|
<MudTd>@context.CodeGroup</MudTd>
|
|
<MudTd>@context.CodeValue</MudTd>
|
|
<MudTd>@context.CodeName</MudTd>
|
|
<MudTd>@context.SortOrder</MudTd>
|
|
<MudTd>@(context.IsActive ? "활성" : "비활성")</MudTd>
|
|
<MudTd>
|
|
<MudButton Size="Size.Small" Variant="Variant.Text" OnClick="@(async () => await InvokeEditAsync(context))">수정</MudButton>
|
|
<MudButton Size="Size.Small" Variant="Variant.Text" Color="Color.Error" OnClick="@(async () => await InvokeDeleteAsync(context))">삭제</MudButton>
|
|
</MudTd>
|
|
</RowTemplate>
|
|
</MudTable>
|
|
</AdminFormSection>
|
|
|
|
<MudDivider Class="my-4" />
|
|
|
|
<AdminFormSection Title="코드 편집" Description="공백 없는 값과 일관된 이름만 허용합니다.">
|
|
<MudForm>
|
|
<MudTextField @bind-Value="EditModel.CodeGroup" Label="그룹" Variant="Variant.Outlined" FullWidth="true" Required="true" Disabled="@(!IsCreateMode)" MaxLength="80" Class="mb-3" />
|
|
<MudTextField @bind-Value="EditModel.CodeValue" Label="값" Variant="Variant.Outlined" FullWidth="true" Required="true" Disabled="@(!IsCreateMode)" MaxLength="120" Class="mb-3" />
|
|
<MudTextField @bind-Value="EditModel.CodeName" Label="이름" Variant="Variant.Outlined" FullWidth="true" Required="true" MaxLength="200" Class="mb-3" />
|
|
<MudNumericField T="int" @bind-Value="EditModel.SortOrder" Label="순서" Variant="Variant.Outlined" FullWidth="true" Class="mb-3" />
|
|
<MudSwitch @bind-Checked="EditModel.IsActive" Color="Color.Primary">활성</MudSwitch>
|
|
<div class="d-flex gap-2 mt-4">
|
|
<MudButton Variant="Variant.Filled" Color="Color.Primary" OnClick="OnSaveRequested">저장</MudButton>
|
|
<MudButton Variant="Variant.Outlined" OnClick="OnResetRequested">초기화</MudButton>
|
|
</div>
|
|
</MudForm>
|
|
</AdminFormSection>
|
|
</AdminDataPanel>
|
|
|
|
@code {
|
|
[Parameter]
|
|
public bool Loading { get; set; }
|
|
|
|
[Parameter, EditorRequired]
|
|
public IReadOnlyList<CommonCode> Codes { get; set; } = [];
|
|
|
|
[Parameter, EditorRequired]
|
|
public CommonCode EditModel { get; set; } = new();
|
|
|
|
[Parameter]
|
|
public bool IsCreateMode { get; set; }
|
|
|
|
[Parameter, EditorRequired]
|
|
public EventCallback<CommonCode> EditRequested { get; set; }
|
|
|
|
[Parameter, EditorRequired]
|
|
public EventCallback<CommonCode> DeleteRequested { get; set; }
|
|
|
|
[Parameter, EditorRequired]
|
|
public EventCallback SaveRequested { get; set; }
|
|
|
|
[Parameter, EditorRequired]
|
|
public EventCallback ResetRequested { get; set; }
|
|
|
|
private Task InvokeEditAsync(CommonCode code) => EditRequested.InvokeAsync(code);
|
|
private Task InvokeDeleteAsync(CommonCode code) => DeleteRequested.InvokeAsync(code);
|
|
private Task OnSaveRequested() => SaveRequested.InvokeAsync();
|
|
private Task OnResetRequested() => ResetRequested.InvokeAsync();
|
|
}
|