基于Blazor开发的BS版WMS
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

154 lines
5.8 KiB

@using AntDesign.TableModels
@using System.ComponentModel.DataAnnotations
@using EFCoreDatabase.Entities
@page "/material/main_material"
@inject IGoodsRepository _GoodsRepository
<PageContainer Title="主数据">
<Table @ref="_table" TItem="MaterialData" PageSize="10" Total="_total" DataSource="_dataSource" @bind-SelectedRows="_selectedRows" OnChange="OnChange" Title="物料信息表汇总">
<TitleTemplate>
<Flex Justify="FlexJustify.Left" Gap="@("10")">
<Button Type="ButtonType.Primary" OnClick="() => StartEdit(default)">新 增</Button>
@* <Button Disabled="!_selectedRows.Any()" Danger OnClick="DeleteAll">Delete</Button> *@
</Flex>
</TitleTemplate>
<ColumnDefinitions Context="row">
<Selection />
<GenerateColumns Definitions="@((n,c) => { c.Filterable = true; c.Sortable = true; })" />
<ActionColumn Title="操 作">
<a @onclick="() => StartEdit(row)">编 辑</a>
@* <a @onclick="() => Delete(row)">Delete</a> *@
</ActionColumn>
</ColumnDefinitions>
</Table>
</PageContainer>
@inject ModalService ModalService;
@inject ConfirmService ConfirmService;
@code {
List<MaterialData> mockDb = new();
IEnumerable<MaterialData> _selectedRows = [];
ITable _table;
List<MaterialData> _dataSource;
int _total;
void OnChange(QueryModel<MaterialData> query)
{
_total = mockDb.AsQueryable().ExecuteTableQuery(query).Count();
_dataSource = mockDb.AsQueryable().ExecuteTableQuery(query).CurrentPagedRecords(query).ToList();
}
void StartEdit(MaterialData row)
{
var data = row == null ? new() : row with { };
ModalRef<bool> modalRef = default;
IForm form = default;
modalRef = ModalService.CreateModal<bool>(new()
{
Title = data.GOODS_ID > 0 ? "Edit" : "New",
Content = @<Form @ref="form" Model="data" OnFinish="()=> modalRef.OkAsync(true)" LabelColSpan="6" WrapperColSpan="18">
<GenerateFormItem NotGenerate="@(x=> x == "GOODS_ID")" />
</Form>
,
OnOk = async (e) =>
{
if (!form.Validate())
{
return;
}
// save db and refresh
modalRef.SetConfirmLoading(true);
if (data.GOODS_ID > 0)
{
var index = mockDb.FindIndex(x => x.GOODS_ID == data.GOODS_ID);
mockDb[index] = data;
//更新物料主数据
var goodsMain = new GOODS_MAIN()
{
GOODS_CODE = data.GOODS_CODE,
GOODS_NAME = data.GOODS_NAME,
GOODS_UNITS = data.GOODS_UNITS,
GOODS_CONST_PROPERTY1 = data.GOODS_CONST_PROPERTY1,
GOODS_CONST_PROPERTY2 = data.GOODS_CONST_PROPERTY2
};
_GoodsRepository.UpdateGoodsMain(goodsMain);
}
else
{
data.GOODS_ID = mockDb.Max(x => x.GOODS_ID) + 1;
mockDb.Add(data);
//新增物料主数据信息
var goodsMain = new GOODS_MAIN()
{ GOODS_CODE = data.GOODS_CODE,
GOODS_NAME = data.GOODS_NAME,
GOODS_UNITS = data.GOODS_UNITS,
GOODS_CONST_PROPERTY1 = data.GOODS_CONST_PROPERTY1,
GOODS_CONST_PROPERTY2 = data.GOODS_CONST_PROPERTY2 };
_GoodsRepository.AddGoodsMain(goodsMain);
}
await Task.Delay(1000);
await modalRef.CloseAsync();
_table.ReloadData();
StateHasChanged();
},
OnCancel = async (e) =>
{
if (form.IsModified && (!await Confirm("The form have been updated, are you sure quit?")))
{
return;
}
await modalRef.CloseAsync();
}
});
}
async Task DeleteAll()
{
if (!await Confirm($"Are you sure delete {_selectedRows.Count()} rows?"))
return;
mockDb = mockDb.Except(_selectedRows).ToList();
_selectedRows = [];
_table.ReloadData();
}
async Task Delete(MaterialData row)
{
if (!await Confirm($"Are you sure delete [{row.GOODS_NAME}]?"))
return;
mockDb = mockDb.Except(new[] { row }).ToList();
_table.ReloadData();
}
protected override void OnInitialized()
{
//tlt:获取主数据信息
var goodsList = _GoodsRepository.GetGoodsMains();
mockDb = Enumerable.Range(0, goodsList.Count).Select(i => new MaterialData { GOODS_ID = goodsList[i].GOODS_ID,GOODS_CODE = goodsList[i].GOODS_CODE,GOODS_NAME =goodsList[i].GOODS_NAME,GOODS_UNITS = goodsList[i].GOODS_UNITS,GOODS_CONST_PROPERTY1 = goodsList[i].GOODS_CONST_PROPERTY1,GOODS_CONST_PROPERTY2 = goodsList[i].GOODS_CONST_PROPERTY2}).ToList();
}
private async Task<bool> Confirm(string message)
{
return await ConfirmService.Show(message, "Confirm", ConfirmButtons.YesNo, ConfirmIcon.Warning) == ConfirmResult.Yes;
}
// public record MaterialData
// {
// public int GOODS_ID { get; set; }
// [Required]
// public string GOODS_CODE { get; set; }
// public string GOODS_NAME { get; set; }
// public string GOODS_UNITS { get; set; }
// public string GOODS_CONST_PROPERTY1 { get; set; }
// public string GOODS_CONST_PROPERTY2 { get; set; }
// }
}