From 7e83e56be670cdbf8ac89eb03d967f6563b5b586 Mon Sep 17 00:00:00 2001 From: oreshki Date: Wed, 8 Apr 2026 16:18:28 +0500 Subject: [PATCH] Next push --- Labaratory/Labaratory/Labaratory.csproj | 8 +++ .../Labaratory/ViewModels/LoginViewModel.cs | 49 ++++++++++++++----- .../Labaratory/ViewModels/SessionModel.cs | 22 +++++++++ Labaratory/Labaratory/Views/MainWindow.xaml | 40 +++++++++------ .../Labaratory/Views/MainWindow.xaml.cs | 37 ++------------ .../Labaratory/Views/SessionWindow.xaml | 12 +++++ .../Labaratory/Views/SessionWindow.xaml.cs | 27 ++++++++++ 7 files changed, 137 insertions(+), 58 deletions(-) create mode 100644 Labaratory/Labaratory/ViewModels/SessionModel.cs create mode 100644 Labaratory/Labaratory/Views/SessionWindow.xaml create mode 100644 Labaratory/Labaratory/Views/SessionWindow.xaml.cs diff --git a/Labaratory/Labaratory/Labaratory.csproj b/Labaratory/Labaratory/Labaratory.csproj index 2eb5c33..f7695c4 100644 --- a/Labaratory/Labaratory/Labaratory.csproj +++ b/Labaratory/Labaratory/Labaratory.csproj @@ -150,6 +150,9 @@ Model1.tt + + SessionWindow.xaml + MSBuild:Compile Designer @@ -158,10 +161,15 @@ App.xaml Code + MainWindow.xaml Code + + Designer + MSBuild:Compile + diff --git a/Labaratory/Labaratory/ViewModels/LoginViewModel.cs b/Labaratory/Labaratory/ViewModels/LoginViewModel.cs index af6399e..5b52fcc 100644 --- a/Labaratory/Labaratory/ViewModels/LoginViewModel.cs +++ b/Labaratory/Labaratory/ViewModels/LoginViewModel.cs @@ -7,6 +7,8 @@ using System.Text; using System.Threading.Tasks; using System.Windows.Input; using Wpf.Ui.Input; +using Labaratory.ViewModels; +using Labaratory.Views; namespace Labaratory { @@ -16,19 +18,29 @@ namespace Labaratory private string _password; private string _captchaText; private string _captchaInput; - private bool _isCaptchaVisible; + private bool _isCaptchaValid; private bool _isLoginEnabled = true; private int _failedAttempts = 0; private Models.LaboratoryDBEntities db = new Models.LaboratoryDBEntities(); - + private Visibility _CapchaVisibility = Visibility.Hidden; // Свойства для привязки (Binding) public string Login { get => _login; set { _login = value; OnPropertyChanged(); } } - public string Password { get => _password; set { _password = value; OnPropertyChanged(); } } + public string Password + { + get => _password; + set + { + if (_password == value) return; // Обязательно! + _password = value; + OnPropertyChanged(); + } + } public string CaptchaText { get => _captchaText; set { _captchaText = value; OnPropertyChanged(); } } public string CaptchaInput { get => _captchaInput; set { _captchaInput = value; OnPropertyChanged(); } } - public bool IsCaptchaVisible { get => _isCaptchaVisible; set { _isCaptchaVisible = value; OnPropertyChanged(); } } + public bool IsCaptchaValid { get => _isCaptchaValid; set { _isCaptchaValid = value; OnPropertyChanged(); } } public bool IsLoginEnabled { get => _isLoginEnabled; set { _isLoginEnabled = value; OnPropertyChanged(); } } + public Visibility CapchaVisibility { get => _CapchaVisibility; set { _CapchaVisibility = value; OnPropertyChanged(); } } // Команды public ICommand LoginCommand { get; } @@ -36,7 +48,9 @@ namespace Labaratory public LoginViewModel() { - LoginCommand = new RelayCommand(execute => ExecuteLogin()); + LoginCommand = new RelayCommand( + execute => ExecuteLogin(execute), + canExecute => IsLoginEnabled); RefreshCaptchaCommand = new RelayCommand(execute => GenerateNewCaptcha()); } @@ -46,24 +60,37 @@ namespace Labaratory CaptchaInput = string.Empty; } - private async void ExecuteLogin() + private async void ExecuteLogin(object parameter) { - if (IsCaptchaVisible && !Valid.ValidateCaptcha(CaptchaInput, CaptchaText)) + if (CapchaVisibility == Visibility.Visible && !Valid.ValidateCaptcha(CaptchaInput, CaptchaText)) { MessageBox.Show("Неверная капча!"); GenerateNewCaptcha(); await LockSystem(10); //Блокировка на 10 сек return; } - - if (Login == "admin" && Password == "123") + + var user = db.Users.FirstOrDefault(u => u.Login == Login && u.Password == Password); + + if (user != null) { - MessageBox.Show("Успешный вход!"); + MessageBox.Show($"Успешный вход! Добро пожаловать, {user.Login}"); + if (parameter is Window window) + { + var nextWindow = new SessionWindow(); + + var mainVM = new SessionModel(user); + // Привязываем VM к окну + nextWindow.DataContext = mainVM; + + nextWindow.Show(); + window.Close(); + } } else { MessageBox.Show("Неверный логин или пароль"); - IsCaptchaVisible = true; + CapchaVisibility = Visibility.Visible; GenerateNewCaptcha(); } } diff --git a/Labaratory/Labaratory/ViewModels/SessionModel.cs b/Labaratory/Labaratory/ViewModels/SessionModel.cs new file mode 100644 index 0000000..130bf5e --- /dev/null +++ b/Labaratory/Labaratory/ViewModels/SessionModel.cs @@ -0,0 +1,22 @@ +using Labaratory.Services; +using System; +using System.Windows; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Input; +using Wpf.Ui.Input; + +namespace Labaratory.ViewModels +{ + public class SessionModel : BaseViewModel + { + public Models.User CurrentUser { get; set; } + + public SessionModel(Models.User user) + { + CurrentUser = user; + } + } +} diff --git a/Labaratory/Labaratory/Views/MainWindow.xaml b/Labaratory/Labaratory/Views/MainWindow.xaml index f2c359c..885b96c 100644 --- a/Labaratory/Labaratory/Views/MainWindow.xaml +++ b/Labaratory/Labaratory/Views/MainWindow.xaml @@ -5,18 +5,19 @@ xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:Labaratory" xmlns:ui="http://schemas.lepo.co/wpfui/2022/xaml" x:Class="Labaratory.MainWindow" - xmlns:easy ="clr-namespace:EasyCaptcha.Wpf;assembly=EasyCaptcha.Wpf" + xmlns:easy ="clr-namespace:EasyCaptcha.Wpf;assembly=EasyCaptcha.Wpf" d:DataContext="{d:DesignInstance Type=local:LoginViewModel}" mc:Ignorable="d" - Title="MainWindow" Height="450" Width="400" + Title="MainWindow" Height="500" Width="400" Background="{ui:ThemeResource ApplicationBackgroundBrush}" Foreground="{ui:ThemeResource TextFillColorPrimaryBrush}"> + - + + + + - - - @@ -29,15 +30,20 @@ - + - + - + @@ -45,12 +51,12 @@ - + + Command="{Binding RefreshCaptchaCommand}"/> - - + + diff --git a/Labaratory/Labaratory/Views/MainWindow.xaml.cs b/Labaratory/Labaratory/Views/MainWindow.xaml.cs index 529c672..49e6ee8 100644 --- a/Labaratory/Labaratory/Views/MainWindow.xaml.cs +++ b/Labaratory/Labaratory/Views/MainWindow.xaml.cs @@ -21,46 +21,17 @@ namespace Labaratory /// public partial class MainWindow : Window { - private string _activeCaptcha; - public MainWindow() { - LaboratoryDBEntities db = new LaboratoryDBEntities(); InitializeComponent(); - DataContext = new LoginViewModel(); + this.DataContext = new LoginViewModel(); } - private void RefreshCaptcha_Click(object sender, RoutedEventArgs e) + private void PasswordBox_PasswordChanged(object sender, RoutedEventArgs e) { - - } - - - private void LoginButton_Click(object sender, RoutedEventArgs e) - { - if (CaptchaInput.Visibility != Visibility.Visible) + if (this.DataContext is LoginViewModel vm) { - Login(); - } - else - { - MessageBox.Show("Неверный логин или пароль!"); - //GenerateCaptcha(); - } - - if (CaptchaInput.Visibility != Visibility.Visible) - { - - } - else - { - MessageBox.Show("Неверная капча!"); - //GenerateCaptcha(); + vm.Password = passwordbox.Password; } } - private bool Login() - { - return false; - } - } } diff --git a/Labaratory/Labaratory/Views/SessionWindow.xaml b/Labaratory/Labaratory/Views/SessionWindow.xaml new file mode 100644 index 0000000..14b2369 --- /dev/null +++ b/Labaratory/Labaratory/Views/SessionWindow.xaml @@ -0,0 +1,12 @@ + + + + + diff --git a/Labaratory/Labaratory/Views/SessionWindow.xaml.cs b/Labaratory/Labaratory/Views/SessionWindow.xaml.cs new file mode 100644 index 0000000..b258254 --- /dev/null +++ b/Labaratory/Labaratory/Views/SessionWindow.xaml.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using System.Windows.Shapes; + +namespace Labaratory.Views +{ + /// + /// Логика взаимодействия для SessionWindow.xaml + /// + public partial class SessionWindow : Window + { + public SessionWindow() + { + InitializeComponent(); + } + } +}