Files
Telegram-Panel/src/TelegramPanel.Web/Components/Layout/MainLayout.razor
2025-12-29 18:18:53 +08:00

127 lines
4.2 KiB
Plaintext

@inherits LayoutComponentBase
<MudThemeProvider @bind-IsDarkMode="_isDarkMode" Theme="_theme" />
<MudPopoverProvider />
<MudDialogProvider />
<MudSnackbarProvider />
<MudLayout>
<MudAppBar Elevation="1">
<MudIconButton Icon="@Icons.Material.Filled.Menu" Color="Color.Inherit" Edge="Edge.Start" OnClick="@ToggleDrawer" />
<MudText Typo="Typo.h5" Class="ml-3">Telegram Panel</MudText>
<MudChip T="string" Size="Size.Small" Color="Color.Default" Class="ml-2" Style="cursor: pointer;"
title="点击查看版本信息" OnClick="@ShowVersionInfo">
@VersionService.Version
</MudChip>
@if (_updateInfo is { Success: true, UpdateAvailable: true } && !string.IsNullOrWhiteSpace(_updateInfo.LatestVersion))
{
<MudChip T="string" Size="Size.Small" Color="Color.Warning" Variant="Variant.Filled" Class="ml-2" Style="cursor: pointer;"
title="发现新版本,点击查看更新说明" OnClick="@ShowVersionInfo">
新版本 v@(_updateInfo.LatestVersion)
</MudChip>
}
<MudSpacer />
<MudIconButton Icon="@Icons.Material.Filled.Settings"
Color="Color.Inherit"
Href="/settings"
title="系统设置" />
<MudIconButton Icon="@Icons.Custom.Brands.GitHub"
Color="Color.Inherit"
Href="https://github.com/moeacgx/Telegram-Panel"
Target="_blank"
Rel="noopener noreferrer"
title="GitHub" />
<MudIconButton Icon="@(_isDarkMode ? Icons.Material.Filled.LightMode : Icons.Material.Filled.DarkMode)"
Color="Color.Inherit"
OnClick="@ToggleDarkMode" />
</MudAppBar>
<MudDrawer @bind-Open="_drawerOpen" ClipMode="DrawerClipMode.Always" Elevation="2">
<NavMenu />
</MudDrawer>
<MudMainContent Class="pt-16 px-4">
<MudContainer MaxWidth="MaxWidth.ExtraLarge" Class="my-4">
@Body
</MudContainer>
</MudMainContent>
</MudLayout>
@using TelegramPanel.Web.Services
@inject UiPreferencesService UiPreferences
@inject IDialogService DialogService
@inject UpdateCheckService UpdateCheck
@code {
private bool _drawerOpen = true;
private bool _isDarkMode = true;
private UpdateCheckInfo? _updateInfo;
private MudTheme _theme = new()
{
PaletteLight = new PaletteLight
{
Primary = "#1976d2",
Secondary = "#00bcd4",
AppbarBackground = "#1976d2"
},
PaletteDark = new PaletteDark
{
Primary = "#90caf9",
Secondary = "#80deea",
AppbarBackground = "#1e1e2d",
Background = "#121212",
Surface = "#1e1e2d"
}
};
protected override async Task OnInitializedAsync()
{
// 从配置文件读取用户的主题偏好
_isDarkMode = await UiPreferences.GetIsDarkModeAsync();
_ = LoadUpdateInfoAsync();
// 确保初始化后 UI 能正确显示主题
StateHasChanged();
}
private void ToggleDrawer()
{
_drawerOpen = !_drawerOpen;
}
private async Task ToggleDarkMode()
{
_isDarkMode = !_isDarkMode;
// 保存主题偏好到配置文件
await UiPreferences.SetIsDarkModeAsync(_isDarkMode);
// 强制刷新组件状态,确保在异步操作后 UI 能及时更新
StateHasChanged();
}
private async Task ShowVersionInfo()
{
var options = new DialogOptions
{
CloseOnEscapeKey = true,
MaxWidth = MaxWidth.Medium,
FullWidth = true
};
DialogService.Show<TelegramPanel.Web.Components.Dialogs.VersionInfoDialog>("版本信息", new DialogParameters(), options);
await Task.CompletedTask;
}
private async Task LoadUpdateInfoAsync()
{
try
{
_updateInfo = await UpdateCheck.GetLatestAsync(forceRefresh: false);
await InvokeAsync(StateHasChanged);
}
catch
{
// 检查更新失败不影响主界面
}
}
}