HKC_Blazor/MasaBlazorApp3/Pages/BoxReplace.razor

172 lines
8.2 KiB
Plaintext

@page "/Box/BoxReplace"
@using MasaBlazorApp3.Pojo.Config;
@using MasaBlazorApp3.Pojo.Vo;
@using MasaBlazorApp3.Util;
@using Microsoft.Extensions.Options;
@using Newtonsoft.Json;
@using log4net;
<RadzenStack Gap="1rem" Orientation="Orientation.Vertical" Style="height: 100%;">
<RadzenStack>
<RadzenStack class="rz-p-4 rz-border-radius-1" Style="border: var(--rz-grid-cell-border)" Orientation="Orientation.Horizontal" Gap="1rem">
<RadzenText Class="rz-mt-2 rz-my-0" Style="color: var(--rz-text-tertiary-color);">@myText.DrugName:</RadzenText>
<RadzenText Class="rz-text-truncate"><b>@(channelStock.Drug.DrugName)</b></RadzenText>
<RadzenText Class="rz-mt-2 rz-my-0" Style="color: var(--rz-text-tertiary-color);">@myText.Spec:</RadzenText>
<RadzenText TextStyle="TextStyle.Body1" Class="rz-text-truncate"><b>@(channelStock.Drug.DrugSpec)</b></RadzenText>
<RadzenText Class="rz-mt-2 rz-my-0" Style="color: var(--rz-text-tertiary-color);">@myText.Batch:</RadzenText>
<RadzenText TextStyle="TextStyle.Body1" Class="rz-text-truncate"><b>@(channelStock.ManuNo)</b></RadzenText>
<RadzenText Class="rz-mt-2 rz-my-0" Style="color: var(--rz-text-tertiary-color);">@myText.Expiration:</RadzenText>
<RadzenText TextStyle="TextStyle.Body1" Class="rz-text-truncate"><b>@(channelStock.EffDate)</b></RadzenText>
<RadzenText Class="rz-mt-2 rz-my-0" Style="color: var(--rz-text-tertiary-color);">@myText.Inventory:</RadzenText>
<RadzenText TextStyle="TextStyle.Body1" Class="rz-text-truncate"><b>@(channelStock.Quantity)</b></RadzenText>
<RadzenText Class="rz-mt-2 rz-my-0" Style="color: var(--rz-text-tertiary-color);">@myText.ReplaceDrug:</RadzenText>
<RadzenDropDown @bind-Value="SelectedDrawerNo" Data="@DrawerNos" Style="display: block;" Change="@(args => SelectedDrawerChange(args))" Name="DropDownChangeEvent">
<RadzenText TextStyle="TextStyle.Subtitle2" class="mb-0">@(SelectedDrawerNo)</RadzenText>
</RadzenDropDown>
</RadzenStack>
<RadzenDataGrid @ref="grid" Data="@selectedDrawerData" AllowAlternatingRows="true" LoadData="@LoadData" IsLoading="@isLoading" Count="@count" EmptyText="@myText.NoDate"
CellClick="@((DataGridCellMouseEventArgs<ChannelStock> args) => OnCellClick(args))"
AllowPaging="true" PageSize="10" PagerHorizontalAlign="HorizontalAlign.Left" ShowPagingSummary="true" PagingSummaryFormat="{0}/{1} 共{2}条数据">
<Columns>
<RadzenDataGridColumn Property="DrawerNo" Title="@myText.Box">
</RadzenDataGridColumn>
<RadzenDataGridColumn Property="Drug.DrugName" Title="@myText.DrugName" />
<RadzenDataGridColumn Property="Drug.DrugSpec" Title="@myText.Spec" />
<RadzenDataGridColumn Property="ChannelStock.ManuNo" Title="@myText.Batch" />
<RadzenDataGridColumn Property="ChannelStock.EffDate" Title="@myText.Expiration" />
<RadzenDataGridColumn Property="Quantity" Title="@myText.Inventory" />
<RadzenDataGridColumn MinWidth="100px" Title="@myText.ExchangeNum" Property="AddQuantity">
<EditTemplate Context="cs">
<RadzenNumeric Min="0" Style="display: block" Max=@cs.Quantity Name="Quantity" @bind-Value=@cs.AddQuantity />
<RadzenNumericRangeValidator Style="position: absolute;z-index: 9999;" Min="0" Text="@myText.InputCorrectNum" Component="Quantity" Popup="true" />
</EditTemplate>
</RadzenDataGridColumn>
</Columns>
</RadzenDataGrid>
</RadzenStack>
<RadzenStack Orientation="Orientation.Horizontal" JustifyContent="JustifyContent.Center" Gap="0.5rem">
<RadzenButton Click="@Save" ButtonStyle="ButtonStyle.Success" Variant="Variant.Flat" Text="@myText.SaveSet" Style="width: 120px" />
<RadzenButton Click="@Cancel" Variant="Variant.Flat" Text="@myText.Cancel" Style="width: 120px" />
</RadzenStack>
</RadzenStack>
@code {
@inject Radzen.DialogService dialogService;
@inject IChannelListDao channelListDao;
@inject IOptions<SettingConfig> setting;
@inject NotificationService _message
@inject PortUtil PortUtil;
@inject Toolbelt.Blazor.I18nText.I18nText I18nText;
private I18nText.local myText = new I18nText.local();
private readonly ILog logger = LogManager.GetLogger(typeof(OrderDetailDialog));
int status;
bool isLoading;
int count;
int[] DrawerNos;
int SelectedDrawerNo=0;
[Parameter] public ChannelStock channelStock { get; set; }
private bool CanTakeDrug = true;
// public List<BoxTakeVo> data { get; set; }
public List<ChannelStock> selectedDrawerData{ get; set; }
//称重取药数量
int[] WeightFinnalQuantity { get; set; } = new int[] { 0, 0, 0, 0, 0, 0, 0, 0, 0 };
//开抽屉前操作标识
List<string> DrawerNoColNoList = new List<string>();
protected override async Task OnInitializedAsync()
{
myText = await I18nText.GetTextTableAsync<I18nText.local>(this);
DrawerNos = await channelListDao.GetDrawerNum(channelStock);
await base.OnInitializedAsync();
}
async Task LoadData(LoadDataArgs args)
{
isLoading = true;
if (DrawerNos != null && DrawerNos.Count() > 0)
{
SelectedDrawerNo = DrawerNos[0];
var result = await channelListDao.GetChannelStockByDrug(channelStock, SelectedDrawerNo, args.Top, args.Skip);
selectedDrawerData = result.Desserts;
count = result.TotalDesserts;
}
isLoading = false;
}
void RestData()
{
// PortUtil.speechSynthesizer.SpeakAsyncCancelAll();
// this.status = 0;
// data.ForEach(it =>
// {
// it.Status = 0;
// it.BeforeQuantity = new int[9];
// it.AfterQuantity = new int[9];
// });
// this.WeightFinnalQuantity = new int[9];
// DrawerNoColNoList.Clear();
}
void Cancel()
{
RestData();
// 关闭弹窗
dialogService.Close(false);
}
async Task Save()
{
if (selectedDrawerData!=null&&selectedDrawerData.Any(cl => cl.AddQuantity != 0 && cl.DrugId != null && cl.ManuNo != null))
{
if (selectedDrawerData.Where(cs => cs.AddQuantity != 0).Sum(cs => cs.Quantity) > channelStock.Quantity)
{
_message.Notify(new NotificationMessage { Severity = NotificationSeverity.Warning, Summary = myText.Tips, Detail = $"交换总数量不能大于库存", Duration = 4000 });
return;
}
var b = await channelListDao.BoxReplaceFinish(channelStock,selectedDrawerData.Where(cl => cl.AddQuantity != 0).ToList());
if (!b)
{
_message.Notify(new NotificationMessage { Severity = NotificationSeverity.Error, Summary = myText.Tips, Detail = $"数据保存失败", Duration = 4000 });
logger.Error($"药箱药品替换保存数据库失败,数据{JsonConvert.SerializeObject(selectedDrawerData.Where(cl => cl.AddQuantity != 0).ToList())}");
}
else
{
_message.Notify(new NotificationMessage { Severity = NotificationSeverity.Success, Summary = myText.Tips, Detail = $"交换完成", Duration = 4000 });
// 关闭弹窗
dialogService.Close(true);
}
//重置状态
this.RestData();
}
else
{
_message.Notify(new NotificationMessage { Severity = NotificationSeverity.Warning, Summary = myText.Tips, Detail = $"无可交换数据或未输入交换数量", Duration = 4000 });
return;
}
}
async Task SelectedDrawerChange(object drawerNo)
{
var result = await channelListDao.GetChannelStockByDrug(channelStock, Convert.ToInt32(drawerNo), 8, 0);
selectedDrawerData = result.Desserts;
}
int currentCol = 0;
RadzenDataGrid<ChannelStock> grid;
void OnCellClick(DataGridCellMouseEventArgs<ChannelStock> args)
{
currentCol = args.Data.ColNo;
grid.EditRow(args.Data);
}
}