迁移到 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:
Megghy
2025-09-25 17:15:57 +08:00
parent 5863336e20
commit b2c648c3e6
14 changed files with 256 additions and 324 deletions

View File

@@ -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;
}
}