CN.CAICT.IDIS.Client.Web/Components/Pages/Register.razor

211 lines
8.7 KiB
Plaintext

@page "/register"
@using Cysharp.Threading.Tasks
@using BITKit
@using System.Text.RegularExpressions
@using System.ComponentModel
@using System.Globalization
@inject ILogger<TemlateRegister> logger
@inject IDIS_TemplateService templateService
@inject IDIS_EnterpriseService enterpriseService
@inject IDIS_Service service
@inherits OwningComponentBase
<MudText Typo="Typo.h3" GutterBottom="true">注册与更新标识</MudText>
<MudText>当我们创建标识模板后,我们就可以通过标识模板,快速注册与更新标识</MudText>
<MudText>如果需要更新标识,只需要填写需要更新的值</MudText>
<MudGrid>
<MudItem xs="3">
<TemplateSelector Reference="templateSelector" OnSelectTemplate="SelectTemplate"></TemplateSelector>
</MudItem>
<MudItem xs="1">
</MudItem>
<MudItem xs="8">
<MudStack>
<MudText Typo="Typo.h6">模板信息</MudText>
<MudStack Row="true">
<MudAutocomplete Variant="Variant.Text" Disabled="true" T="string" Label="国家" @bind-Value="prefix_c" SearchFunc="@Search1"
CoerceText="true" CoerceValue="true" />
<MudAutocomplete Variant="Variant.Text" Disabled="true" T="string" Label="区域" @bind-Value="prefix_p" SearchFunc="@Search1"
CoerceText="true" CoerceValue="true"/>
<MudAutocomplete Variant="Variant.Text" T="string" Label="企业" @bind-Value="prefix_e" SearchFunc="@Search1"
CoerceText="true" CoerceValue="true"/>
<MudTextField
@bind-Value="@handle_code"
HelperText="点击右侧图标生成标识"
Label="标识值"
Variant="Variant.Text"
Adornment="Adornment.End"
AdornmentIcon="@Icons.Material.Filled.Refresh"
OnAdornmentClick="GenerateHandle"/>
</MudStack>
<MudText Typo="Typo.h6">注册值</MudText>
<MudStack Spacing="0">
@for (var index = 0; index < _valueInfo.Length; index++)
{
var i = index;
var templateInfo = this.template.Items[index];
<MudStack Row="true">
@if (regOrUpdate)
{
<MudCheckBox @bind-Value="updateFlags[i]"/>
}
@if (templateInfo.MetaData.Type is ("dateTime" or "DateTime"))
{
<MudTextField
@bind-Value="@dateTimeProxies[i].Value"
T="DateTime?"
Format="s"
InputType="InputType.DateTimeLocal"
HelperText="@($"{templateInfo.IdType}:{templateInfo.MetaData.Type}")"
Margin="@myMargin"
Variant="Variant.Outlined"/>
}
else
{
<MudTextField Margin="@myMargin"
@bind-Value="@_valueInfo[i].Data.Value"
HelperText="@($"{templateInfo.IdType}:{templateInfo.MetaData.Type}")"
T="string"
Counter="25"
Immediate="true"
Label="@templateInfo.Name"
Variant="Variant.Outlined"/>
}
</MudStack>
}
</MudStack>
@if (string.IsNullOrEmpty(currentMessage) is false)
{
<MudAlert Severity="severity">@currentMessage</MudAlert>
}
<MudStack Row="true">
<MudCheckBox @bind-Value="regOrUpdate">注册或更新</MudCheckBox>
<MudButton Class="d-flex flex-grow-1" Variant="Variant.Outlined" OnClick="Reg">@(regOrUpdate?"注册或更新标识":"注册标识") :@handle</MudButton>
</MudStack>
</MudStack>
</MudItem>
</MudGrid>
@code {
public class DateTimeProxy
{
public DateTime? Value { get; set; } = DateTime.Now;
}
private List<DateTimeProxy> dateTimeProxies { get; set; } = new();
private bool[] updateFlags { get; set; } = Array.Empty<bool>();
private Reference<TemplateSelector> templateSelector { get; set; } = new();
private IDIS_Template template = new IDIS_Template();
private IDIS_Register_Data.ValueInfo[] _valueInfo { get; set; } = Array.Empty<IDIS_Register_Data.ValueInfo>();
private string prefix_c { get; set; } = "88";
private string prefix_p { get; set; } = "123";
private string prefix_e { get; set; } = "99";
private string handle_code { get; set; } = DateTime.Now.Ticks.ToString();
private string generatedHandleCode { get; set; } = DateTime.Now.Ticks.ToString();
private string handle=> $"{prefix_c}.{prefix_p}.{prefix_e.Split("(").Last().Split(")").First()}/{handle_code}";
private bool regOrUpdate { get; set; }
private string currentMessage { get; set; } = string.Empty;
private IDIS_Enterprise.EnterpriseInfo[] enterprises { get; set; } = Array.Empty<IDIS_Enterprise.EnterpriseInfo>();
private Severity severity { get; set; } = Severity.Normal;
private Margin myMargin { get; set; } = Margin.Dense;
protected override async Task OnAfterRenderAsync(bool firstRender)
{
if (!firstRender) return;
GenerateHandle();
await templateSelector.value.Refresh();
}
private void GenerateHandle()
{
generatedHandleCode = handle_code = DateTime.Now.Ticks.ToString();
}
private void SelectTemplate(IDIS_Template newValue)
{
template = newValue;
_valueInfo = new IDIS_Register_Data.ValueInfo[template.Items.Length];
dateTimeProxies.Clear();
updateFlags = new bool[template.Items.Length];
for (var index = 0; index < template.Items.Length; index++)
{
var x = template.Items[index];
var info = new IDIS_Register_Data.ValueInfo
{
Type = x.IdType,
Index = index,
Data = new IDIS_Register_Data.ValueData()
{
Format = x.MetaData.Type,
Value = string.Empty
}
};
if(x.MetaData.Type is ("dateTime" or "DateTime"))
info.Data.Value = DateTime.Now.ToString(CultureInfo.InvariantCulture);
_valueInfo[index] = info;
dateTimeProxies.Add(new DateTimeProxy());
}
InvokeAsync(StateHasChanged).AndForget();
}
private async void Reg()
{
currentMessage = "正在注册标识中...";
severity=Severity.Info;
try
{
if (Regex.IsMatch(handle, IDIS_Code.AddressRegex) is false)
{
throw new Exception($"标识格式错误,正则表达式为{IDIS_Code.AddressRegex}");
}
for (var index = 0; index < template.Items.Length; index++)
{
var x = template.Items[index];
if (x.MetaData.Type is ("dateTime" or "DateTime"))
{
_valueInfo[index].Data.Value = dateTimeProxies[index].Value!.ToString()!;
}
}
await service.RegisterIDISAsync(handle, template.Version, _valueInfo);
currentMessage = "注册成功,标识码为:\n" + handle;
severity=Severity.Success;
if (string.Equals(generatedHandleCode, handle_code))
{
GenerateHandle();
}
}
catch (Exception e)
{
currentMessage = e.Message;
severity=Severity.Error;
}
await InvokeAsync(StateHasChanged);
}
private async Task<IEnumerable<string>> Search1(string arg)
{
try
{
enterprises = await enterpriseService.GetEnterprisesAsync();
return enterprises
.Select(x =>$"{x.NameCN}({x.Prefix.Split(".")[2]})")
.Where(x => x.Contains(arg))
.Distinct();
}
catch (Exception e)
{
currentMessage = e.Message;
severity=Severity.Error;
await InvokeAsync(StateHasChanged);
return Array.Empty<string>();
}
}
}