diff --git a/installer/ElfisaPharmacy.iss b/installer/ElfisaPharmacy.iss
index 768fc1b..5a6c953 100644
--- a/installer/ElfisaPharmacy.iss
+++ b/installer/ElfisaPharmacy.iss
@@ -3,7 +3,7 @@
#define MyAppName "Электронная Фармация"
#define MyAppBrand "ЭльФиСА"
-#define MyAppVersion "2.0.7"
+#define MyAppVersion "2.0.8"
#define MyAppPublisher "PharmData"
#define MyAppURL "https://cdn.24pharmdata.ru"
#define MyAppSupportURL "https://24pharmdata.ru"
diff --git a/src/Elfisa.Avalonia/App.axaml b/src/Elfisa.Avalonia/App.axaml
index dd9e0f1..c2a57d4 100644
--- a/src/Elfisa.Avalonia/App.axaml
+++ b/src/Elfisa.Avalonia/App.axaml
@@ -41,11 +41,18 @@
+
+
+ Segoe UI
+
+
diff --git a/src/Elfisa.Avalonia/App.axaml.cs b/src/Elfisa.Avalonia/App.axaml.cs
index cecd0c5..52ec1c3 100644
--- a/src/Elfisa.Avalonia/App.axaml.cs
+++ b/src/Elfisa.Avalonia/App.axaml.cs
@@ -4,6 +4,7 @@ using Avalonia.Data.Core;
using Avalonia.Data.Core.Plugins;
using System.Linq;
using Avalonia.Markup.Xaml;
+using Avalonia.Media;
using Elfisa.Avalonia.ViewModels;
using Elfisa.Avalonia.Views;
@@ -11,17 +12,30 @@ namespace Elfisa.Avalonia;
public partial class App : Application
{
+ /// Дефолтный шрифт интерфейса (когда «По умолчанию»).
+ public const string DefaultFont = "Segoe UI";
+
public override void Initialize()
{
AvaloniaXamlLoader.Load(this);
}
+ /// Применяет шрифт ко всему приложению (ресурс наследуется всеми окнами).
+ public static void ApplyFont(string? name)
+ {
+ var family = string.IsNullOrWhiteSpace(name) ? DefaultFont : name!;
+ if (Current is { } app)
+ app.Resources["AppFontFamily"] = new FontFamily(family);
+ }
+
public override void OnFrameworkInitializationCompleted()
{
RequestedThemeVariant = Elfisa.Core.SettingsStore.Current.Theme == "Dark"
? global::Avalonia.Styling.ThemeVariant.Dark
: global::Avalonia.Styling.ThemeVariant.Light;
+ ApplyFont(Elfisa.Core.SettingsStore.Current.FontFamily);
+
if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
{
desktop.MainWindow = new MainWindow
diff --git a/src/Elfisa.Avalonia/Elfisa.Avalonia.csproj b/src/Elfisa.Avalonia/Elfisa.Avalonia.csproj
index fa58a39..30e2be0 100644
--- a/src/Elfisa.Avalonia/Elfisa.Avalonia.csproj
+++ b/src/Elfisa.Avalonia/Elfisa.Avalonia.csproj
@@ -5,9 +5,9 @@
enable
app.manifest
true
- 2.0.7
- 2.0.7.0
- 2.0.7.0
+ 2.0.8
+ 2.0.8.0
+ 2.0.8.0
ЭльФиСА — Электронная Фармация
PharmData
diff --git a/src/Elfisa.Avalonia/ViewModels/SettingsViewModel.cs b/src/Elfisa.Avalonia/ViewModels/SettingsViewModel.cs
index 61db261..03ccaf9 100644
--- a/src/Elfisa.Avalonia/ViewModels/SettingsViewModel.cs
+++ b/src/Elfisa.Avalonia/ViewModels/SettingsViewModel.cs
@@ -2,6 +2,7 @@ using System;
using System.Collections.ObjectModel;
using System.Linq;
using System.Threading.Tasks;
+using Avalonia.Media;
using CommunityToolkit.Mvvm.ComponentModel;
using Elfisa.Core;
@@ -11,10 +12,17 @@ public partial class SettingsViewModel : ViewModelBase
{
private readonly ApiClient _api = new();
+ /// Пункт «По умолчанию» в списке шрифтов.
+ public const string DefaultFontLabel = "По умолчанию";
+
[ObservableProperty] private string _apiBaseUrl = "";
public string[] Themes { get; } = { "Светлая", "Тёмная" };
[ObservableProperty] private int _themeIndex;
+ /// Все системные шрифты + «По умолчанию» первым.
+ public ObservableCollection Fonts { get; } = new();
+ [ObservableProperty] private string _selectedFont = DefaultFontLabel;
+
public ObservableCollection Locations { get; } = new();
[ObservableProperty] private BuyerLocationDto? _selectedLocation;
@@ -23,6 +31,20 @@ public partial class SettingsViewModel : ViewModelBase
_api.SetToken(Session.Current.Token);
ApiBaseUrl = SettingsStore.Current.ApiBaseUrl ?? AppConfig.DefaultApiBaseUrl;
ThemeIndex = SettingsStore.Current.Theme == "Dark" ? 1 : 0;
+
+ Fonts.Add(DefaultFontLabel);
+ foreach (var f in FontManager.Current.SystemFonts
+ .Select(x => x.Name)
+ .Where(n => !string.IsNullOrWhiteSpace(n))
+ .Distinct()
+ .OrderBy(n => n, StringComparer.CurrentCultureIgnoreCase))
+ Fonts.Add(f);
+
+ var saved = SettingsStore.Current.FontFamily;
+ SelectedFont = !string.IsNullOrWhiteSpace(saved) && Fonts.Contains(saved!)
+ ? saved!
+ : DefaultFontLabel;
+
if (Session.Current.IsAuthenticated) _ = LoadLocationsAsync();
}
diff --git a/src/Elfisa.Avalonia/Views/SettingsWindow.axaml b/src/Elfisa.Avalonia/Views/SettingsWindow.axaml
index d350377..243588a 100644
--- a/src/Elfisa.Avalonia/Views/SettingsWindow.axaml
+++ b/src/Elfisa.Avalonia/Views/SettingsWindow.axaml
@@ -3,7 +3,7 @@
xmlns:vm="using:Elfisa.Avalonia.ViewModels"
x:Class="Elfisa.Avalonia.Views.SettingsWindow"
x:DataType="vm:SettingsViewModel"
- Width="460" Height="440" CanResize="False"
+ Width="460" Height="520" CanResize="False"
WindowStartupLocation="CenterOwner"
Background="{DynamicResource Bg}"
Title="Настройки">
@@ -21,6 +21,18 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Elfisa.Avalonia/Views/SettingsWindow.axaml.cs b/src/Elfisa.Avalonia/Views/SettingsWindow.axaml.cs
index f867800..05f1cf9 100644
--- a/src/Elfisa.Avalonia/Views/SettingsWindow.axaml.cs
+++ b/src/Elfisa.Avalonia/Views/SettingsWindow.axaml.cs
@@ -42,11 +42,14 @@ public partial class SettingsWindow : Window
{
SettingsStore.Current.ApiBaseUrl = string.IsNullOrWhiteSpace(vm.ApiBaseUrl) ? null : vm.ApiBaseUrl.Trim().TrimEnd('/');
SettingsStore.Current.Theme = vm.ThemeIndex == 1 ? "Dark" : "Light";
+ var font = vm.SelectedFont == SettingsViewModel.DefaultFontLabel ? null : vm.SelectedFont;
+ SettingsStore.Current.FontFamily = font;
SettingsStore.Current.DefaultLocationId = vm.SelectedLocation?.BuyerLocationId;
SettingsStore.Save();
if (Application.Current is { } app)
app.RequestedThemeVariant = vm.ThemeIndex == 1 ? ThemeVariant.Dark : ThemeVariant.Light;
+ App.ApplyFont(font); // применяем сразу ко всем окнам
}
Close();
}
diff --git a/src/Elfisa.Core/SettingsStore.cs b/src/Elfisa.Core/SettingsStore.cs
index c0a1364..f504da1 100644
--- a/src/Elfisa.Core/SettingsStore.cs
+++ b/src/Elfisa.Core/SettingsStore.cs
@@ -6,6 +6,7 @@ public sealed class AppSettings
{
public string? ApiBaseUrl { get; set; }
public string Theme { get; set; } = "Light"; // Light | Dark
+ public string? FontFamily { get; set; } // шрифт интерфейса (null = по умолчанию)
public string? DefaultLocationId { get; set; }
public string? Token { get; set; } // сохранённая сессия
public string? Role { get; set; }