From 7c5c889c537987bef88c7a0f47222a15aec41af1 Mon Sep 17 00:00:00 2001 From: "HOME-LAPTOP\\kshkulev" Date: Wed, 19 Nov 2025 19:09:03 +0900 Subject: [PATCH] Add file upload popup dialog --- Hcs.WebApp/Components/Dialogs/AddUser.razor | 4 +- .../Components/Dialogs/StartParsing.razor | 80 +++++++++++++++++++ .../Components/Pages/FilesToParse.razor | 2 - .../Components/Pages/Objects/Houses.razor | 2 +- .../Components/Pages/Registry/Common.razor | 1 - .../Components/Pages/Registry/Private.razor | 1 - .../Components/Shared/SyncedPageBase.cs | 42 +++++++++- 7 files changed, 123 insertions(+), 9 deletions(-) create mode 100644 Hcs.WebApp/Components/Dialogs/StartParsing.razor diff --git a/Hcs.WebApp/Components/Dialogs/AddUser.razor b/Hcs.WebApp/Components/Dialogs/AddUser.razor index 01ad719..c436af5 100644 --- a/Hcs.WebApp/Components/Dialogs/AddUser.razor +++ b/Hcs.WebApp/Components/Dialogs/AddUser.razor @@ -46,8 +46,8 @@ - - + + diff --git a/Hcs.WebApp/Components/Dialogs/StartParsing.razor b/Hcs.WebApp/Components/Dialogs/StartParsing.razor new file mode 100644 index 0000000..37864de --- /dev/null +++ b/Hcs.WebApp/Components/Dialogs/StartParsing.razor @@ -0,0 +1,80 @@ +@using Hcs.WebApp.Services + +@inject DialogService DialogService +@inject FileToParseService FileToParseService + + + + + + @errorMessage + + + + + + + + + + +@code { + enum UploadState + { + Idle, + InProgress, + Completed + } + + RadzenUpload upload; + UploadState state; + int progress; + bool hasError; + string errorMessage; + + void Upload() + { + state = UploadState.InProgress; + hasError = false; + + upload.Upload(); + } + + void Close() + { + DialogService.Close(true); + } + + void OnProgress(UploadProgressArgs args) + { + progress = args.Progress; + } + + async Task OnCompleteAsync(UploadCompleteEventArgs args) + { + try + { + // TODO + } + catch (Exception e) + { + hasError = true; + errorMessage = e.Message; + } + + state = hasError ? UploadState.Idle : UploadState.Completed; + } +} diff --git a/Hcs.WebApp/Components/Pages/FilesToParse.razor b/Hcs.WebApp/Components/Pages/FilesToParse.razor index 3322a03..03d26db 100644 --- a/Hcs.WebApp/Components/Pages/FilesToParse.razor +++ b/Hcs.WebApp/Components/Pages/FilesToParse.razor @@ -46,8 +46,6 @@ protected override async Task OnAfterRenderAsync(bool firstRender) { - await base.OnAfterRenderAsync(firstRender); - if (firstRender) { ChangeState(PageState.Loading); diff --git a/Hcs.WebApp/Components/Pages/Objects/Houses.razor b/Hcs.WebApp/Components/Pages/Objects/Houses.razor index 669dd15..3b84fe0 100644 --- a/Hcs.WebApp/Components/Pages/Objects/Houses.razor +++ b/Hcs.WebApp/Components/Pages/Objects/Houses.razor @@ -23,7 +23,7 @@ - + diff --git a/Hcs.WebApp/Components/Pages/Registry/Common.razor b/Hcs.WebApp/Components/Pages/Registry/Common.razor index 57a71b0..eb9d081 100644 --- a/Hcs.WebApp/Components/Pages/Registry/Common.razor +++ b/Hcs.WebApp/Components/Pages/Registry/Common.razor @@ -10,7 +10,6 @@ @attribute [Authorize] @inject RegistryService RegistryService -@inject DialogService DialogService Общие справочники подсистемы НСИ diff --git a/Hcs.WebApp/Components/Pages/Registry/Private.razor b/Hcs.WebApp/Components/Pages/Registry/Private.razor index 43452b5..de1c92b 100644 --- a/Hcs.WebApp/Components/Pages/Registry/Private.razor +++ b/Hcs.WebApp/Components/Pages/Registry/Private.razor @@ -10,7 +10,6 @@ @attribute [Authorize] @inject RegistryService RegistryService -@inject DialogService DialogService Частные справочники подсистемы НСИ diff --git a/Hcs.WebApp/Components/Shared/SyncedPageBase.cs b/Hcs.WebApp/Components/Shared/SyncedPageBase.cs index 05ffd88..0365d47 100644 --- a/Hcs.WebApp/Components/Shared/SyncedPageBase.cs +++ b/Hcs.WebApp/Components/Shared/SyncedPageBase.cs @@ -1,8 +1,10 @@ using Hcs.WebApp.BackgroundServices; +using Hcs.WebApp.Components.Dialogs; using Hcs.WebApp.Data.Hcs; using Hcs.WebApp.Services; using Microsoft.AspNetCore.Components; using Microsoft.AspNetCore.Components.Authorization; +using Radzen; using System.Security.Claims; namespace Hcs.WebApp.Components.Shared @@ -12,6 +14,7 @@ namespace Hcs.WebApp.Components.Shared protected SyncedPageState state; protected IEnumerable data; protected string syncButtonText = "..."; + protected string parseButtonText = "..."; protected abstract Campaign.CampaignType CampaignType { get; } @@ -24,6 +27,9 @@ namespace Hcs.WebApp.Components.Shared [Inject] private CampaignManagementState CampaignManagementState { get; set; } + [Inject] + protected DialogService DialogService { get; set; } + protected override async Task OnAfterRenderAsync(bool firstRender) { if (firstRender) @@ -78,31 +84,63 @@ namespace Hcs.WebApp.Components.Shared } } + protected async Task ParseDataAsync() + { + if (state == SyncedPageState.SyncWaiting) return; + + ChangeState(SyncedPageState.SyncWaiting); + + if (await HeadquartersService.HasActiveCampaignAsync(CampaignType)) + { + ChangeState(SyncedPageState.Idle); + } + else + { + await DialogService.OpenAsync( + "Отправка файла", + null, + new DialogOptions() + { + Width = "600px", + CloseDialogOnEsc = false, + CloseDialogOnOverlayClick = false, + ShowClose = false + }); + + //// TODO: Use user id + //var campaign = await HeadquartersService.InitiateCampaignAsync(CampaignType, ""); + //CampaignManagementState.EnqueueCampaign(campaign); + } + } + private void ChangeState(SyncedPageState state) { if (this.state == state) return; this.state = state; - SetSyncButtonText(); + SetButtonsText(); StateHasChanged(); } - private void SetSyncButtonText() + private void SetButtonsText() { switch (state) { case SyncedPageState.Init: syncButtonText = "..."; + parseButtonText = "..."; break; case SyncedPageState.Loading: case SyncedPageState.Idle: syncButtonText = "Синхронизировать"; + parseButtonText = "Спарсить"; break; case SyncedPageState.SyncWaiting: syncButtonText = "Идет синхронизация..."; + parseButtonText = "Идет парсинг..."; break; } }