mirror of
https://github.com/Megghy/MegghysAPI.git
synced 2025-12-06 22:26:56 +08:00
迁移到 Ant Design 并优化 DNS 接口
将项目从 Fluent UI 迁移到 Ant Design Blazor: - 替换 UI 组件,更新样式和脚本。 - 移除 Fluent UI 相关依赖,添加 Ant Design 依赖。 优化 DNS 解析接口: - 将解析接口从 POST 改为 GET,简化参数结构。 - 更新 `DnsResponse` 和配置文件结构。 数据库模型优化: - 为 JSON 数据存储添加 `JArray` 映射支持。 初始化逻辑重构: - 简化 `AutoInit` 初始化逻辑,提升代码可读性。 其他改动: - 升级依赖包版本。 - 移除无用命名空间和属性。
This commit is contained in:
@@ -1,26 +1,43 @@
|
||||
@inherits LayoutComponentBase
|
||||
@inherits LayoutComponentBase
|
||||
|
||||
<FluentLayout>
|
||||
<FluentHeader>
|
||||
MegghysAPI
|
||||
</FluentHeader>
|
||||
<FluentStack Class="main" Orientation="Orientation.Horizontal" Width="100%">
|
||||
<NavMenu />
|
||||
<FluentBodyContent Class="body-content">
|
||||
<div class="content">
|
||||
@Body
|
||||
</div>
|
||||
</FluentBodyContent>
|
||||
</FluentStack>
|
||||
<FluentFooter>
|
||||
<a href="https://www.fluentui-blazor.net" target="_blank">Documentation and demos</a>
|
||||
<FluentSpacer />
|
||||
<a href="https://learn.microsoft.com/en-us/aspnet/core/blazor" target="_blank">About Blazor</a>
|
||||
</FluentFooter>
|
||||
</FluentLayout>
|
||||
<Layout class="app-layout">
|
||||
<Header class="app-header">
|
||||
<div class="app-header-title">MegghysAPI</div>
|
||||
</Header>
|
||||
<Layout>
|
||||
<Sider Collapsible="true"
|
||||
Collapsed="@collapsed"
|
||||
OnCollapse="HandleCollapse"
|
||||
Width="220"
|
||||
Class="app-sider">
|
||||
<NavMenu InlineCollapsed="@collapsed" />
|
||||
</Sider>
|
||||
<Layout>
|
||||
<Content class="app-content">
|
||||
<div class="content">
|
||||
@Body
|
||||
</div>
|
||||
</Content>
|
||||
<Footer class="app-footer">
|
||||
<a href="https://antblazor.com" target="_blank">Ant Design Blazor 文档</a>
|
||||
<span class="footer-spacer"></span>
|
||||
<a href="https://learn.microsoft.com/aspnet/core/blazor" target="_blank">About Blazor</a>
|
||||
</Footer>
|
||||
</Layout>
|
||||
</Layout>
|
||||
</Layout>
|
||||
|
||||
<div id="blazor-error-ui" data-nosnippet>
|
||||
An unhandled error has occurred.
|
||||
<a href="." class="reload">Reload</a>
|
||||
<span class="dismiss">🗙</span>
|
||||
</div>
|
||||
|
||||
@code {
|
||||
private bool collapsed;
|
||||
|
||||
private void HandleCollapse(bool isCollapsed)
|
||||
{
|
||||
collapsed = isCollapsed;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,20 +1,80 @@
|
||||
@rendermode InteractiveServer
|
||||
@rendermode InteractiveServer
|
||||
@implements IDisposable
|
||||
|
||||
<div class="navmenu">
|
||||
<input type="checkbox" title="Menu expand/collapse toggle" id="navmenu-toggle" class="navmenu-icon" />
|
||||
<label for="navmenu-toggle" class="navmenu-icon"><FluentIcon Value="@(new Icons.Regular.Size20.Navigation())" Color="Color.Fill" /></label>
|
||||
<nav class="sitenav" aria-labelledby="main-menu">
|
||||
<FluentNavMenu Id="main-menu" Collapsible="true" Width="250" Title="Navigation menu" @bind-Expanded="expanded" CustomToggle="true">
|
||||
<FluentNavLink Href="/" Match="NavLinkMatch.All" Icon="@(new Icons.Regular.Size20.Home())" IconColor="Color.Accent">Home</FluentNavLink>
|
||||
<FluentNavLink Href="pixiv" Icon="@(new Icons.Regular.Size20.NumberSymbolSquare())" IconColor="Color.Accent">Pixiv</FluentNavLink>
|
||||
<FluentNavLink Href="weather" Icon="@(new Icons.Regular.Size20.WeatherPartlyCloudyDay())" IconColor="Color.Accent">Weather</FluentNavLink>
|
||||
</FluentNavMenu>
|
||||
</nav>
|
||||
<FluentDesignTheme @bind-Mode="@Mode" @bind-OfficeColor="@OfficeColor" StorageName="theme" />
|
||||
</div>
|
||||
<Menu Mode="MenuMode.Inline"
|
||||
Theme="MenuTheme.Dark"
|
||||
InlineCollapsed="@InlineCollapsed"
|
||||
SelectedKeys="@selectedKeys"
|
||||
OnMenuItemClicked="HandleMenuClick"
|
||||
Class="app-menu">
|
||||
<MenuItem Key="/">
|
||||
<Icon Type="IconType.OutlineHome" />
|
||||
<span>Home</span>
|
||||
</MenuItem>
|
||||
<MenuItem Key="pixiv">
|
||||
<Icon Type="IconType.OutlinePicture" />
|
||||
<span>Pixiv</span>
|
||||
</MenuItem>
|
||||
<MenuItem Key="weather">
|
||||
<Icon Type="IconType.OutlineCloud" />
|
||||
<span>Weather</span>
|
||||
</MenuItem>
|
||||
</Menu>
|
||||
|
||||
@code {
|
||||
private bool expanded = true;
|
||||
public DesignThemeModes Mode { get; set; }
|
||||
public OfficeColor? OfficeColor { get; set; }
|
||||
[Parameter]
|
||||
public bool InlineCollapsed { get; set; }
|
||||
|
||||
private string[] selectedKeys = ["/"];
|
||||
|
||||
[Inject]
|
||||
private NavigationManager NavigationManager { get; set; } = default!;
|
||||
|
||||
protected override void OnParametersSet()
|
||||
{
|
||||
UpdateSelectedKeys(NavigationManager.Uri);
|
||||
}
|
||||
|
||||
protected override void OnInitialized()
|
||||
{
|
||||
UpdateSelectedKeys(NavigationManager.Uri);
|
||||
NavigationManager.LocationChanged += HandleLocationChanged;
|
||||
}
|
||||
|
||||
private void HandleLocationChanged(object? sender, LocationChangedEventArgs e)
|
||||
{
|
||||
UpdateSelectedKeys(e.Location);
|
||||
StateHasChanged();
|
||||
}
|
||||
|
||||
private void UpdateSelectedKeys(string uri)
|
||||
{
|
||||
var relative = NavigationManager.ToBaseRelativePath(uri);
|
||||
if (string.IsNullOrEmpty(relative))
|
||||
{
|
||||
selectedKeys = ["/"];
|
||||
}
|
||||
else
|
||||
{
|
||||
var key = relative.Split('/', StringSplitOptions.RemoveEmptyEntries).FirstOrDefault() ?? string.Empty;
|
||||
selectedKeys = [key];
|
||||
}
|
||||
}
|
||||
|
||||
private void HandleMenuClick(MenuItem menuItem)
|
||||
{
|
||||
if (menuItem.Key is null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
selectedKeys = [menuItem.Key];
|
||||
var target = menuItem.Key == "/" ? "/" : $"/{menuItem.Key}";
|
||||
NavigationManager.NavigateTo(target);
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
NavigationManager.LocationChanged -= HandleLocationChanged;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user