211 lines
8.7 KiB
Plaintext
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>();
|
|
}
|
|
}
|
|
|
|
} |