This commit is contained in:
parent
01f42d169d
commit
f77100bd56
|
@ -0,0 +1,21 @@
|
|||
<MudDialog>
|
||||
<DialogContent>
|
||||
<MudText>@ContentText</MudText>
|
||||
</DialogContent>
|
||||
<DialogActions>
|
||||
<MudButton OnClick="Cancel">Cancel</MudButton>
|
||||
<MudButton Color="@Color" Variant="Variant.Filled" OnClick="Submit">@ButtonText</MudButton>
|
||||
</DialogActions>
|
||||
</MudDialog>
|
||||
@code {
|
||||
[CascadingParameter] MudDialogInstance MudDialog { get; set; }
|
||||
|
||||
[Parameter] public string ContentText { get; set; }
|
||||
|
||||
[Parameter] public string ButtonText { get; set; }
|
||||
|
||||
[Parameter] public Color Color { get; set; }
|
||||
|
||||
void Submit() => MudDialog.Close(DialogResult.Ok(true));
|
||||
void Cancel() => MudDialog.Cancel();
|
||||
}
|
|
@ -0,0 +1,38 @@
|
|||
@using BITKit
|
||||
<MudStack Class="align-center" Row="true">
|
||||
<MudTextField Margin="Margin.Dense" Disabled="@isBusy" Variant="Variant.Outlined" @bind-Value="nextTag" Label="添加搜索标签,用;分隔"/>
|
||||
<MudIconButton Disabled="@isBusy" Icon="@Icons.Material.Filled.Add" OnClick="Add"></MudIconButton>
|
||||
|
||||
<MudChipSet
|
||||
disabled="@isBusy"
|
||||
AllClosable="true"
|
||||
OnClose="Closed"
|
||||
MultiSelection="true"
|
||||
Filter="true"
|
||||
SelectedChipsChanged="x=>OnSelectedChipsChanged?.Invoke(x)">
|
||||
@foreach (var value in values)
|
||||
{
|
||||
<MudChip Disabled="isBusy" Text="@value"></MudChip>
|
||||
}
|
||||
</MudChipSet>
|
||||
<MudSpacer/>
|
||||
|
||||
|
||||
</MudStack>
|
||||
@code {
|
||||
private string nextTag { get; set; } = string.Empty;
|
||||
[Parameter]
|
||||
public Action<MudChip[]> OnSelectedChipsChanged { get; set; }
|
||||
private List<string> values { get; set; }= new()
|
||||
{
|
||||
"oder","material","device","procedure","product"
|
||||
};
|
||||
public void Add()
|
||||
{
|
||||
if (string.IsNullOrEmpty(nextTag) is false)
|
||||
values.TryAdd(nextTag);
|
||||
}
|
||||
private bool isBusy { get; set; }
|
||||
|
||||
public void Closed(MudChip chip) => values.Remove(chip.Text);
|
||||
}
|
|
@ -1,12 +1,12 @@
|
|||
@inherits LayoutComponentBase
|
||||
|
||||
<MudThemeProvider @bind-IsDarkMode="@_isDarkMode"/>
|
||||
|
||||
<MudLayout>
|
||||
<MudAppBar Color="Color.Transparent" Fixed="true" Elevation="0">
|
||||
@* <MudToggleIconButton @bind-Toggled="_drawerOpen" *@
|
||||
@* Icon="@Icons.Material.Filled.Menu" *@
|
||||
@* ToggledIcon="@Icons.Material.Filled.Menu" *@
|
||||
@* Color="Color.Inherit" Edge="Edge.Start" /> *@
|
||||
<MudToggleIconButton @bind-Toggled="_drawerOpen"
|
||||
Icon="@Icons.Material.Filled.Menu"
|
||||
ToggledIcon="@Icons.Material.Filled.Menu"
|
||||
Color="Color.Inherit" Edge="Edge.Start" />
|
||||
<MudImage Src="images/header-logo.png" Width="256"></MudImage>
|
||||
<MudSpacer />
|
||||
<MudToggleIconButton @bind-Toggled="@_isDarkMode"
|
||||
|
@ -17,23 +17,25 @@
|
|||
/>
|
||||
<MudIconButton Icon="@Icons.Custom.Brands.GitHub" Color="Color.Inherit" />
|
||||
</MudAppBar>
|
||||
<MudDrawer Color="Color.Transparent" @bind-Open="_drawerOpen" ClipMode="DrawerClipMode.Always" Elevation="0">
|
||||
<MudDrawer Color="Color.Surface" @bind-Open="_drawerOpen" ClipMode="DrawerClipMode.Always" Elevation="0">
|
||||
@* <MudDrawerHeader> *@
|
||||
@* <MudText Typo="Typo.h6">导航</MudText> *@
|
||||
@* </MudDrawerHeader> *@
|
||||
<NavMenu/>
|
||||
</MudDrawer>
|
||||
<MudMainContent Class="mt-16 pa-4">
|
||||
<MudMainContent Class="mt-16 pa-4" >
|
||||
@Body
|
||||
</MudMainContent>
|
||||
</MudLayout>
|
||||
|
||||
<MudThemeProvider @bind-IsDarkMode="@_isDarkMode"/>
|
||||
<MudDialogProvider/>
|
||||
<MudSnackbarProvider/>
|
||||
|
||||
@code {
|
||||
private MudTheme Theme = new MudTheme();
|
||||
private bool _drawerOpen = true;
|
||||
private bool _isDarkMode = false;
|
||||
private bool _isDarkMode;
|
||||
|
||||
private void DrawerToggle()
|
||||
{
|
||||
|
|
|
@ -1,6 +1,15 @@
|
|||
<MudNavMenu Dense="true" Class="pa-4" Rounded="true" Color="Color.Info">
|
||||
<MudNavLink Href="" Match="NavLinkMatch.All" Icon="@Icons.Material.Filled.PlayCircleOutline">主页</MudNavLink>
|
||||
<MudNavLink Href="/query" Match="NavLinkMatch.Prefix" Icon="@Icons.Material.Outlined.DataObject">解析标识</MudNavLink>
|
||||
<MudNavLink Href="/query" Match="NavLinkMatch.All" Icon="@Icons.Material.Outlined.DataObject">解析标识</MudNavLink>
|
||||
<MudNavLink Href="template/register" Match="NavLinkMatch.Prefix" Icon="@Icons.Material.Outlined.AppRegistration">注册标识模板</MudNavLink>
|
||||
<MudNavLink Href="/register" Match="NavLinkMatch.Prefix" Icon="@Icons.Material.Outlined.Assignment">注册标识</MudNavLink>
|
||||
<MudNavGroup Icon="@Icons.Material.Outlined.OtherHouses" Title="企业" Expanded="true">
|
||||
<MudNavLink Match="NavLinkMatch.Prefix" Href="/enterprise/register" Icon="@Icons.Material.Outlined.Bookmark">注册企业</MudNavLink>
|
||||
<MudNavLink Match="NavLinkMatch.Prefix" Href="/enterprise/query" Icon="@Icons.Material.Outlined.ScreenSearchDesktop">前缀查询</MudNavLink>
|
||||
</MudNavGroup>
|
||||
<MudNavGroup Icon="@Icons.Material.Outlined.Numbers" Title="统计与查询" Expanded="true">
|
||||
<MudNavLink Match="NavLinkMatch.All" Href="/query/tags" Icon="@Icons.Material.Outlined.Scoreboard">标签查询</MudNavLink>
|
||||
<MudNavLink Match="NavLinkMatch.Prefix" Href="/query/registration" Icon="@Icons.Material.Outlined.Scoreboard">最新标识查询</MudNavLink>
|
||||
</MudNavGroup>
|
||||
<MudNavLink Href="/FAQ" Match="NavLinkMatch.All" Icon="@Icons.Material.Outlined.QuestionAnswer">FAQ常见问题</MudNavLink>
|
||||
</MudNavMenu>
|
||||
|
|
|
@ -0,0 +1,341 @@
|
|||
@page "/Enterprise/Register"
|
||||
@using IDIS.Models
|
||||
@using Cysharp.Threading.Tasks
|
||||
@using System.Text
|
||||
@using BITKit.Crypto
|
||||
@inject IDIS_EnterpriseService enterpriseService
|
||||
<MudText Typo="Typo.h3" GutterBottom="true">企业注册</MudText>
|
||||
<MudStack>
|
||||
@* <MudTextField *@
|
||||
@* @bind-Value="@enterprise.EnterpriseApply.Prefix" *@
|
||||
@* Variant="Variant.Outlined" *@
|
||||
@* HelperText="例如:88.123.99" *@
|
||||
@* Label="企业前缀"></MudTextField> *@
|
||||
<MudGrid>
|
||||
<MudItem xs="2">
|
||||
<MudPaper Class="pa-4 mb-4">
|
||||
<MudText>用户信息</MudText>
|
||||
<MudTextField Margin="@myMargin" Required="true" @bind-Value="@enterprise.SystemUser.UserName" Label="用户名"></MudTextField>
|
||||
<MudTextField Margin="@myMargin" Required="true" @bind-Value="@enterprise.SystemUser.EMail" InputType="InputType.Email" Label="电子邮箱"></MudTextField>
|
||||
<MudTextField Margin="@myMargin" Required="true" @bind-Value="@enterprise.SystemUser.Mobile" InputType="InputType.Telephone" Label="手机号"></MudTextField>
|
||||
<MudTextField Margin="@myMargin" Required="true" @bind-Value="@enterprise.SystemUser.Password" Label="密码" InputType="InputType.Password"></MudTextField>
|
||||
<MudTextField Margin="@myMargin" Required="true" @bind-Value="@enterprise.SystemUser.Remark" Label="备注"></MudTextField>
|
||||
</MudPaper>
|
||||
</MudItem>
|
||||
<MudItem xs="2">
|
||||
<MudPaper Class="pa-4">
|
||||
<MudText>照片上传</MudText>
|
||||
@if (string.IsNullOrEmpty(enterprise.EnterpriseApply.CreditImageContent) is false)
|
||||
{
|
||||
var base64 = $"data:image/png;base64,{enterprise.EnterpriseApply.CreditImageContent}";
|
||||
<MudImage Fluid="true" Src="@base64"/>
|
||||
}
|
||||
<MudFileUpload T="IBrowserFile" FilesChanged="UploadLicense">
|
||||
<ButtonTemplate>
|
||||
<MudButton FullWidth="true" HtmlTag="label"
|
||||
Variant="Variant.Filled"
|
||||
Color="Color.Primary"
|
||||
StartIcon="@Icons.Material.Filled.CloudUpload"
|
||||
for="@context.Id">
|
||||
营业执照
|
||||
</MudButton>
|
||||
</ButtonTemplate>
|
||||
</MudFileUpload>
|
||||
@if (string.IsNullOrEmpty(enterprise.EnterpriseApply.LegalPersonIdImageFrontContent) is false)
|
||||
{
|
||||
var base64 = $"data:image/png;base64,{enterprise.EnterpriseApply.LegalPersonIdImageFrontContent}";
|
||||
<MudImage Fluid="true" Src="@base64"/>
|
||||
}
|
||||
<MudFileUpload T="IBrowserFile" FilesChanged="UploadLegalPersonIdFront">
|
||||
<ButtonTemplate>
|
||||
<MudButton FullWidth="true" HtmlTag="label"
|
||||
Variant="Variant.Filled"
|
||||
Color="Color.Primary"
|
||||
StartIcon="@Icons.Material.Filled.CloudUpload"
|
||||
for="@context.Id">
|
||||
法人身份证正面
|
||||
</MudButton>
|
||||
</ButtonTemplate>
|
||||
</MudFileUpload>
|
||||
@if (string.IsNullOrEmpty(enterprise.EnterpriseApply.LegalPersonIdImageBackContent) is false)
|
||||
{
|
||||
var base64 = $"data:image/png;base64,{enterprise.EnterpriseApply.LegalPersonIdImageBackContent}";
|
||||
<MudImage Fluid="true" Src="@base64"/>
|
||||
}
|
||||
<MudFileUpload T="IBrowserFile" FilesChanged="UploadLegalPersonIdBack">
|
||||
<ButtonTemplate>
|
||||
<MudButton FullWidth="true" HtmlTag="label"
|
||||
Variant="Variant.Filled"
|
||||
Color="Color.Primary"
|
||||
StartIcon="@Icons.Material.Filled.CloudUpload"
|
||||
for="@context.Id">
|
||||
法人身份证反面
|
||||
</MudButton>
|
||||
</ButtonTemplate>
|
||||
</MudFileUpload>
|
||||
</MudPaper>
|
||||
</MudItem>
|
||||
<MudItem xs="4" Class="d-flex">
|
||||
<MudPaper Class="pa-4 ">
|
||||
<MudText>企业信息</MudText>
|
||||
<MudStack Row="true">
|
||||
<MudStack>
|
||||
<MudTextField Margin="@myMargin" Required="true" @bind-Value="@enterprise.EnterpriseApply.Prefix" Label="前缀" HelperText="例如:88.123.99"></MudTextField>
|
||||
<MudTextField Margin="@myMargin" Required="true" @bind-Value="@enterprise.EnterpriseApply.NameCN" Label="企业名称"></MudTextField>
|
||||
<MudTextField Margin="@myMargin" Required="true" @bind-Value="@enterprise.EnterpriseApply.EMail" InputType="InputType.Email" Label="电子邮箱"></MudTextField>
|
||||
<MudTextField Margin="@myMargin" Required="true" @bind-Value="@enterprise.EnterpriseApply.AddressCN" Label="地址"></MudTextField>
|
||||
<MudTextField Margin="@myMargin" Required="true" @bind-Value="@enterprise.EnterpriseApply.CityCode" Label="城市代码"></MudTextField>
|
||||
<MudTextField Margin="@myMargin" Required="true" @bind-Value="@enterprise.EnterpriseApply.CountyCode" Label="县代码"></MudTextField>
|
||||
<MudTextField Margin="@myMargin" Required="true" @bind-Value="@enterprise.EnterpriseApply.CreditType" Label="信用类型"></MudTextField>
|
||||
<MudTextField Margin="@myMargin" Required="true" @bind-Value="@enterprise.EnterpriseApply.Descption" Label="企业描述"></MudTextField>
|
||||
</MudStack>
|
||||
<MudStack>
|
||||
<MudTextField Margin="@myMargin"Required="true" @bind-Value="@enterprise.EnterpriseApply.CreditCode" Label="企业信用代码" HelperText="例如:91500000MA60F2F94T"></MudTextField>
|
||||
<MudTextField Margin="@myMargin"Required="true" @bind-Value="@enterprise.EnterpriseApply.ProvinceCode" Label="省份代码"></MudTextField>
|
||||
<MudTextField Margin="@myMargin"Required="true" @bind-Value="@enterprise.EnterpriseApply.WebSite" InputType="InputType.Url" Label="企业网站"></MudTextField>
|
||||
<MudTextField Margin="@myMargin"Required="true" @bind-Value="@enterprise.EnterpriseApply.LegalPersonIdNumber" Label="法人身份证号"></MudTextField>
|
||||
<MudTextField Margin="@myMargin" Required="true" @bind-Value="@enterprise.EnterpriseApply.LegalPersonIdName" Label="法人姓名"></MudTextField>
|
||||
<MudTextField Margin="@myMargin"Required="true" @bind-Value="@enterprise.EnterpriseApply.Mobile" InputType="InputType.Telephone" Label="企业手机"></MudTextField>
|
||||
<MudTextField Margin="@myMargin" Required="true" @bind-Value="@enterprise.EnterpriseApply.Remarks" Label="企业备注"></MudTextField>
|
||||
|
||||
<MudTextField Required="true" @bind-Value="@enterprise.EnterpriseApply.ContactName" Label="联系人姓名"></MudTextField>
|
||||
</MudStack>
|
||||
</MudStack>
|
||||
</MudPaper>
|
||||
</MudItem>
|
||||
<MudItem xs="4">
|
||||
<MudPaper Class="pa-4">
|
||||
<MudStack Row="true">
|
||||
<MudButton OnClick="@Verification" Variant="Variant.Filled" Color="Color.Primary" DisableElevation="true">验证</MudButton>
|
||||
<MudButton OnClick="()=>enterprise=new()" Variant="Variant.Filled" Color="Color.Secondary" DisableElevation="true" Class="mx-2">重置</MudButton>
|
||||
<MudButton OnClick="()=>reportBuilder.Clear()" Variant="Variant.Filled" DisableElevation="true">重置验证</MudButton>
|
||||
<MudSpacer/>
|
||||
<MudButton OnClick="()=>Register().Forget()" Color="Color.Success" Variant="Variant.Filled" DisableElevation="true">注册企业</MudButton>
|
||||
</MudStack>
|
||||
</MudPaper>
|
||||
<MudPaper Class="pa-4">
|
||||
<MudText Typo="Typo.subtitle2">表单验证</MudText>
|
||||
<MudAlert Severity="@severity">@currentMessage</MudAlert>
|
||||
@foreach (var line in reportBuilder.ToString().Split('\n'))
|
||||
{
|
||||
<MudText Typo="Typo.body2">@line</MudText>
|
||||
}
|
||||
</MudPaper>
|
||||
</MudItem>
|
||||
</MudGrid>
|
||||
</MudStack>
|
||||
|
||||
|
||||
@code {
|
||||
public IDIS_Enterprise enterprise { get; set; }= new();
|
||||
private string currentMessage { get; set; } = "我们先完成企业信息填写";
|
||||
private Severity severity { get; set; } = Severity.Normal;
|
||||
private StringBuilder reportBuilder { get; set; } = new();
|
||||
private Margin myMargin { get; set; } = Margin.Dense;
|
||||
|
||||
private void Verification()
|
||||
{
|
||||
reportBuilder.Clear();
|
||||
if(string.IsNullOrEmpty(enterprise.EnterpriseApply.Prefix))
|
||||
{
|
||||
reportBuilder.AppendLine("企业前缀不能为空");
|
||||
}
|
||||
if(string.IsNullOrEmpty(enterprise.EnterpriseApply.CreditCode))
|
||||
{
|
||||
reportBuilder.AppendLine("信用代码不能为空");
|
||||
}
|
||||
if (string.IsNullOrEmpty(enterprise.SystemUser.UserName))
|
||||
{
|
||||
reportBuilder.AppendLine("用户名不能为空");
|
||||
}
|
||||
if (string.IsNullOrEmpty(enterprise.SystemUser.EMail))
|
||||
{
|
||||
reportBuilder.AppendLine("电子邮箱不能为空");
|
||||
}
|
||||
if (string.IsNullOrEmpty(enterprise.SystemUser.Mobile))
|
||||
{
|
||||
reportBuilder.AppendLine("手机号不能为空");
|
||||
}
|
||||
if (string.IsNullOrEmpty(enterprise.SystemUser.Password))
|
||||
{
|
||||
reportBuilder.AppendLine("密码不能为空");
|
||||
}
|
||||
if (string.IsNullOrEmpty(enterprise.EnterpriseApply.NameCN))
|
||||
{
|
||||
reportBuilder.AppendLine("企业名称不能为空");
|
||||
}
|
||||
if (string.IsNullOrEmpty(enterprise.EnterpriseApply.EMail))
|
||||
{
|
||||
reportBuilder.AppendLine("企业电子邮箱不能为空");
|
||||
}
|
||||
if (string.IsNullOrEmpty(enterprise.EnterpriseApply.AddressCN))
|
||||
{
|
||||
reportBuilder.AppendLine("企业地址不能为空");
|
||||
}
|
||||
if (string.IsNullOrEmpty(enterprise.EnterpriseApply.CityCode))
|
||||
{
|
||||
reportBuilder.AppendLine("城市代码不能为空");
|
||||
}
|
||||
if (string.IsNullOrEmpty(enterprise.EnterpriseApply.CountyCode))
|
||||
{
|
||||
reportBuilder.AppendLine("县代码不能为空");
|
||||
}
|
||||
|
||||
if (string.IsNullOrEmpty(enterprise.EnterpriseApply.Descption))
|
||||
{
|
||||
reportBuilder.AppendLine("企业描述不能为空");
|
||||
}
|
||||
if (string.IsNullOrEmpty(enterprise.EnterpriseApply.ProvinceCode))
|
||||
{
|
||||
reportBuilder.AppendLine("省份代码不能为空");
|
||||
}
|
||||
if (string.IsNullOrEmpty(enterprise.EnterpriseApply.WebSite))
|
||||
{
|
||||
reportBuilder.AppendLine("企业网站不能为空");
|
||||
}
|
||||
if (string.IsNullOrEmpty(enterprise.EnterpriseApply.LegalPersonIdNumber))
|
||||
{
|
||||
reportBuilder.AppendLine("法人身份证号不能为空");
|
||||
}
|
||||
if (string.IsNullOrEmpty(enterprise.EnterpriseApply.LegalPersonIdName))
|
||||
{
|
||||
reportBuilder.AppendLine("法人姓名不能为空");
|
||||
}
|
||||
if (string.IsNullOrEmpty(enterprise.EnterpriseApply.Mobile))
|
||||
{
|
||||
reportBuilder.AppendLine("企业手机不能为空");
|
||||
}
|
||||
if (string.IsNullOrEmpty(enterprise.EnterpriseApply.Remarks))
|
||||
{
|
||||
reportBuilder.AppendLine("企业备注不能为空");
|
||||
}
|
||||
if (string.IsNullOrEmpty(enterprise.EnterpriseApply.ContactName))
|
||||
{
|
||||
reportBuilder.AppendLine("联系人姓名不能为空");
|
||||
}
|
||||
if (string.IsNullOrEmpty(enterprise.EnterpriseApply.CreditImageContent))
|
||||
{
|
||||
reportBuilder.AppendLine("营业执照不能为空");
|
||||
}
|
||||
if (string.IsNullOrEmpty(enterprise.EnterpriseApply.LegalPersonIdImageFrontContent))
|
||||
{
|
||||
reportBuilder.AppendLine("法人身份证正面不能为空");
|
||||
}
|
||||
if (string.IsNullOrEmpty(enterprise.EnterpriseApply.LegalPersonIdImageBackContent))
|
||||
{
|
||||
reportBuilder.AppendLine("法人身份证反面不能为空");
|
||||
}
|
||||
if (reportBuilder.Length > 0)
|
||||
{
|
||||
currentMessage = "表单验证失败";
|
||||
severity = Severity.Error;
|
||||
}
|
||||
else
|
||||
{
|
||||
currentMessage = "表单验证成功";
|
||||
severity = Severity.Success;
|
||||
}
|
||||
InvokeAsync(StateHasChanged).AndForget();
|
||||
}
|
||||
|
||||
private async UniTask Register()
|
||||
{
|
||||
Verification();
|
||||
if(reportBuilder.Length>0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
severity = Severity.Normal;
|
||||
currentMessage = "正在验证表单";
|
||||
await InvokeAsync(StateHasChanged);
|
||||
await Task.Delay(1000);
|
||||
try
|
||||
{
|
||||
BITCrypto crypto = new BITCrypto();
|
||||
currentMessage = "正在注册企业";
|
||||
await enterpriseService.RegisterAsync(enterprise.SystemUser
|
||||
with{
|
||||
Password =crypto.Hash(enterprise.SystemUser.Password)
|
||||
}, enterprise.EnterpriseApply);
|
||||
currentMessage = "企业注册成功";
|
||||
reportBuilder.Clear();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
currentMessage = e.Message;
|
||||
severity = Severity.Error;
|
||||
}
|
||||
await InvokeAsync(StateHasChanged);
|
||||
}
|
||||
|
||||
private async void UploadLicense(IBrowserFile? obj)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (obj is null)
|
||||
{
|
||||
reportBuilder.AppendLine("营业执照不能为空");
|
||||
return;
|
||||
}
|
||||
using var ms = new MemoryStream();
|
||||
await obj.OpenReadStream().CopyToAsync(ms);
|
||||
enterprise.EnterpriseApply.CreditImageContent = Convert.ToBase64String(ms.ToArray());
|
||||
|
||||
currentMessage = "上传成功";
|
||||
severity = Severity.Success;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
currentMessage = e.Message;
|
||||
severity = Severity.Error;
|
||||
}
|
||||
await InvokeAsync(StateHasChanged);
|
||||
}
|
||||
private async void UploadLegalPersonIdFront(IBrowserFile? obj)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (obj is null)
|
||||
{
|
||||
reportBuilder.AppendLine("法人身份证正面不能为空");
|
||||
return;
|
||||
}
|
||||
using var ms = new MemoryStream();
|
||||
await obj.OpenReadStream().CopyToAsync(ms);
|
||||
enterprise.EnterpriseApply.LegalPersonIdImageFrontContent = Convert.ToBase64String(ms.ToArray());
|
||||
|
||||
currentMessage = "上传成功";
|
||||
severity = Severity.Success;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
currentMessage = e.Message;
|
||||
severity = Severity.Error;
|
||||
}
|
||||
await InvokeAsync(StateHasChanged);
|
||||
}
|
||||
private async void UploadLegalPersonIdBack(IBrowserFile? obj)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (obj is null)
|
||||
{
|
||||
reportBuilder.AppendLine("法人身份证杯面不能为空");
|
||||
return;
|
||||
}
|
||||
using var ms = new MemoryStream();
|
||||
await obj.OpenReadStream().CopyToAsync(ms);
|
||||
enterprise.EnterpriseApply.LegalPersonIdImageBackContent = Convert.ToBase64String(ms.ToArray());
|
||||
|
||||
currentMessage = "上传成功";
|
||||
severity = Severity.Success;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
currentMessage = e.Message;
|
||||
severity = Severity.Error;
|
||||
}
|
||||
await InvokeAsync(StateHasChanged);
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,63 @@
|
|||
@page "/FAQ"
|
||||
<MudText Typo="Typo.h3">FAQ,常见问题都在这里</MudText>
|
||||
<MudDivider DividerType="DividerType.Middle" Class="my-6"/>
|
||||
<MudStack Spacing="2">
|
||||
|
||||
<MudText Typo="Typo.h4">如何通过标签查询标识</MudText>
|
||||
<MudAlert>http://host:port/api/GetQueryByTag?tags=tag1;tag2;tag3&today=false</MudAlert>
|
||||
<MudText><b>today</b>是可选参数</MudText>
|
||||
|
||||
<MudDivider DividerType="DividerType.Middle" Class="my-6"/>
|
||||
|
||||
<MudText Typo="Typo.h4">如何通过标签查询解析记录</MudText>
|
||||
<MudAlert>http://host:port/api/queryRecords/by?tags=tag1;tag2;tag3&today=false</MudAlert>
|
||||
<MudText><b>today</b>是可选参数</MudText>
|
||||
|
||||
<MudDivider DividerType="DividerType.Middle" Class="my-6"/>
|
||||
|
||||
<MudText Typo="Typo.h4">为啥子没得什么数据可以用</MudText>
|
||||
<MudText>开始生产后就有了 : D,或者你可以去标识注册那整一堆</MudText>
|
||||
|
||||
<MudDivider DividerType="DividerType.Middle" Class="my-6"/>
|
||||
|
||||
<MudText Typo="Typo.h4">我怎么知道这些Tag是啥子东西</MudText>
|
||||
<MudAlert><MudLink Href="http://server.bitfall.icu:3000/root/IDIS.Model.YL106">YL106.Models</MudLink></MudAlert>
|
||||
|
||||
<MudDivider DividerType="DividerType.Middle" Class="my-6"/>
|
||||
|
||||
<MudText Typo="Typo.h4">仓库注册解析操作标识最新十条</MudText>
|
||||
<MudText Typo="Typo.h5">注册记录</MudText>
|
||||
<MudText>查询所有标签为<b>procedure_transport</b>的记录</MudText>
|
||||
<MudText>然后手动解析10条记录</MudText>
|
||||
<MudText Typo="Typo.h5">解析记录</MudText>
|
||||
<MudText>查询所有标签为<b>procedure_transport</b>的解析记录</MudText>
|
||||
|
||||
<MudDivider DividerType="DividerType.Middle" Class="my-6"/>
|
||||
|
||||
<MudText Typo="Typo.h4">每个新工单对所需的原材料注册的5条标识(五种原材料)</MudText>
|
||||
<MudText>解析该工单的标识,从<b>原材料</b>属性中获取需要的标识</MudText>
|
||||
|
||||
<MudDivider DividerType="DividerType.Middle" Class="my-6"/>
|
||||
|
||||
<MudText Typo="Typo.h4">每种成品注册的标识总量和解析总量(我这边传递一个参数查询具体某一种) 四种笔成品注册的标识总量和解析总量</MudText>
|
||||
<MudText>同<b>仓库注册解析操作标识最新十条</b>,查询标签为<b>product_LS</b></MudText>
|
||||
|
||||
<MudDivider DividerType="DividerType.Middle" Class="my-6"/>
|
||||
|
||||
<MudText Typo="Typo.h4">生产任务的标识注册总量和解析总量</MudText>
|
||||
<MudText>同<b>仓库注册解析操作标识最新十条</b>,查询标签为<b>procedure_assembly</b></MudText>
|
||||
|
||||
<MudDivider DividerType="DividerType.Middle" Class="my-6"/>
|
||||
|
||||
<MudText Typo="Typo.h4">每个工单的工单标识和生产成品标识</MudText>
|
||||
<MudText>同<b>仓库注册解析操作标识最新十条</b>,查询标签分别为<b>oder</b>和<b>product</b></MudText>
|
||||
|
||||
<MudDivider DividerType="DividerType.Middle" Class="my-6"/>
|
||||
|
||||
<MudText Typo="Typo.h4">出库任务的任务标识 生产任务标识</MudText>
|
||||
<MudText>同<b>每个新工单对所需的原材料注册的5条标识(五种原材料)</b>,查询标签为<b>procedure_transport</b>从标识中获取生产任务标识</MudText>
|
||||
</MudStack>
|
||||
|
||||
@code {
|
||||
|
||||
}
|
|
@ -0,0 +1,92 @@
|
|||
@using IDIS.Services
|
||||
@using IDIS.Models
|
||||
@using IDIS.Services.Models
|
||||
@using Microsoft.EntityFrameworkCore
|
||||
@using IDIS_Server_SIM.Data
|
||||
@using Cysharp.Threading.Tasks
|
||||
@inject IDIS_Service_MySQLBased service
|
||||
@inject QueryService queryService
|
||||
@inject IDIS_Statistics_MySQLBased statistics
|
||||
@page "/query/registration"
|
||||
|
||||
<MudText Typo="Typo.h3" GutterBottom="true">最新的标识动态</MudText>
|
||||
<MudGrid>
|
||||
<MudItem xs="3">
|
||||
<MudAlert>数据图表</MudAlert>
|
||||
<div>
|
||||
<MudChart ChartSeries="@series" ChartType="ChartType.Line"></MudChart>
|
||||
</div>
|
||||
</MudItem>
|
||||
<MudItem xs="9">
|
||||
<MudAlert>搜索条件</MudAlert>
|
||||
<DynamicTags OnSelectedChipsChanged="OnSelectedChipsChanged"></DynamicTags>
|
||||
</MudItem>
|
||||
</MudGrid>
|
||||
<MudGrid>
|
||||
<MudItem xs="6">
|
||||
<MudAlert>最新注册的标识</MudAlert>
|
||||
|
||||
@foreach (var item in data)
|
||||
{
|
||||
<MudStack Row="true" Class="align-center">
|
||||
<MudAlert Severity="Severity.Info">@item.Handle</MudAlert>
|
||||
<MudText>@item.RegistrationTime</MudText>
|
||||
</MudStack>
|
||||
}
|
||||
</MudItem>
|
||||
<MudItem xs="6">
|
||||
<MudAlert>最新解析的标识</MudAlert>
|
||||
@foreach (var item in queryRecords)
|
||||
{
|
||||
<MudStack Row="true" Class="align-center">
|
||||
<MudAlert Severity="Severity.Info">@item.Handle</MudAlert>
|
||||
<MudText>@item.QueryTime</MudText>
|
||||
</MudStack>
|
||||
|
||||
}
|
||||
</MudItem>
|
||||
</MudGrid>
|
||||
|
||||
|
||||
|
||||
@code {
|
||||
private IDIS_SQL_Handle[] data { get; set; } = Array.Empty<IDIS_SQL_Handle>();
|
||||
private IDIS_QueryRecord[] queryRecords { get; set; } = Array.Empty<IDIS_QueryRecord>();
|
||||
private string[] handles { get; set; } = Array.Empty<string>();
|
||||
private string[] tags { get; set; } = Array.Empty<string>();
|
||||
public List<ChartSeries> series { get; set; }= new List<ChartSeries>()
|
||||
{
|
||||
new ChartSeries() { Name = "注册数量", Data = new double[] { 90, 79, 72, 69, 62, 62, 55, 65, 70 } },
|
||||
new ChartSeries() { Name = "解析数量", Data = new double[] { 90, 79, 72, 69, 62, 62, 55, 65, 70 } },
|
||||
};
|
||||
|
||||
protected override async Task OnAfterRenderAsync(bool firstRender)
|
||||
{
|
||||
if (!firstRender) return;
|
||||
await Rebuild();
|
||||
await InvokeAsync(StateHasChanged);
|
||||
}
|
||||
private async void OnSelectedChipsChanged(MudChip[] obj)
|
||||
{
|
||||
tags = obj.Select(x => x.Text).ToArray();
|
||||
handles = await queryService.QueryByTag(false, tags);
|
||||
await Rebuild();
|
||||
await InvokeAsync(StateHasChanged);
|
||||
}
|
||||
|
||||
private async UniTask Rebuild()
|
||||
{
|
||||
data = (await service.handles.ToArrayAsync())
|
||||
.Where(x=>handles.Length is 0 || handles.Contains(x.Handle))
|
||||
.OrderBy(x=>x.RegistrationTime).Reverse().ToArray();
|
||||
queryRecords = (await queryService.QueryRecordsByTag(false, tags));
|
||||
|
||||
series[0].Data = data
|
||||
.GroupBy(x => x.RegistrationTime.Date.Day)
|
||||
.Select(x => (double)x.Count()).ToArray();
|
||||
|
||||
series[1].Data = queryRecords
|
||||
.GroupBy(x => x.QueryTime.Date.Day)
|
||||
.Select(x => (double)x.Count()).ToArray();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
@page "/Enterprise/Query"
|
||||
<h3>使用管理员账户登录查看</h3>
|
||||
|
||||
@code {
|
||||
|
||||
}
|
|
@ -9,7 +9,7 @@
|
|||
<MudTextField
|
||||
@bind-Value="@handle"
|
||||
HelperText="例如:88.123.99/202402051710"
|
||||
Label="Normal"
|
||||
Label="在这里输入需要解析的标识"
|
||||
Variant="Variant.Outlined"
|
||||
Adornment="Adornment.End"
|
||||
AdornmentIcon="@Icons.Material.Filled.Search"
|
||||
|
|
|
@ -0,0 +1,84 @@
|
|||
@using BITKit
|
||||
@using IDIS_Server_SIM.Data
|
||||
@using IDIS.Models
|
||||
@using IDIS.Services
|
||||
@inject QueryService queryService
|
||||
@inject IDIS_Service service
|
||||
@page "/query/tags"
|
||||
<MudText Typo="Typo.h3" GutterBottom="true">通过标签查询标识</MudText>
|
||||
<MudText>多选标签,以过滤指定类型的标识</MudText>
|
||||
<MudText>从选中多个标签开始</MudText>
|
||||
|
||||
<MudStack>
|
||||
|
||||
<MudStack Class="align-center" Row="true">
|
||||
<MudCheckBox @bind-Value="@today" Label="只搜索今天的标识"></MudCheckBox>
|
||||
<DynamicTags OnSelectedChipsChanged="OnSelectedChipsChanged"></DynamicTags>
|
||||
</MudStack>
|
||||
@if (isBusy)
|
||||
{
|
||||
<MudProgressLinear Color="Color.Primary" Indeterminate="true" Class="my-7"/>
|
||||
}
|
||||
else
|
||||
{
|
||||
@foreach (var data in queryData)
|
||||
{
|
||||
<MudStack Row="true" Class="align-center">
|
||||
<MudAlert>@data.Handle</MudAlert>
|
||||
@if (data.Value.Length > 0)
|
||||
{
|
||||
@foreach (var tag in data.Value.First().Data.Value.Split(";"))
|
||||
{
|
||||
<MudChip>@tag</MudChip>
|
||||
}
|
||||
}
|
||||
</MudStack>
|
||||
}
|
||||
}
|
||||
</MudStack>
|
||||
|
||||
|
||||
@code
|
||||
{
|
||||
private bool today { get; set; }
|
||||
|
||||
private bool isBusy { get; set; }
|
||||
|
||||
private string[] handles = Array.Empty<string>();
|
||||
private IDIS_Query_Data[] queryData { get; set; }= Array.Empty<IDIS_Query_Data>();
|
||||
}
|
||||
@code {
|
||||
|
||||
private async void OnSelectedChipsChanged(MudChip[] obj)
|
||||
{
|
||||
isBusy = true;
|
||||
await InvokeAsync(StateHasChanged);
|
||||
var tags = obj.Select(x => x.Text).ToArray();
|
||||
|
||||
if (tags.Length is 0)
|
||||
{
|
||||
handles = Array.Empty<string>();
|
||||
queryData = Array.Empty<IDIS_Query_Data>();
|
||||
await InvokeAsync(StateHasChanged);
|
||||
isBusy = false;
|
||||
return;
|
||||
}
|
||||
handles = await queryService.QueryByTag(today, tags);
|
||||
queryData = new IDIS_Query_Data[handles.Length];
|
||||
for (var index = 0; index < handles.Length; index++)
|
||||
{
|
||||
try
|
||||
{
|
||||
var handle = handles[index];
|
||||
queryData[index] = await service.QueryAsync(handle);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Console.WriteLine(e);
|
||||
}
|
||||
}
|
||||
queryData = queryData.Where(x => string.IsNullOrEmpty(x.Handle) is false).ToArray();
|
||||
isBusy = false;
|
||||
await InvokeAsync(StateHasChanged);
|
||||
}
|
||||
}
|
|
@ -5,37 +5,17 @@
|
|||
@using BITKit
|
||||
@using System.Text.RegularExpressions
|
||||
@using System.ComponentModel
|
||||
@using System.Globalization
|
||||
@inject ILogger<TemlateRegister> logger
|
||||
@inject ISnackbar Snackbar
|
||||
@inject IDIS_TemplateService templateService
|
||||
@inject IDIS_EnterpriseService enterpriseService
|
||||
@inject IDIS_Service service
|
||||
@inherits OwningComponentBase
|
||||
<MudText Typo="Typo.h3" GutterBottom="true">注册标识</MudText>
|
||||
<MudText>当我们创建标识模板后<br/>我们就可以通过标识模板快速注册标识</MudText>
|
||||
<MudGrid>
|
||||
<MudItem xs="3">
|
||||
<div class="d-flex flex-grow-1 gap-4 py-2">
|
||||
<MudText Class="flex-1 d-flex" Typo="Typo.h6">选择标识模板</MudText>
|
||||
<MudButton Class="d-flex" Variant="Variant.Outlined" OnClick="() => Refresh().Forget()">刷新</MudButton>
|
||||
</div>
|
||||
@if (templates.Length is 0)
|
||||
{
|
||||
<MudAlert Severity="Severity.Normal">模板为空</MudAlert>
|
||||
}
|
||||
else
|
||||
{
|
||||
<MudStack>
|
||||
@foreach (var item in templates)
|
||||
{
|
||||
<MudButton
|
||||
Class="pa-2"
|
||||
Variant="Variant.Outlined"
|
||||
OnClick="() => SelectTemplate(item)">
|
||||
@(item.Prefix)/@(item.Version)
|
||||
</MudButton>
|
||||
}
|
||||
</MudStack>
|
||||
}
|
||||
<TemplateSelector Reference="templateSelector" OnSelectTemplate="SelectTemplate"></TemplateSelector>
|
||||
</MudItem>
|
||||
<MudItem xs="1">
|
||||
</MudItem>
|
||||
|
@ -43,12 +23,13 @@
|
|||
<MudStack>
|
||||
<MudText Typo="Typo.h6">模板信息</MudText>
|
||||
<MudStack Row="true">
|
||||
<MudAutocomplete Disabled="true" T="string" Label="国家" @bind-Value="prefix_c" SearchFunc="@Search1"
|
||||
<MudAutocomplete Variant="Variant.Text" Disabled="true" T="string" Label="国家" @bind-Value="prefix_c" SearchFunc="@Search1"
|
||||
CoerceText="true" CoerceValue="true" />
|
||||
<MudAutocomplete Disabled="true" T="string" Label="区域" @bind-Value="prefix_p" SearchFunc="@Search1"
|
||||
<MudAutocomplete Variant="Variant.Text" Disabled="true" T="string" Label="区域" @bind-Value="prefix_p" SearchFunc="@Search1"
|
||||
CoerceText="true" CoerceValue="true"/>
|
||||
<MudAutocomplete Disabled="true" T="string" Label="企业" @bind-Value="prefix_e" 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="点击右侧图标生成标识"
|
||||
|
@ -60,17 +41,40 @@
|
|||
</MudStack>
|
||||
|
||||
<MudText Typo="Typo.h6">注册值</MudText>
|
||||
<MudStack Spacing="0">
|
||||
@for(var index=0;index<_valueInfo.Length;index++)
|
||||
{
|
||||
var registerInfo = _valueInfo[index];
|
||||
var templateInfo = this.template.Items[index];
|
||||
<MudTextField bind-Value="@registerInfo.Data.Value" HelperText="@templateInfo.IdType" T="string" Counter="25" Immediate="true" Label="@templateInfo.Name" Variant="Variant.Text" />
|
||||
}
|
||||
@foreach (var x in _valueInfo)
|
||||
{
|
||||
}
|
||||
</MudStack>
|
||||
<MudStack Spacing="0">
|
||||
@for(var index=0;index<_valueInfo.Length;index++)
|
||||
{
|
||||
var i = index;
|
||||
var templateInfo = this.template.Items[index];
|
||||
|
||||
@* @if (templateInfo.MetaData.Type is ("dateTime" or "DateTime")) *@
|
||||
@* { *@
|
||||
@* $1$ <MudDatePicker DateFormat="y" Label="@templateInfo.Name" @bind-Date="registerDateTimes[i].Value"/> #1# *@
|
||||
@* <InputDate *@
|
||||
@* Type="InputDateType.DateTimeLocal" *@
|
||||
@* class="form-control" *@
|
||||
@* id="ClockIn" *@
|
||||
@* @bind-Value="registerDateTimes[i].Value" *@
|
||||
@* @bind-Value:format="mm/dd/yyyy hh:mm tt" *@
|
||||
@* placeholder="Clock In" /> *@
|
||||
@* } *@
|
||||
@* 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>
|
||||
@if (string.IsNullOrEmpty(currentMessage) is false)
|
||||
{
|
||||
<MudAlert Severity="severity">@currentMessage</MudAlert>
|
||||
}
|
||||
<div class="d-flex">
|
||||
<MudButton Class="d-flex flex-grow-1" Variant="Variant.Outlined" OnClick="Reg">注册标识:@handle</MudButton>
|
||||
</div>
|
||||
|
@ -78,7 +82,13 @@
|
|||
</MudItem>
|
||||
</MudGrid>
|
||||
@code {
|
||||
private IDIS_Template[] templates = Array.Empty<IDIS_Template>();
|
||||
public class DateTimeProxy
|
||||
{
|
||||
public DateTime? Value { get; set; } = DateTime.Now;
|
||||
}
|
||||
|
||||
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>();
|
||||
|
@ -86,18 +96,24 @@
|
|||
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 handle=> $"{prefix_c}.{prefix_p}.{prefix_e}/{handle_code}";
|
||||
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 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;
|
||||
|
||||
async UniTask Refresh()
|
||||
protected override async Task OnAfterRenderAsync(bool firstRender)
|
||||
{
|
||||
Snackbar.Add("正在刷新模板");
|
||||
templates = await templateService.ToArrayAsync();
|
||||
await InvokeAsync(StateHasChanged);
|
||||
Snackbar.Add("模板刷新完成");
|
||||
if (!firstRender) return;
|
||||
GenerateHandle();
|
||||
await templateSelector.value.Refresh();
|
||||
}
|
||||
private void GenerateHandle()
|
||||
{
|
||||
handle_code = DateTime.Now.Ticks.ToString();
|
||||
generatedHandleCode = handle_code = DateTime.Now.Ticks.ToString();
|
||||
}
|
||||
private void SelectTemplate(IDIS_Template newValue)
|
||||
{
|
||||
|
@ -108,7 +124,7 @@
|
|||
var x = template.Items[index];
|
||||
var info = new IDIS_Register_Data.ValueInfo
|
||||
{
|
||||
Type = x.Name,
|
||||
Type = x.IdType,
|
||||
Index = index,
|
||||
Data = new IDIS_Register_Data.ValueData()
|
||||
{
|
||||
|
@ -116,12 +132,17 @@
|
|||
Value = string.Empty
|
||||
}
|
||||
};
|
||||
if(x.MetaData.Type is ("dateTime" or "DateTime"))
|
||||
info.Data.Value = DateTime.Now.ToString(CultureInfo.InvariantCulture);
|
||||
_valueInfo[index] = info;
|
||||
}
|
||||
InvokeAsync(StateHasChanged).AndForget();
|
||||
}
|
||||
|
||||
private async void Reg()
|
||||
{
|
||||
currentMessage = "正在注册标识中...";
|
||||
severity=Severity.Info;
|
||||
try
|
||||
{
|
||||
if (Regex.IsMatch(handle, IDIS_Code.AddressRegex) is false)
|
||||
|
@ -129,22 +150,39 @@
|
|||
throw new Exception($"标识格式错误,正则表达式为{IDIS_Code.AddressRegex}");
|
||||
}
|
||||
await service.RegisterAsync(handle, template.Version, _valueInfo);
|
||||
Snackbar.Add("注册成功");
|
||||
await InvokeAsync(StateHasChanged);
|
||||
currentMessage = "注册成功,标识码为:\n" + handle;
|
||||
severity=Severity.Success;
|
||||
|
||||
if (string.Equals(generatedHandleCode, handle_code))
|
||||
{
|
||||
GenerateHandle();
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Snackbar.Add(e.Message, Severity.Error);
|
||||
currentMessage = e.Message;
|
||||
severity=Severity.Error;
|
||||
}
|
||||
await InvokeAsync(StateHasChanged);
|
||||
}
|
||||
|
||||
private async Task<IEnumerable<string>> Search1(string arg)
|
||||
{
|
||||
await UniTask.Yield();
|
||||
return new List<string>()
|
||||
try
|
||||
{
|
||||
"88","123","99"
|
||||
};
|
||||
enterprises = await enterpriseService.GetEnterpriseAsync();
|
||||
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>();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -7,34 +7,15 @@
|
|||
@inject ISnackbar Snackbar
|
||||
@inject IDIS_TemplateService templateService
|
||||
@inject IDIS_Service service
|
||||
@inject IDialogService dialogService
|
||||
@inherits OwningComponentBase
|
||||
<MudText Typo="Typo.h3" GutterBottom="true">注册标识模板</MudText>
|
||||
<MudText>在注册与更新标识之前,我们需要一个创建标识模板,然后我们可以通过创建的模板注册标识<br />
|
||||
基于已选的标识模板,创建新的标识模板</MudText>
|
||||
<MudGrid>
|
||||
<MudItem xs="3">
|
||||
<div class="d-flex flex-grow-1 gap-4 py-2">
|
||||
<MudText Class="flex-1 d-flex" Typo="Typo.h6">选择标识模板</MudText>
|
||||
<MudButton Class="d-flex" Variant="Variant.Outlined" OnClick="() => Refresh().Forget()">刷新</MudButton>
|
||||
</div>
|
||||
@if (templates.Length is 0)
|
||||
{
|
||||
<MudAlert Severity="Severity.Normal">模板为空</MudAlert>
|
||||
}
|
||||
else
|
||||
{
|
||||
<MudStack>
|
||||
@foreach (var item in templates)
|
||||
{
|
||||
<MudButton
|
||||
Class="pa-2"
|
||||
Variant="Variant.Outlined"
|
||||
OnClick="() => SelectTemplate(item)">
|
||||
@(item.Prefix)/@(item.Version)
|
||||
</MudButton>
|
||||
}
|
||||
</MudStack>
|
||||
}
|
||||
|
||||
<TemplateSelector Reference="templateSelector" OnSelectTemplate="SelectTemplate"></TemplateSelector>
|
||||
</MudItem>
|
||||
<MudItem xs="1">
|
||||
</MudItem>
|
||||
|
@ -42,79 +23,81 @@
|
|||
<MudStack>
|
||||
<MudText Typo="Typo.h6">模板信息</MudText>
|
||||
<MudStack Row="true" Spacing="2">
|
||||
<MudTextField @bind-Value="prefix" Label="前缀" Variant="Variant.Outlined"></MudTextField>
|
||||
<MudTextField @bind-Value="version" Label="版本" Variant="Variant.Outlined"></MudTextField>
|
||||
<MudTextField @bind-Value="prefix" Label="前缀" Variant="Variant.Text"></MudTextField>
|
||||
<MudTextField @bind-Value="version" Label="版本" Variant="Variant.Text"></MudTextField>
|
||||
</MudStack>
|
||||
|
||||
<MudTextField @bind-Value="description" Label="描述" Variant="Variant.Outlined"></MudTextField>
|
||||
<MudTextField @bind-Value="description" Label="描述" Variant="Variant.Text"></MudTextField>
|
||||
<MudText Typo="Typo.h6">模板条目</MudText>
|
||||
<MudTable Items="@items"
|
||||
Hover="true"
|
||||
Class="py-2"
|
||||
>
|
||||
<HeaderContent>
|
||||
<MudTh>Name</MudTh>
|
||||
<MudTh>IdType</MudTh>
|
||||
<MudTh>Type</MudTh>
|
||||
<MudTh>MinLength</MudTh>
|
||||
<MudTh>MaxLength</MudTh>
|
||||
</HeaderContent>
|
||||
<RowTemplate>
|
||||
<MudTd DataLabel="Name">@context.Name</MudTd>
|
||||
<MudTd DataLabel="IdType">@context.IdType</MudTd>
|
||||
<MudTd DataLabel="Type">@context.MetaData.Type</MudTd>
|
||||
<MudTd DataLabel="MinLength">@context.MetaData.MinLength</MudTd>
|
||||
<MudTd DataLabel="MaxLength">@context.MetaData.MaxLength</MudTd>
|
||||
</RowTemplate>
|
||||
<RowEditingTemplate>
|
||||
<MudTd DataLabel="Name">
|
||||
<MudTextField @bind-Value="@context.Name" Required />
|
||||
</MudTd>
|
||||
<MudTd DataLabel="IdType">
|
||||
<MudTextField @bind-Value="@context.IdType" Required />
|
||||
</MudTd>
|
||||
<MudTd DataLabel="Type">
|
||||
<MudTextField @bind-Value="@context.MetaData.Type" Required />
|
||||
</MudTd>
|
||||
<MudTd DataLabel="MinLength">
|
||||
<MudTextField @bind-Value="@context.MetaData.MinLength" Required />
|
||||
</MudTd>
|
||||
<MudTd DataLabel="MaxLength">
|
||||
<MudTextField @bind-Value="@context.MetaData.MaxLength" Required />
|
||||
</MudTd>
|
||||
</RowEditingTemplate>
|
||||
</MudTable>
|
||||
<div class="d-flex">
|
||||
<MudButton Class="d-flex flex-grow-1" Variant="Variant.Outlined" OnClick="SaveTemplate">保存标识模板</MudButton>
|
||||
<MudDivider Style="width: 1em" Vertical="true" FlexItem="true" />
|
||||
<MudButton Class="d-flex" Variant="Variant.Outlined">删除标识模板</MudButton>
|
||||
</div>
|
||||
|
||||
@for (var index = 0; index < items.Length; index++)
|
||||
{
|
||||
var item = items[index];
|
||||
var i = index;
|
||||
<MudStack Row="true" Spacing="2">
|
||||
<MudTextField Margin="@myMargin" @bind-Value="item.Name" Label="名称" Variant="@Variant.Outlined"></MudTextField>
|
||||
<MudTextField Margin="@myMargin" @bind-Value="item.IdType" Label="变量名" Variant="@Variant.Outlined"></MudTextField>
|
||||
<MudSelect Variant="Variant.Outlined" Margin="@myMargin" @bind-Value="item.MetaData.Type" T="string" Label="数据类型" AnchorOrigin="Origin.BottomCenter">
|
||||
<MudSelectItem Value="@("string")" />
|
||||
<MudSelectItem Value="@("int")" />
|
||||
<MudSelectItem Value="@("float")" />
|
||||
<MudSelectItem Value="@("dateTime")" />
|
||||
<MudSelectItem Value="@("guid")" />
|
||||
</MudSelect>
|
||||
<MudTextField Margin="@myMargin" @bind-Value="item.MetaData.MinLength" Label="最小长度" Variant="@Variant.Outlined"></MudTextField>
|
||||
<MudTextField Margin="@myMargin" @bind-Value="item.MetaData.MaxLength" Label="最大长度" Variant="@Variant.Outlined"></MudTextField>
|
||||
<MudIconButton Title="删除该字段" Icon="@Icons.Material.Filled.DeleteOutline" OnClick="()=>RemoveItem(i)"/>
|
||||
</MudStack>
|
||||
}
|
||||
<MudButton OnClick="AddItem">添加一个字段</MudButton>
|
||||
<MudSpacer/>
|
||||
<div class="d-flex">
|
||||
<MudButton Class="d-flex flex-grow-1" Variant="Variant.Outlined" OnClick="SaveTemplate">保存标识模板</MudButton>
|
||||
<MudDivider Style="width: 1em" Vertical="true" FlexItem="true" />
|
||||
<MudButton Class="d-flex" Variant="Variant.Outlined" OnClick="AskDeleteTemplate">删除标识模板</MudButton>
|
||||
</div>
|
||||
</MudStack>
|
||||
</MudItem>
|
||||
</MudGrid>
|
||||
@code {
|
||||
public IDIS_Template[] templates { get; set; } = Array.Empty<IDIS_Template>();
|
||||
|
||||
private Reference<TemplateSelector> templateSelector { get; } = new();
|
||||
|
||||
private IDIS_Template template = new IDIS_Template();
|
||||
private IDIS_Template_Item[] items = new []{new IDIS_Template_Item()};
|
||||
|
||||
private string prefix { get; set; } = new IDIS_Template().Prefix;
|
||||
private string version { get; set; }= new IDIS_Template().Version;
|
||||
private string description { get; set; }= new IDIS_Template().Description;
|
||||
private Margin myMargin { get; set; } = Margin.Dense;
|
||||
|
||||
async UniTask Refresh()
|
||||
private bool selectedTemplate;
|
||||
|
||||
protected override async Task OnAfterRenderAsync(bool firstRender)
|
||||
{
|
||||
Snackbar.Add("正在刷新模板");
|
||||
templates = await templateService.ToArrayAsync();
|
||||
await InvokeAsync(StateHasChanged);
|
||||
Snackbar.Add("模板刷新完成");
|
||||
if (!firstRender) return;
|
||||
await templateSelector.value.Refresh();
|
||||
}
|
||||
|
||||
private void SelectTemplate(IDIS_Template newValue)
|
||||
{
|
||||
selectedTemplate = true;
|
||||
template = newValue;
|
||||
prefix = template.Prefix;
|
||||
version = template.Version;
|
||||
description = template.Description;
|
||||
items = template.Items;
|
||||
InvokeAsync(StateHasChanged).AndForget();
|
||||
}
|
||||
private void RemoveItem(int index)
|
||||
{
|
||||
var list = items.ToList();
|
||||
list.RemoveAt(index);
|
||||
items = list.ToArray();
|
||||
}
|
||||
private void AddItem()
|
||||
{
|
||||
items = items.Append(new IDIS_Template_Item()).ToArray();
|
||||
}
|
||||
private async void SaveTemplate()
|
||||
{
|
||||
|
@ -128,9 +111,55 @@
|
|||
Snackbar.Add("正在保存模板");
|
||||
try
|
||||
{
|
||||
foreach (var item in items)
|
||||
{
|
||||
if(string.IsNullOrWhiteSpace(item.Name))
|
||||
throw new Exception("字段名称不能为空");
|
||||
if(string.IsNullOrWhiteSpace(item.IdType))
|
||||
throw new Exception("字段变量名不能为空");
|
||||
if(string.IsNullOrWhiteSpace(item.MetaData.Type))
|
||||
throw new Exception("字段数据类型不能为空");
|
||||
if (item.MetaData.MinLength is 0)
|
||||
throw new Exception("字段最小长度不能为空");
|
||||
if (item.MetaData.MaxLength is 0)
|
||||
throw new Exception("字段最大长度不能为空");
|
||||
if (item.MetaData.MinLength > item.MetaData.MaxLength)
|
||||
throw new Exception("字段最小长度不能大于最大长度");
|
||||
}
|
||||
await templateService.SaveAsync(newTemplate);
|
||||
await templateSelector.value.Refresh();
|
||||
Snackbar.Add("模板已保存");
|
||||
await Refresh();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Snackbar.Add(e.Message, Severity.Error);
|
||||
}
|
||||
}
|
||||
private async void AskDeleteTemplate()
|
||||
{
|
||||
if (!selectedTemplate)
|
||||
{
|
||||
Snackbar.Add("未选择模板");
|
||||
return;
|
||||
}
|
||||
var parameters = new DialogParameters<DialogTemplateExample_Dialog>();
|
||||
parameters.Add(x => x.ContentText, $"是否确实要删除标识模板{template.Prefix}@{template.Version}?此过程无法撤消。");
|
||||
parameters.Add(x => x.ButtonText, "删除");
|
||||
parameters.Add(x => x.Color, Color.Error);
|
||||
|
||||
var options = new DialogOptions() { CloseButton = true, MaxWidth = MaxWidth.ExtraSmall };
|
||||
|
||||
var result = await dialogService.ShowAsync<DialogTemplateExample_Dialog>("删除标识模板", parameters, options);
|
||||
|
||||
var newResult =await result.Result;
|
||||
if (newResult.Canceled) return;
|
||||
|
||||
Snackbar.Add("正在删除模板");
|
||||
try
|
||||
{
|
||||
await templateService.DeleteAsync(template.Prefix, template.Version);
|
||||
await templateSelector.value.Refresh();
|
||||
Snackbar.Add("模板删除完成");
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
|
|
|
@ -0,0 +1,71 @@
|
|||
@using IDIS.Models
|
||||
@inject Services.IDIS_TemplateService templateService
|
||||
@using Cysharp.Threading.Tasks
|
||||
@using BITKit
|
||||
<div class="d-flex flex-grow-1 gap-4 py-2">
|
||||
<MudText Class="flex-1 d-flex" Typo="Typo.h6">选择标识模板</MudText>
|
||||
<MudButton Class="d-flex" Variant="Variant.Outlined" OnClick="() => Refresh().Forget()">刷新</MudButton>
|
||||
</div>
|
||||
<MudAlert Severity="severity">@currentMessage</MudAlert>
|
||||
|
||||
@if (templates.Length is not 0)
|
||||
{
|
||||
<MudStack>
|
||||
@foreach (var item in templates)
|
||||
{
|
||||
<MudButton
|
||||
Class="pa-2"
|
||||
Variant="Variant.Outlined"
|
||||
OnClick="() => OnSelectTemplate.Invoke(item)">
|
||||
@(item.Prefix)/@(item.Version)
|
||||
</MudButton>
|
||||
}
|
||||
</MudStack>
|
||||
}
|
||||
else
|
||||
{
|
||||
<MudStack Spacing="4">
|
||||
@for (var i = 0; i < 5; i++)
|
||||
{
|
||||
<MudSkeleton />
|
||||
}
|
||||
</MudStack>
|
||||
}
|
||||
@code {
|
||||
[Parameter]
|
||||
public Reference<TemplateSelector>? Reference { get; set; }
|
||||
private IDIS_Template[] templates = Array.Empty<IDIS_Template>();
|
||||
private string currentMessage { get; set; } = "模板为空?试着刷新一下";
|
||||
private Severity severity { get; set; } = Severity.Normal;
|
||||
[Parameter]
|
||||
public Action<IDIS_Template> OnSelectTemplate { get; set; }
|
||||
|
||||
protected override void OnInitialized()
|
||||
{
|
||||
base.OnInitialized();
|
||||
if (Reference is not null)
|
||||
Reference.value = this;
|
||||
}
|
||||
|
||||
|
||||
public async UniTask Refresh()
|
||||
{
|
||||
templates = Array.Empty<IDIS_Template>();
|
||||
await InvokeAsync(StateHasChanged);
|
||||
currentMessage = "正在刷新模板";
|
||||
severity = Severity.Info;
|
||||
try
|
||||
{
|
||||
templates = await templateService.ToArrayAsync();
|
||||
|
||||
currentMessage = "模板刷新完成";
|
||||
severity = Severity.Info;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
currentMessage = e.Message;
|
||||
severity = Severity.Error;
|
||||
}
|
||||
await InvokeAsync(StateHasChanged);
|
||||
}
|
||||
}
|
|
@ -1,4 +1,5 @@
|
|||
using BITKit;
|
||||
using IDIS_Server_SIM.Data;
|
||||
using Microsoft.AspNetCore.Components.Authorization;
|
||||
using Microsoft.AspNetCore.Identity;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
|
@ -27,6 +28,10 @@ builder.Services.AddMudServices();
|
|||
|
||||
builder.Services.AddCascadingAuthenticationState();
|
||||
|
||||
builder.Services.AddTransient<QueryService>();
|
||||
builder.Services.AddTransient<IDIS_Statistics_MySQLBased>();
|
||||
builder.Services.AddTransient<IDIS_Service_MySQLBased>();
|
||||
builder.Services.AddTransient<IDIS_EnterpriseService, IDIS_EnterpriseService_MySQLBased>();
|
||||
builder.Services.AddTransient<IDIS_Service, IDIS_Service_MySQLBased>();
|
||||
builder.Services.AddTransient<IDIS_TemplateService, IDIS_TemplateService_MySQLBased>();
|
||||
|
||||
|
@ -41,6 +46,8 @@ builder.Services.AddAuthentication(options =>
|
|||
|
||||
var app = builder.Build();
|
||||
|
||||
app.Services.GetRequiredService<IDIS_Statistics_MySQLBased>();
|
||||
|
||||
|
||||
app.UseExceptionHandler("/Error", createScopeForErrors: true);
|
||||
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
|
||||
|
|
Loading…
Reference in New Issue