Files
ThingsGateway/framework/ThingsGateway.Blazor/Components/ImportExcel.razor
T
2023-08-07 15:09:53 +08:00

169 lines
7.3 KiB
Plaintext

@*
//------------------------------------------------------------------------------
// 此代码版权声明为全文件覆盖,如有原作者特别声明,会在下方手动补充
// 此代码版权(除特别声明外的代码)归作者本人Diego所有
// 源代码使用协议遵循本仓库的开源协议及附加协议
// Gitee源代码仓库:https://gitee.com/diego2098/ThingsGateway
// Github源代码仓库:https://github.com/kimdiego2098/ThingsGateway
// 使用文档:https://diego2098.gitee.io/thingsgateway-docs/
// QQ群:605534569
//------------------------------------------------------------------------------
*@
@namespace ThingsGateway.Blazor
@using System.Linq.Expressions;
@using BlazorComponent;
@using Furion.DataValidation;
@using Mapster;
@using Masa.Blazor
@using Masa.Blazor.Presets;
@using System.IO;
@using ThingsGateway.Admin.Blazor.Core;
@inherits BaseComponentBase
@inject UserResoures UserResoures
<PDrawer @bind-Value="IsShowImport" OnCancel="() => IsShowImport = false"
Title=导入 Persistent
MaxWidth="1000">
@if (IsShowImport)
{
<MStepper NonLinear Value="Step">
<MStepperHeader>
<MStepperStep Editable Step="1" Complete="Step==2" OnClick="()=>{Step=1;_importFile=null;}">
导入表格
</MStepperStep>
<MDivider></MDivider>
<MStepperStep Step="2">
验证结果
</MStepperStep>
<MDivider></MDivider>
<MStepperStep Step="3">
确认导入
</MStepperStep>
</MStepperHeader>
<MStepperItems>
<MStepperContent Step="1">
@if (Step == 1)
{
<MFileInput @bind-Value="_importFile" Style="width:60%;" ShowSize></MFileInput>
<MLabel Class="my-3 green--text">数据量较大时(大于1万),所需导入时间可能超过1分钟,请耐心等待 </MLabel>
<div class="mt-6">
<MButton Color="primary" Loading=@isImport OnClick="()=>DeviceImport(_importFile)">下一步</MButton>
</div>
}
</MStepperContent>
<MStepperContent Step="2">
@if (Step == 2)
{
<div style="overflow-y:auto">
@foreach (var item in ImportPreviews)
{
<MSubheader Class="mt-2 font-weight-black">
@(
$"{item.Key},预计导入{item.Value.DataCount}条数据"
)
</MSubheader>
<MSubheader Class=@((item.Value.HasError?"mt-2 red--text":"mt-2 green--text"))>
@(
(item.Value.HasError ? "出现错误" : "验证成功")
)
</MSubheader>
<MVirtualScroll Context="item1" Height=300 OverscanCount=2 ItemSize="60" Items="item.Value.Results">
<ItemContent>
<MListItem>
<MListItemAction>
<MChip Class="ma-2">
@(
$"第{item1.row}行"
)
</MChip>
</MListItemAction>
<MListItemContent>
<MListItemTitle Class=@((item1.isSuccess?"green--text":"red--text"))>
<strong>@item1.resultString</strong>
</MListItemTitle>
</MListItemContent>
</MListItem>
<MDivider></MDivider>
</ItemContent>
</MVirtualScroll>
}
@foreach (var item in ImportPreviews)
{
<MSubheader Class="mt-2 font-weight-black">
@(
$"{item.Key},预计导入{item.Value.DataCount}条数据"
)
</MSubheader>
<MSubheader Class=@((item.Value.HasError?"mt-2 red--text":"mt-2 green--text"))>
@(
(item.Value.HasError ? "出现错误" : "验证成功")
)
</MSubheader>
<MVirtualScroll Context="item1" Height=300 OverscanCount=2 ItemSize="60" Items="item.Value.Results">
<ItemContent>
<MListItem>
<MListItemAction>
<MChip Class="ma-2">
@(
$"第{item1.row}行"
)
</MChip>
</MListItemAction>
<MListItemContent>
<MListItemTitle Class=@((item1.isSuccess?"green--text":"red--text"))>
<strong>@item1.resultString</strong>
</MListItemTitle>
</MListItemContent>
</MListItem>
<MDivider></MDivider>
</ItemContent>
</MVirtualScroll>
}
</div>
<div class="mt-6">
<MButton Color="primary" Disabled=@ImportPreviews.Any(it=>it.Value.HasError) OnClick="()=>Step=3">下一步</MButton>
</div>
}
</MStepperContent>
<MStepperContent Step="3">
@if (Step == 3)
{
<MLabel Class="my-3 green--text">数据量较大时(大于1万),所需导入时间可能超过1分钟,请耐心等待" </MLabel>
<div class="mt-6">
<MButton Color="primary" Loading=@isSaveImport OnClick="SaveDeviceImport">上传</MButton>
</div>
}
</MStepperContent>
</MStepperItems>
</MStepper>
}
</PDrawer>