master
vikto 2026-05-19 16:29:42 +10:00
parent feb4764a4f
commit 42674a1eaf
275 changed files with 2620 additions and 0 deletions

View File

@ -0,0 +1,105 @@
using System;
using Avalonia.Controls;
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
using Microsoft.Extensions.DependencyInjection;
using Policlinica.Views;
namespace Policlinica.ViewModels;
public partial class SugarCheckViewModel : ViewModelBase
{
private readonly Navigation _navigation;
private readonly IServiceProvider _provider;
private SugarCheckView _view;
[ObservableProperty] string result = "";
[ObservableProperty] string statusMessage = "";
public SugarCheckViewModel(Navigation navigation, IServiceProvider provider)
{
_navigation = navigation;
_provider = provider;
}
public void SetView(SugarCheckView view)
{
_view = view;
}
[RelayCommand]
public void Calculate()
{
if (_view == null)
{
StatusMessage = "Ошибка: вид не инициализирован";
return;
}
// Получаем значения из TextBox'ов
var weightInput = _view.FindControl<TextBox>("WeightInput");
var heightInput = _view.FindControl<TextBox>("HeightInput");
if (weightInput?.Text == null || heightInput?.Text == null)
{
StatusMessage = "Введите значения веса и роста";
return;
}
if (!decimal.TryParse(weightInput.Text, out decimal weight) || !decimal.TryParse(heightInput.Text, out decimal height))
{
StatusMessage = "Введите корректные числовые значения";
return;
}
if (weight <= 0 || height <= 0)
{
StatusMessage = "Вес и рост должны быть больше нуля";
Result = "";
return;
}
try
{
// Расчет BMI (индекс массы тела)
decimal heightInMeters = height / 100;
decimal bmi = weight / (heightInMeters * heightInMeters);
string recommendation;
if (bmi < 18.5m)
{
recommendation = "Статус: Недостаточный вес\nРекомендуемый уровень сахара: 3.9 - 5.8 ммоль/л";
}
else if (bmi < 25m)
{
recommendation = "Статус: Нормальный вес\nРекомендуемый уровень сахара: 3.9 - 5.8 ммоль/л";
}
else if (bmi < 30m)
{
recommendation = "Статус: Избыточный вес\nРекомендуемый уровень сахара: 3.9 - 6.1 ммоль/л\nРекомендуется контролировать уровень глюкозы";
}
else
{
recommendation = "Статус: Ожирение\nРекомендуемый уровень сахара: 3.9 - 7.0 ммоль/л\nОбратитесь к врачу";
}
Result = $"BMI: {bmi:F1}\n{recommendation}";
StatusMessage = "";
Console.WriteLine($"Calculated - Weight: {weight}, Height: {height}, BMI: {bmi:F1}");
}
catch (Exception ex)
{
StatusMessage = $"Ошибка: {ex.Message}";
Result = "";
Console.WriteLine($"Error: {ex}");
}
}
[RelayCommand]
public void Back()
{
var vm = ActivatorUtilities.CreateInstance<AdminViewModel>(_provider);
_navigation.Navigate(vm);
}
}

View File

@ -0,0 +1,52 @@
<UserControl xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:viewModels="clr-namespace:Policlinica.ViewModels"
mc:Ignorable="d" d:DesignWidth="600" d:DesignHeight="800"
x:Class="Policlinica.Views.SugarCheckView"
x:DataType="viewModels:SugarCheckViewModel">
<StackPanel Margin="30" Spacing="20">
<!-- Заголовок -->
<TextBlock Text="Быстрая проверка нормы сахара в крови" FontSize="22" FontWeight="Bold" HorizontalAlignment="Center"/>
<!-- Ввод веса -->
<Border BorderBrush="LightGray" BorderThickness="1" Padding="15" CornerRadius="5">
<StackPanel Spacing="10">
<TextBlock Text="Вес (кг):" FontWeight="Bold" FontSize="14"/>
<TextBox Name="WeightInput" Watermark="Введите вес в килограммах" Padding="10" FontSize="13"/>
</StackPanel>
</Border>
<!-- Ввод роста -->
<Border BorderBrush="LightGray" BorderThickness="1" Padding="15" CornerRadius="5">
<StackPanel Spacing="10">
<TextBlock Text="Рост (см):" FontWeight="Bold" FontSize="14"/>
<TextBox Name="HeightInput" Watermark="Введите рост в сантиметрах" Padding="10" FontSize="13"/>
</StackPanel>
</Border>
<!-- Кнопка расчета -->
<Button Content="Рассчитать" FontSize="16" Padding="20,12" Background="Blue" Foreground="White"
HorizontalAlignment="Center" Command="{Binding CalculateCommand}"/>
<!-- Результат -->
<TextBlock Text="{Binding Result}"
FontSize="15"
TextWrapping="Wrap"
Foreground="Black"
Padding="15"
Background="WhiteSmoke"
Margin="0,10,0,10"
MinHeight="100"/>
<!-- Сообщение об ошибке -->
<TextBlock Text="{Binding StatusMessage}" Foreground="Red" FontSize="13" TextWrapping="Wrap"/>
<!-- Кнопка вернуться -->
<Button Content="Вернуться в меню" FontSize="16" Padding="20,12" Background="Gray" Foreground="White"
HorizontalAlignment="Center" Command="{Binding BackCommand}"/>
</StackPanel>
</UserControl>

View File

@ -0,0 +1,13 @@
using Avalonia;
using Avalonia.Controls;
using Avalonia.Markup.Xaml;
namespace Policlinica.Views;
public partial class SugarCheckView : UserControl
{
public SugarCheckView()
{
InitializeComponent();
}
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,15 @@
{
"runtimeOptions": {
"tfm": "net9.0",
"includedFrameworks": [
{
"name": "Microsoft.NETCore.App",
"version": "9.0.16"
}
],
"configProperties": {
"MVVMTOOLKIT_ENABLE_INOTIFYPROPERTYCHANGING_SUPPORT": true,
"System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false
}
}
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

Some files were not shown because too many files have changed in this diff Show More