This commit is contained in:
CortexCore 2025-07-04 01:49:47 +08:00
parent c3517a2fe5
commit 14db934afb
16 changed files with 29 additions and 375 deletions

View File

@ -4,14 +4,9 @@
<MudNavLink Href="template/register" Match="NavLinkMatch.Prefix" Icon="@Icons.Material.Outlined.AppRegistration">注册标识模板</MudNavLink>
<MudNavLink Href="/register" Match="NavLinkMatch.All" Icon="@Icons.Material.Outlined.Assignment">注册标识</MudNavLink>
<MudNavLink Href="/signature" Match="NavLinkMatch.All" Icon="@Icons.Material.Outlined.Book">签名标识</MudNavLink>
<MudNavLink Href="/oneClickRegistration" Match="NavLinkMatch.All" Icon="@Icons.Material.Outlined.BatchPrediction">一键注册</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>

View File

@ -5,9 +5,12 @@
@attribute [Authorize]
<PageTitle>Auth</PageTitle>
<Error></Error>
<h1>You are authenticated</h1>
<div></div>
<AuthorizeView>
Hello @context.User.Identity?.Name!
</AuthorizeView>

View File

@ -1,5 +1,4 @@
@page "/Enterprise/Register"
@using IDIS.Models
@using Cysharp.Threading.Tasks
@using System.Text
@using BITKit.Crypto
@ -278,7 +277,7 @@
return;
}
using var ms = new MemoryStream();
await obj.OpenReadStream().CopyToAsync(ms);
await obj.OpenReadStream(int.MaxValue).CopyToAsync(ms);
enterprise.EnterpriseApply.CreditImageContent = Convert.ToBase64String(ms.ToArray());
currentMessage = "上传成功";
@ -301,7 +300,7 @@
return;
}
using var ms = new MemoryStream();
await obj.OpenReadStream().CopyToAsync(ms);
await obj.OpenReadStream(int.MaxValue).CopyToAsync(ms);
enterprise.EnterpriseApply.LegalPersonIdImageFrontContent = Convert.ToBase64String(ms.ToArray());
currentMessage = "上传成功";
@ -324,7 +323,7 @@
return;
}
using var ms = new MemoryStream();
await obj.OpenReadStream().CopyToAsync(ms);
await obj.OpenReadStream(int.MaxValue).CopyToAsync(ms);
enterprise.EnterpriseApply.LegalPersonIdImageBackContent = Convert.ToBase64String(ms.ToArray());
currentMessage = "上传成功";

View File

@ -1,53 +0,0 @@
@page "/OneClickRegistration"
@using IDIS.Client.Web.Data
@using IDIS.Models
@using IDIS.Services
@using Cysharp.Threading.Tasks
@inject IDIS_TemplateService templateService
@inject OneClickRegister register
@inject IDialogService dialogService
<MudText Typo="Typo.h3" GutterBottom="true">一键注册</MudText>
<MudText>选择需要的项目,对生产过程中产生的标识进行<b>一键注册</b></MudText>
<MudText>在生产过程中,更新对应的标识即可</MudText>
<MudGrid>
<MudItem xs="3">
<MudStack>
<MudAlert>快速注册</MudAlert>
<MudStack Row="true" Class="align-center">
<MudTextField @bind-Value="registerName" T="string" Label="输入名称"/>
<MudSelect @bind-Value="registerTemplate" T="string" Label="选择模板" AnchorOrigin="Origin.BottomCenter">
@foreach (var (name,template) in registerTemplates)
{
<MudSelectItem Value="template.Name"/>
}
</MudSelect>
</MudStack>
<MudButton OnClick="Register" Variant="Variant.Filled" Color="Color.Success">一键注册</MudButton>
</MudStack>
</MudItem>
</MudGrid>
@code {
private Dictionary<string,OneClickRegisterData> registerTemplates { get; set; }= new();
private string registerTemplate { get; set; }
private string registerName { get; set; }
protected override async Task OnAfterRenderAsync(bool firstRender)
{
if (!firstRender) return;
await Rebuild();
await InvokeAsync(StateHasChanged);
}
private async UniTask Rebuild()
{
registerTemplates = await register.GetAllTemplate();
}
private async void Register()
{
await register.Register(registerTemplate,registerName);
dialogService.ShowMessageBox("注册成功", "注册成功").AndForget();
await InvokeAsync(StateHasChanged);
}
}

View File

@ -1,6 +1,5 @@
@page "/Enterprise/Query"
@using BITKit
@using IDIS.Models
@inject IDIS_EnterpriseService enterpriseService
<h3>企业查询</h3>

View File

@ -3,8 +3,6 @@
@inject IDIS_Service service
@inject IDIS_TemplateService templateService
@inject ISnackbar snackbar
@using IDIS.Models
@using IDIS.Services
<MudText Typo="Typo.h3" GutterBottom="true">解析标识</MudText>
<MudStack>
<MudTextField
@ -17,7 +15,7 @@
OnAdornmentClick="QueryInternal"
/>
<MudAlert Severity="@severity">@currentMessage</MudAlert>
@if (queryData.Value.Length is not 0)
@if (queryData.Value is{ Length: >0 })
{
<MudPaper Class="pa-2">
<MudStack Spacing="2">

View File

@ -1,92 +0,0 @@
@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();
}
}

View File

@ -1,84 +0,0 @@
@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);
}
}

View File

@ -1,6 +1,4 @@
@page "/register"
@using IDIS.Services
@using IDIS.Models
@using Cysharp.Threading.Tasks
@using BITKit
@using System.Text.RegularExpressions
@ -174,7 +172,7 @@
_valueInfo[index].Data.Value = dateTimeProxies[index].Value!.ToString()!;
}
}
await service.RegisterAsync(handle, template.Version, _valueInfo);
await service.RegisterIDISAsync(handle, template.Version, _valueInfo);
currentMessage = "注册成功,标识码为:\n" + handle;
severity=Severity.Success;

View File

@ -1,6 +1,5 @@
@page "/Signature"
@using Ril.BlazorSignatureCanvas
@using IDIS.Services
@using SkiaSharp
@inject IDIS_Service service

View File

@ -1,6 +1,4 @@
@page "/template/register"
@using IDIS.Services
@using IDIS.Models
@using Cysharp.Threading.Tasks
@using BITKit
@inject ILogger<TemlateRegister> logger

View File

@ -1,6 +1,7 @@
@using IDIS.Models
@inject Services.IDIS_TemplateService templateService
@inject IDIS_TemplateService TemplateService
@using Cysharp.Threading.Tasks
@using global::CAICT.IDIS.Service
@using global::CAICT.IDIS
@using BITKit
<div class="d-flex flex-grow-1 gap-4 py-2">
<MudText Class="flex-1 d-flex" Typo="Typo.h6">选择标识模板</MudText>
@ -56,7 +57,7 @@
severity = Severity.Info;
try
{
templates = await templateService.ToArrayAsync();
templates = await TemplateService.ToArrayAsync();
currentMessage = "模板刷新完成";
severity = Severity.Info;

View File

@ -7,7 +7,8 @@
@using static Microsoft.AspNetCore.Components.Web.RenderMode
@using Microsoft.AspNetCore.Components.Web.Virtualization
@using Microsoft.JSInterop
@using IDIS.Client.Web
@using IDIS.Client.Web.Components
@using CAICT.IDIS
@using CAICT.IDIS.Components
@using CAICT.IDIS.Service
@using MudBlazor
@using MudBlazor.Services

View File

@ -1,101 +0,0 @@
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Diagnostics.CodeAnalysis;
using System.Globalization;
using System.Net;
using System.Reflection.Metadata;
using System.Text.RegularExpressions;
using BITKit;
using Cysharp.Threading.Tasks;
using IDIS.Models;
using IDIS.Services;
using IDIS.Services.Models;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using Org.BouncyCastle.Security;
namespace IDIS.Client.Web.Data;
public record OneClickRegisterData
{
public string Name;
public string Prefix;
public Dictionary<string,string> Dictionary;
}
public class OneClickRegister:DbContext
{
[Keyless]
public class Info
{
public string Name { get; set; }
public string Json { get; set; }
}
[Keyless]
public class SavedInfo:Info
{
}
private readonly IDIS_Service _service;
public OneClickRegister(IDIS_Service service)
{
_service = service;
}
public DbSet<Info> oneClickTemplates { get; set; }
public DbSet<SavedInfo> oneClickRegisters { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
var connectionString = BITKit.Data.Get<string>("DefaultConnection");
optionsBuilder.UseMySQL(connectionString);
}
public async UniTask<Dictionary<string,OneClickRegisterData>> GetAllTemplate()
{
var array = await oneClickTemplates.ToArrayAsync();
return array.ToDictionary(info => info.Name, info => JsonConvert.DeserializeObject<OneClickRegisterData>(info.Json)!);
}
public async UniTask CreateTemplate(string name,string prefix,Dictionary<string,string> dictionary)
{
var _all =await GetAllTemplate();
if(_all.ContainsKey(name))
throw new ArgumentException("模板已存在");
oneClickTemplates.Add(new Info{Name = name,Json = JsonConvert.SerializeObject(new OneClickRegisterData{Name = name,Prefix = prefix,Dictionary = dictionary})});
await SaveChangesAsync();
}
public async UniTask DeleteTemplate(string name)
{
oneClickTemplates.RemoveRange(oneClickTemplates.Where(x => x.Name == name));
await SaveChangesAsync();
}
public async UniTask<OneClickRegisterData> Register(string templateName,string name)
{
if (string.IsNullOrEmpty(name))
{
name = DateTime.Now.ToString(CultureInfo.InvariantCulture);
}
var _all =await GetAllTemplate();
if(_all.TryGetValue(templateName,out var template) is false)
throw new ArgumentException($"未找到模板:{templateName}");
var tick = DateTime.Now.Ticks;
var export = new OneClickRegisterData
{
Name = name,
Prefix = template.Prefix,
Dictionary = new(),
};
foreach (var (entryName,templateVersion) in template.Dictionary)
{
var handle = $"{template.Prefix}/{tick++}";
await _service.RegisterAsync(handle,templateVersion,Array.Empty<IDIS_Register_Data.ValueInfo>());
export.Dictionary.Add(entryName,handle);
}
await oneClickRegisters.AddAsync(new SavedInfo{Name = name,Json = JsonConvert.SerializeObject(export)});
await SaveChangesAsync();
return export;
}
}

View File

@ -1,12 +1,8 @@
using BITKit;
using IDIS_Server_SIM.Data;
using Microsoft.AspNetCore.Components.Authorization;
using CAICT.IDIS.Components;
using Microsoft.AspNetCore.Identity;
using Microsoft.EntityFrameworkCore;
using IDIS.Client.Web.Components;
using IDIS.Client.Web.Data;
using IDIS.Models;
using IDIS.Services;
using CAICT.IDIS.Service;
using CN.CAICT.IDIS;
using MudBlazor.Services;
await BITAppForNet.InitializeAsync("IDIS");
@ -29,13 +25,12 @@ builder.Services.AddMudServices();
builder.Services.AddCascadingAuthenticationState();
builder.Services.AddTransient<OneClickRegister>();
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>();
builder.Services.AddTransient<IDIS_EnterpriseService,
IDIS_EnterpriseService_SqlSugar>();
builder.Services.AddTransient<IDIS_Service, IDIS_Service_SqlSugar>();
builder.Services.AddTransient<IDIS_TemplateService, IDIS_TemplateService_Sugar>();
builder.Services.AddControllers();
builder.Services.AddAuthentication(options =>
{
@ -48,15 +43,14 @@ 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.
app.UseHsts();
app.UseHttpsRedirection();
app.MapControllers();
app.UseStaticFiles();
app.UseAntiforgery();

View File

@ -5,11 +5,10 @@
"Microsoft.AspNetCore": "Warning"
}
},
"DefaultConnection":"server=server.bitfall.icu;port=3306;database=ifactory;uid=ifactory;password=JdBfKR2dxhm76Ss2;",
"Urls":"http://+:5150",
"Urls": "http://+:5150",
"AllowedHosts": "*",
"Signature": {
"DefaultHandle": "88.123.99/638514755153927653",
"DefaultType": "base64"
},
"AllowedHosts": "*"
}
}