HKC_Blazor/MasaBlazorApp3/Pages/DrugList.razor

347 lines
16 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

@page "/stock/drug"
<style>
.rz-custom-header {
width: 100%;
}
</style>
<div class="container-fluid">
<div class="row">
<div class="col-12 mb-4">
<form onsubmit="@(() => grid.Reload())">
<RadzenFieldset Text="@myText.Search">
<RadzenStack Orientation="Orientation.Horizontal" Gap="1rem">
<RadzenRow AlignItems="AlignItems.Center">
<RadzenColumn Size="4">
<RadzenLabel Text="@myText.DrugCode" Component="DrugId" />
</RadzenColumn>
<RadzenColumn Size="8">
<RadzenTextBox @bind-Value="DrugId" Style="width: 100%;" Name="DrugId"></RadzenTextBox>
</RadzenColumn>
</RadzenRow>
<RadzenRow AlignItems="AlignItems.Center">
<RadzenColumn Size="4">
<RadzenLabel Text="@myText.DrugName" Component="DrugName" />
</RadzenColumn>
<RadzenColumn Size="8">
<RadzenTextBox @bind-Value="DrugName" Style="width: 100%;" Name="DrugName"></RadzenTextBox>
</RadzenColumn>
</RadzenRow>
<RadzenRow AlignItems="AlignItems.Center">
<RadzenColumn Size="12">
<RadzenButton Size="ButtonSize.Large" ButtonType="ButtonType.Submit" IsBusy="isLoading" Icon="search" Text="@myText.Search" />
<RadzenButton Size="ButtonSize.Large" Click="reloadGrid" IsBusy="isLoading" Icon="refresh" Text="@myText.Restore" ButtonStyle="ButtonStyle.Warning" />
<RadzenButton Size="ButtonSize.Large" ButtonStyle="ButtonStyle.Success" Icon="add_circle_outline" Click="@InsertDrugRow" Text="@myText.AddDrug" />
</RadzenColumn>
</RadzenRow>
</RadzenStack>
</RadzenFieldset>
</form>
</div>
<div class="col-6 mb-4">
<RadzenDataGrid @ref="grid"
LoadData="@LoadData"
@bind-Value="@SelectedDrugs"
IsLoading="@isLoading"
Count="@count"
EmptyText="@myText.NoDate"
Data="@_forecasts"
AllowColumnResize="true" AllowAlternatingRows="false"
SelectionMode="DataGridSelectionMode.Single" RowUpdate="@((DrugInfo di)=>{OnDrugUpdateRow(di);})" RowCreate="@((DrugInfo di)=>{OnDrugCreateRow(di);})"
AllowPaging="true" PageSize="10" PagerHorizontalAlign="HorizontalAlign.Left" ColumnWidth="100px" ShowPagingSummary="true" PagingSummaryFormat="{0}/{1} <20><>{2}<7D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>">
<Columns>
<RadzenDataGridColumn Frozen="true" Title="@myText.DrugCode" Property="DrugId">
<EditTemplate Context="drugInfo">
<RadzenTextBox Name="DrugId" @bind-Value="drugInfo.DrugId" Style="width:100%; display: block;" />
<RadzenRequiredValidator Text="@myText.InputCode" Component="DrugId" Popup="true" />
</EditTemplate>
</RadzenDataGridColumn>
<RadzenDataGridColumn Width="200px" Title="@myText.DrugName" Property="DrugName">
<EditTemplate Context="drugInfo">
<RadzenTextBox Name="DrugName" @bind-Value="drugInfo.DrugName" Style="width:100%;display:block;" />
<RadzenRequiredValidator Text="@myText.InputDrugName" Component="DrugName" Popup="true" />
</EditTemplate>
</RadzenDataGridColumn>
<RadzenDataGridColumn Title="@myText.Spec" Property="DrugSpec">
<EditTemplate Context="drugInfo">
<RadzenTextBox Name="DrugSpec" @bind-Value="drugInfo.DrugSpec" Style="width:100%;display:block;" />
<RadzenRequiredValidator Text="@myText.InputDrugSpec" Component="DrugSpec" Popup="true" />
</EditTemplate>
</RadzenDataGridColumn>
<RadzenDataGridColumn Width="200px" Title="@myText.Factory" Property="Manufactory">
<EditTemplate Context="drugInfo">
<RadzenTextBox Name="Manufactory" @bind-Value="drugInfo.Manufactory" Style="width:100%;display:block;" />
<RadzenRequiredValidator Text="@myText.InputDrugFactory" Component="Manufactory" Popup="true"/>
</EditTemplate>
</RadzenDataGridColumn>
<RadzenDataGridColumn Context="drugInfo" Title="@myText.Operate" Filterable="false" Sortable="false" TextAlign="TextAlign.Left" Frozen="true" FrozenPosition="FrozenColumnPosition.Right">
<Template Context="drugInfo">
<RadzenButton Icon="edit" ButtonStyle="ButtonStyle.Light" Variant="Variant.Flat" Size="ButtonSize.Medium" Click="@(args => EditDrugRow(drugInfo))" @onclick:stopPropagation="true">
</RadzenButton>
<RadzenButton ButtonStyle="ButtonStyle.Danger" Icon="delete" Variant="Variant.Flat" Shade="Shade.Lighter" Size="ButtonSize.Medium" class="my-1 ms-1" Click="@(args => DeleteDrugRow(drugInfo))" @onclick:stopPropagation="true">
</RadzenButton>
</Template>
<EditTemplate Context="drugInfo">
<RadzenButton Icon="check" ButtonStyle="ButtonStyle.Success" Variant="Variant.Flat" Size="ButtonSize.Medium" Click="@((args) => SaveDrugRow(drugInfo))" aria-label="Save">
</RadzenButton>
<RadzenButton Icon="close" ButtonStyle="ButtonStyle.Light" Variant="Variant.Flat" Size="ButtonSize.Medium" class="my-1 ms-1" Click="@((args) => CancelDrugEdit(drugInfo))" aria-label="Cancel">
</RadzenButton>
<RadzenButton ButtonStyle="ButtonStyle.Danger" Icon="delete" Variant="Variant.Flat" Shade="Shade.Lighter" Size="ButtonSize.Medium" class="my-1 ms-1" Click="@(args => DeleteDrugRow(drugInfo))" aria-label="Delete">
</RadzenButton>
</EditTemplate>
</RadzenDataGridColumn>
</Columns>
</RadzenDataGrid>
</div>
<div class="col-6 mb-4">
@* <RadzenCard Style="margin-bottom:20px">
<20><><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
</RadzenCard> *@
@if (SelectedDrugs.Count > 0)
{
<RadzenDataGrid @ref="ManusGrid" EmptyText="<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"
Data="@(SelectedDrugs.FirstOrDefault()?.Manus)"
RowUpdate="@((DrugManuNo dm) => { OnUpdateRow(dm); })" RowCreate="@((DrugManuNo dm) => { OnCreateRow(dm); })"
AllowColumnResize="true" AllowAlternatingRows="false">
@* <HeaderTemplate>
<RadzenRow JustifyContent="JustifyContent.End" AlignItems="AlignItems.Center">
<RadzenButton Icon="download" Text="<22><><EFBFBD><EFBFBD>" Variant="Variant.Outlined" />
</RadzenRow>
</HeaderTemplate> *@
<Columns>
<RadzenDataGridColumn Title="<22><><EFBFBD><EFBFBD>" Property="index">
<Template Context="data">
@(SelectedDrugs.FirstOrDefault()?.Manus.IndexOf(data) + 1)
</Template>
</RadzenDataGridColumn>
<RadzenDataGridColumn Title="<22><><EFBFBD><EFBFBD>" Property="ManuNo">
<EditTemplate Context="drugManuNo">
<RadzenTextBox Name="ManuNo" @bind-Value="drugManuNo.ManuNo" Style="width:100%; display: block;" />
<RadzenRequiredValidator Text="<22><><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD>" Component="ManuNo" Popup="true" />
</EditTemplate>
</RadzenDataGridColumn>
<RadzenDataGridColumn Title="Ч<><D0A7>" Property="EffDate">
<EditTemplate Context="drugManuNo">
<RadzenDatePicker DateFormat="yyyy-MM-dd" @bind-Value="drugManuNo.EffDate" Style="width: 100%;" Name="EffDate" />
<RadzenRequiredValidator Text="<22><><EFBFBD><EFBFBD>дЧ<D0B4><D0A7>" Component="EffDate" Popup="true" />
</EditTemplate>
</RadzenDataGridColumn>
<RadzenDataGridColumn Context="drugManuNo" Title="<22><><EFBFBD><EFBFBD>" Filterable="false" Sortable="false" TextAlign="TextAlign.Left" Frozen="true" FrozenPosition="FrozenColumnPosition.Right">
<Template Context="drugManuNo">
<RadzenButton Icon="edit" ButtonStyle="ButtonStyle.Light" Variant="Variant.Flat" Size="ButtonSize.Medium" Click="@(args => EditRow(drugManuNo))" @onclick:stopPropagation="true">
</RadzenButton>
<RadzenButton ButtonStyle="ButtonStyle.Danger" Icon="delete" Variant="Variant.Flat" Shade="Shade.Lighter" Size="ButtonSize.Medium" class="my-1 ms-1" Click="@(args => DeleteRow(drugManuNo))" @onclick:stopPropagation="true">
</RadzenButton>
</Template>
<EditTemplate Context="drugManuNo">
<RadzenButton Icon="check" ButtonStyle="ButtonStyle.Success" Variant="Variant.Flat" Size="ButtonSize.Medium" Click="@((args) => SaveRow(drugManuNo))" aria-label="Save">
</RadzenButton>
<RadzenButton Icon="close" ButtonStyle="ButtonStyle.Light" Variant="Variant.Flat" Size="ButtonSize.Medium" class="my-1 ms-1" Click="@((args) => CancelEdit(drugManuNo))" aria-label="Cancel">
</RadzenButton>
<RadzenButton ButtonStyle="ButtonStyle.Danger" Icon="delete" Variant="Variant.Flat" Shade="Shade.Lighter" Size="ButtonSize.Medium" class="my-1 ms-1" Click="@(args => DeleteRow(drugManuNo))" aria-label="Delete">
</RadzenButton>
</EditTemplate>
</RadzenDataGridColumn>
</Columns>
</RadzenDataGrid>
<div style="margin-top:5px">
<RadzenButton Size="ButtonSize.Medium" ButtonStyle="ButtonStyle.Success" Icon="add_circle_outline" Click="@InsertRow" Text="<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>" />
</div>
}
</div>
</div>
</div>
@code {
@inject IDrugInfoDao drugInfoDao;
@inject DialogService dialogService;
@inject IDrugManuNoDao drugManuNoDao;
@inject Toolbelt.Blazor.I18nText.I18nText I18nText;
private I18nText.local myText = new I18nText.local();
RadzenDataGrid<DrugInfo> grid;
RadzenDataGrid<DrugManuNo> ManusGrid;
List<DrugManuNo> manuNoToInsert = new List<DrugManuNo>();
List<DrugManuNo> manuNoToUpdate = new List<DrugManuNo>();
bool isLoading;
int count;
private IEnumerable<DrugInfo>? _forecasts;
IList<DrugInfo> SelectedDrugs { get; set; } = new List<DrugInfo>();
string DrugId;
string DrugName;
async Task LoadData(LoadDataArgs args)
{
isLoading = true;
var result = await drugInfoDao.GetAllDrug(DrugId, DrugName, args.Top, args.Skip);
// Update the Data property
_forecasts = result.Desserts;
count = result.TotalDesserts;
SelectedDrugs = new List<DrugInfo>() { _forecasts.FirstOrDefault() };
isLoading = false;
}
async Task reloadGrid()
{
DrugId = String.Empty;
DrugName = String.Empty;
await grid.Reload();
}
void Reset()
{
manuNoToInsert.Clear();
manuNoToUpdate.Clear();
}
void Reset(DrugManuNo drugManuNo)
{
manuNoToInsert.Remove(drugManuNo);
manuNoToUpdate.Remove(drugManuNo);
}
/// <20><><EFBFBD><EFBFBD>ҩƷ
async Task InsertDrugRow()
{
var drugInfo = new DrugInfo();
drugInfo.Manus.Add(new DrugManuNo());
SelectedDrugs.Add(drugInfo);
await grid.InsertRow(drugInfo);
}
// //<2F><><EFBFBD><EFBFBD>ҩƷ<D2A9><C6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
async Task OnDrugUpdateRow(DrugInfo drugInfo)
{
// <20><><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD><EFBFBD><EFBFBD>ҩƷ
drugInfoDao.UpdateDrugInfo(drugInfo);
grid.Reload();
}
//<2F><><EFBFBD><EFBFBD>ҩƷ<D2A9><C6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
async Task OnDrugCreateRow(DrugInfo drugInfo)
{
// <20><><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD><EFBFBD><EFBFBD>ҩƷ
drugInfoDao.AddDrugInfo(drugInfo);
grid.Reload();
}
async Task EditDrugRow(DrugInfo drugInfo)
{
drugInfoDao.UpdateDrugInfo(drugInfo);
await grid.EditRow(drugInfo);
}
async Task SaveDrugRow(DrugInfo drugInfo)
{
await grid.UpdateRow(drugInfo);
}
void CancelDrugEdit(DrugInfo drugInfo)
{
Reset();
grid.CancelEditRow(drugInfo);
grid.Reload();
}
async Task DeleteDrugRow(DrugInfo drugInfo)
{
Reset();
if(!string.IsNullOrEmpty(drugInfo.DrugId))
{
//<2F><><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE>
var b = await dialogService.OpenAsync<ConfirmDialog>(
$"ɾ<><C9BE>ȷ<EFBFBD><C8B7>",
new Dictionary<string, object>() { { "confirmInfo", "ȷ<><C8B7>Ҫɾ<D2AA><C9BE>ҩƷ<D2A9><C6B7>"+drugInfo.DrugName+"<22><><EFBFBD><EFBFBD>" } },
new DialogOptions() { Width = "45vw", Resizable = true, Draggable = true, ShowClose = false });
if(b)
{
// <20><><EFBFBD>ݿ<EFBFBD>ɾ<EFBFBD><C9BE>
drugInfoDao.DeleteDrugInfo(drugInfo.DrugId);
}
grid.Reload();
}
}
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
async Task InsertRow()
{
var drugManuNo = new Pojo.DrugManuNo()
{
Id = Guid.NewGuid().ToString(),
DrugId = SelectedDrugs.FirstOrDefault().DrugId
};
SelectedDrugs.FirstOrDefault().Manus.Add(drugManuNo);
await ManusGrid.InsertRow(drugManuNo);
}
async Task EditRow(DrugManuNo drugManuNo)
{
Reset();
manuNoToUpdate.Add(drugManuNo);
await ManusGrid.EditRow(drugManuNo);
}
async Task SaveRow(DrugManuNo drugManuNo)
{
await ManusGrid.UpdateRow(drugManuNo);
}
void CancelEdit(DrugManuNo drugManuNo)
{
Reset(drugManuNo);
SelectedDrugs.FirstOrDefault().Manus.Remove(drugManuNo);
ManusGrid.CancelEditRow(drugManuNo);
ManusGrid.Reload();
}
async Task DeleteRow(DrugManuNo drugManuNo)
{
Reset(drugManuNo);
if (SelectedDrugs.FirstOrDefault().Manus.Contains(drugManuNo))
{
//<2F><><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE>
var b = await dialogService.OpenAsync<ConfirmDialog>(
$"ȷ<><C8B7>ɾ<EFBFBD><C9BE>",
new Dictionary<string, object>() { { "confirmInfo", "ȷ<><C8B7>Ҫɾ<D2AA><C9BE><EFBFBD><EFBFBD><EFBFBD>Σ<EFBFBD>"+drugManuNo.ManuNo+"<22><><EFBFBD><EFBFBD>" } },
new DialogOptions() { Width = "45vw", Resizable = true, Draggable = true, ShowClose = false }
);
if(b)
{
SelectedDrugs.FirstOrDefault().Manus.Remove(drugManuNo);
// <20><><EFBFBD>ݿ<EFBFBD>ɾ<EFBFBD><C9BE>
drugManuNoDao.DeleteDrugManuNo(drugManuNo.Id);
await ManusGrid.Reload();
}
}
else
{
ManusGrid.CancelEditRow(drugManuNo);
await ManusGrid.Reload();
}
}
void OnUpdateRow(DrugManuNo dm)
{
Reset(dm);
// <20><><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD><EFBFBD><EFBFBD>
drugManuNoDao.UpdateDrugManuNo(dm);
ManusGrid.Reload();
}
void OnCreateRow(DrugManuNo dm)
{
// <20><><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
drugManuNoDao.AddDrugManuNo(dm);
manuNoToInsert.Remove(dm);
ManusGrid.Reload();
}
protected override async Task OnInitializedAsync()
{
myText = await I18nText.GetTextTableAsync<I18nText.local>(this);
await base.OnInitializedAsync();
}
}