298 lines
15 KiB
Plaintext
298 lines
15 KiB
Plaintext
@page "/take/self"
|
|
<div class="container-fluid">
|
|
<div class="row">
|
|
<div class="col-12 mb-4">
|
|
|
|
<RadzenTemplateForm Data="@orderInfo" Submit="@(((OrderInfo args) => { Submit(args); }))">
|
|
<RadzenFieldset Text="@myText.WriteOrder">
|
|
<RadzenRow Gap="1rem">
|
|
<RadzenColumn Size="4">
|
|
<RadzenRow AlignItems="AlignItems.Center">
|
|
<RadzenColumn Size="4">
|
|
<RadzenLabel Text="@myText.OrderNo" Component="OrderNo" />
|
|
</RadzenColumn>
|
|
<RadzenColumn Size="8">
|
|
<RadzenTextBox @bind-Value="orderInfo.OrderNo" Style="width: 100%;" Name="OrderNo"></RadzenTextBox>
|
|
<RadzenRequiredValidator Text="@myText.InputOrderTips" Component="OrderNo" />
|
|
</RadzenColumn>
|
|
</RadzenRow>
|
|
</RadzenColumn>
|
|
<RadzenColumn Size="4">
|
|
<RadzenRow AlignItems="AlignItems.Center">
|
|
<RadzenColumn Size="4">
|
|
<RadzenLabel Text="@myText.OrderDate" Component="OrderDate" />
|
|
</RadzenColumn>
|
|
<RadzenColumn Size="8">
|
|
<RadzenDatePicker DateFormat="yyyy-MM-dd HH:mm:ss" CurrentDateChanged="@OnCurrentDateChanged"
|
|
ShowTime="true" ShowSeconds="true"
|
|
@bind-Value="orderInfo.OrderDate" Style="width: 100%;" Name="OrderDate" />
|
|
<RadzenRequiredValidator Text="@myText.InputOrderDate" Component="OrderDate" />
|
|
</RadzenColumn>
|
|
</RadzenRow>
|
|
</RadzenColumn>
|
|
<RadzenColumn Size="4">
|
|
<RadzenRow AlignItems="AlignItems.Center">
|
|
<RadzenColumn Size="4">
|
|
<RadzenLabel Text="@myText.PatientName" Component="PatientName" />
|
|
</RadzenColumn>
|
|
<RadzenColumn Size="8">
|
|
<RadzenTextBox @bind-Value="orderInfo.PatientName" Style="width: 100%;" Name="PatientName"></RadzenTextBox>
|
|
<RadzenRequiredValidator Text="@myText.InputPatientName" Component="PatientName" />
|
|
</RadzenColumn>
|
|
</RadzenRow>
|
|
</RadzenColumn>
|
|
<RadzenColumn Size="2">
|
|
<RadzenRow AlignItems="AlignItems.Center">
|
|
<RadzenColumn Size="4">
|
|
<RadzenLabel Text="@myText.Sex" Component="Sex" />
|
|
</RadzenColumn>
|
|
<RadzenColumn Size="8">
|
|
<RadzenTextBox @bind-Value="orderInfo.Sex" Style="width: 100%;" Name="Sex"></RadzenTextBox>
|
|
<RadzenRequiredValidator Text="@myText.InputPatientSex" Component="Sex" />
|
|
</RadzenColumn>
|
|
</RadzenRow>
|
|
</RadzenColumn>
|
|
<RadzenColumn Size="2">
|
|
<RadzenRow AlignItems="AlignItems.Center">
|
|
<RadzenColumn Size="4">
|
|
<RadzenLabel Text="@myText.Age" Component="Age" />
|
|
</RadzenColumn>
|
|
<RadzenColumn Size="8">
|
|
<RadzenTextBox @bind-Value="orderInfo.Age" Style="width: 100%;" Name="Age"></RadzenTextBox>
|
|
<RadzenRequiredValidator Text="@myText.InputPatientAge" Component="Age" />
|
|
</RadzenColumn>
|
|
</RadzenRow>
|
|
</RadzenColumn>
|
|
<RadzenColumn Size="4">
|
|
<RadzenRow AlignItems="AlignItems.Center">
|
|
<RadzenColumn Size="4">
|
|
<RadzenLabel Text="@myText.OrderDoctor" Component="DoctorName" />
|
|
</RadzenColumn>
|
|
<RadzenColumn Size="8">
|
|
<RadzenTextBox @bind-Value="orderInfo.DoctorName" Style="width: 100%;" Name="DoctorName"></RadzenTextBox>
|
|
<RadzenRequiredValidator Text="@myText.Doctor" Component="DoctorName" />
|
|
</RadzenColumn>
|
|
</RadzenRow>
|
|
</RadzenColumn>
|
|
<RadzenColumn Size="4">
|
|
<RadzenRow AlignItems="AlignItems.Center">
|
|
<RadzenColumn Size="4">
|
|
<RadzenLabel Text="@myText.DeptName" Component="DeptName" />
|
|
</RadzenColumn>
|
|
<RadzenColumn Size="8">
|
|
<RadzenTextBox @bind-Value="orderInfo.DeptName" Style="width: 100%;" Name="DeptName"></RadzenTextBox>
|
|
<RadzenRequiredValidator Text="@myText.InputDept" Component="DeptName" />
|
|
</RadzenColumn>
|
|
</RadzenRow>
|
|
</RadzenColumn>
|
|
<RadzenColumn Size="6">
|
|
<RadzenRow AlignItems="AlignItems.Center">
|
|
<RadzenColumn Size="2">
|
|
<RadzenLabel Text="@myText.Diagnose" Component="Disease" />
|
|
</RadzenColumn>
|
|
<RadzenColumn Size="10">
|
|
<RadzenTextBox @bind-Value="orderInfo.Disease" Style="width: 100%;" Name="Disease"></RadzenTextBox>
|
|
<RadzenRequiredValidator Text="@myText.InputDisease" Component="Disease" />
|
|
</RadzenColumn>
|
|
</RadzenRow>
|
|
</RadzenColumn>
|
|
<RadzenColumn Size="6">
|
|
<RadzenStack Orientation="Orientation.Horizontal" AlignItems="AlignItems.Center" JustifyContent="JustifyContent.SpaceBetween">
|
|
<RadzenButton Size="ButtonSize.Large" ButtonType="ButtonType.Submit" Disabled="@(detailsToInsert.Count() > 0 || detailsToUpdate.Count() > 0)" Text="@myText.Confirm" />
|
|
<RadzenButton Size="ButtonSize.Large" Icon="add_circle_outline" ButtonStyle="ButtonStyle.Success" Click="@InsertRow" Disabled="@(detailsToInsert.Count() > 0)" Text="@myText.Add" />
|
|
</RadzenStack>
|
|
</RadzenColumn>
|
|
</RadzenRow>
|
|
</RadzenFieldset>
|
|
</RadzenTemplateForm>
|
|
</div>
|
|
<div class="col-12 mb-4">
|
|
|
|
<RadzenDataGrid @ref="grid"
|
|
EmptyText="@myText.AddNewOrder"
|
|
Data="@orderDetails"
|
|
EditMode="DataGridEditMode.Single"
|
|
RowUpdate="@((OrderDetail od) => { OnUpdateRow(od); })" RowCreate="@((OrderDetail od) => { OnCreateRow(od); })"
|
|
AllowColumnResize="true" AllowAlternatingRows="false"
|
|
SelectionMode="DataGridSelectionMode.Single">
|
|
<Columns>
|
|
<RadzenDataGridColumn Title="@myText.DrugName" Property="Drug.DrugName">
|
|
<EditTemplate Context="od">
|
|
<RadzenDropDownDataGrid AllowVirtualization="true" Name="Drug" TValue="DrugInfo" @bind-Value="od.Drug" Data="@drugInfos" Style="width:100%; display: block;" AllowFilteringByAllStringColumns="true">
|
|
<Columns>
|
|
<RadzenDropDownDataGridColumn Property="DrugId" Title="@myText.DrugCode" />
|
|
<RadzenDropDownDataGridColumn Property="DrugName" Width="120px" Title="@myText.DrugName" />
|
|
<RadzenDropDownDataGridColumn Property="DrugSpec" Title="@myText.Spec" />
|
|
<RadzenDropDownDataGridColumn Property="StockQuantity" Title="@myText.Inventory" Frozen="true" FrozenPosition="FrozenColumnPosition.Right" />
|
|
</Columns>
|
|
</RadzenDropDownDataGrid>
|
|
<RadzenCustomValidator Style="position: absolute;z-index: 9999;" Component="Drug" Validator="@(() => !String.IsNullOrEmpty(od.Drug.DrugId))" Text="@myText.SelectDrug" />
|
|
<RadzenCustomValidator Component="Drug" Validator="@(() => ValidateDrug(od.Drug))" Text="@myText.HasSelect" />
|
|
</EditTemplate>
|
|
</RadzenDataGridColumn>
|
|
<RadzenDataGridColumn Title="@myText.Spec" Property="Drug.DrugSpec"></RadzenDataGridColumn>
|
|
<RadzenDataGridColumn Title="@myText.Quantity" Property="Quantity">
|
|
<EditTemplate Context="od">
|
|
<RadzenNumeric Style="width:100%; display: block;" Name="Quantity" @bind-Value=@od.Quantity />
|
|
<RadzenNumericRangeValidator Style="position: absolute;z-index: 9999;" Min="1" Max="@od.Drug.StockQuantity" Text="@myText.InputTips" Component="Quantity" />
|
|
</EditTemplate>
|
|
</RadzenDataGridColumn>
|
|
<RadzenDataGridColumn Context="detail" Filterable="false" Sortable="false" TextAlign="TextAlign.Right" Frozen="true" FrozenPosition="FrozenColumnPosition.Right">
|
|
<Template Context="detail">
|
|
<RadzenButton Icon="edit" ButtonStyle="ButtonStyle.Light" Variant="Variant.Flat" Size="ButtonSize.Medium" Click="@(args => EditRow(detail))" @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(detail))" @onclick:stopPropagation="true">
|
|
</RadzenButton>
|
|
</Template>
|
|
<EditTemplate Context="detail">
|
|
<RadzenButton Icon="check" ButtonStyle="ButtonStyle.Success" Variant="Variant.Flat" Size="ButtonSize.Medium" Click="@((args) => SaveRow(detail))" aria-label="Save">
|
|
</RadzenButton>
|
|
<RadzenButton Icon="close" ButtonStyle="ButtonStyle.Light" Variant="Variant.Flat" Size="ButtonSize.Medium" class="my-1 ms-1" Click="@((args) => CancelEdit(detail))" 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(detail))" aria-label="Delete">
|
|
</RadzenButton>
|
|
</EditTemplate>
|
|
</RadzenDataGridColumn>
|
|
</Columns>
|
|
</RadzenDataGrid>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
@code {
|
|
@inject IChannelListDao channelListDao;
|
|
@inject IDrugInfoDao drugInfoDao;
|
|
@inject NotificationService _message
|
|
@inject DialogService dialogService;
|
|
@inject Toolbelt.Blazor.I18nText.I18nText I18nText;
|
|
private I18nText.local myText = new I18nText.local();
|
|
RadzenDataGrid<OrderDetail> grid;
|
|
List<OrderDetail> orderDetails = new();
|
|
|
|
List<DrugInfo> drugInfos = new();
|
|
|
|
List<OrderDetail> detailsToInsert = new();
|
|
List<OrderDetail> detailsToUpdate = new();
|
|
|
|
|
|
OrderInfo orderInfo = new OrderInfo()
|
|
{
|
|
OrderDate = DateTime.Now
|
|
};
|
|
|
|
|
|
|
|
void Reset()
|
|
{
|
|
detailsToInsert.Clear();
|
|
detailsToUpdate.Clear();
|
|
}
|
|
void Reset(OrderDetail orderDetail)
|
|
{
|
|
detailsToInsert.Remove(orderDetail);
|
|
detailsToUpdate.Remove(orderDetail);
|
|
}
|
|
|
|
async Task InsertRow()
|
|
{
|
|
|
|
Reset();
|
|
var orderDetail = new OrderDetail();
|
|
detailsToInsert.Add(orderDetail);
|
|
await grid.InsertRow(orderDetail);
|
|
}
|
|
|
|
async Task EditRow(OrderDetail orderDetail)
|
|
{
|
|
|
|
Reset();
|
|
|
|
detailsToUpdate.Add(orderDetail);
|
|
await grid.EditRow(orderDetail);
|
|
}
|
|
|
|
async Task SaveRow(OrderDetail orderDetail)
|
|
{
|
|
await grid.UpdateRow(orderDetail);
|
|
}
|
|
|
|
void CancelEdit(OrderDetail orderDetail)
|
|
{
|
|
Reset(orderDetail);
|
|
|
|
grid.CancelEditRow(orderDetail);
|
|
grid.Reload();
|
|
}
|
|
|
|
async Task DeleteRow(OrderDetail orderDetail)
|
|
{
|
|
Reset(orderDetail);
|
|
orderDetails.Remove(orderDetail);
|
|
grid.CancelEditRow(orderDetail);
|
|
await grid.Reload();
|
|
}
|
|
|
|
void OnUpdateRow(OrderDetail orderDetail)
|
|
{
|
|
Reset(orderDetail);
|
|
|
|
grid.Reload();
|
|
}
|
|
|
|
void OnCreateRow(OrderDetail orderDetail)
|
|
{
|
|
// 数据库添加用户
|
|
detailsToInsert.Remove(orderDetail);
|
|
orderDetails.Add(orderDetail);
|
|
grid.Reload();
|
|
}
|
|
|
|
async void Submit(OrderInfo orderInfo)
|
|
{
|
|
if (orderDetails.Count == 0)
|
|
{
|
|
_message.Notify(
|
|
new NotificationMessage { Severity = NotificationSeverity.Error, Summary = myText.Tips, Detail = $"请添加用药详情", Duration = 3000 }
|
|
);
|
|
}
|
|
else
|
|
{
|
|
//弹出待取药品所在库位、库存信息
|
|
var b = await dialogService.OpenAsync<SelfTakeDialog>(
|
|
myText.TakeDetail,
|
|
new Dictionary<string, object>() { { "order", orderInfo }, { "orderDetails", orderDetails } },
|
|
new DialogOptions() { Width = "85vw", Resizable = true, Draggable = true, ShowClose = false }
|
|
);
|
|
if (b)
|
|
{
|
|
_message.Notify(
|
|
new NotificationMessage { Severity = NotificationSeverity.Success, Summary = myText.Tips, Detail = $"取药完成", Duration = 3000 }
|
|
);
|
|
}
|
|
}
|
|
}
|
|
async Task reloadGrid()
|
|
{
|
|
|
|
await grid.Reload();
|
|
}
|
|
bool ValidateDrug(DrugInfo drugInfo)
|
|
{
|
|
return !orderDetails.Any(od => od.Drug.DrugId.Equals(drugInfo?.DrugId));
|
|
}
|
|
|
|
protected override async Task OnInitializedAsync()
|
|
{
|
|
|
|
myText = await I18nText.GetTextTableAsync<I18nText.local>(this);
|
|
drugInfos = await drugInfoDao.GetAllDrugAndStock();
|
|
|
|
base.OnInitializedAsync();
|
|
}
|
|
|
|
void OnCurrentDateChanged(DateTime args)
|
|
{
|
|
orderInfo.OrderDate = new DateTime(args.Year, args.Month, args.Day, args.Hour, args.Minute, args.Second);
|
|
}
|
|
}
|