alielie
2025-03-26 4cac1b533e133fdc8b3def90a0f998820f51907a
WPFProject/Login.xaml.cs
@@ -1,4 +1,5 @@
using HMI.Core.Entity;
using HMI.Core.Setting;
using HMI.Core.Util;
using HMI.UI.DpUtil;
using HMI.UI.Util;
@@ -6,14 +7,17 @@
using Panuon.WPF.UI;
using System;
using System.Data;
using System.IO;
using System.Threading.Tasks;
using System.Windows;
using WPFProject.Utils;
using static System.Windows.Forms.VisualStyles.VisualStyleElement.StartPanel;
namespace WPFProject
{
    public class LoginException : Exception
    {
        public LoginException(string message):base(message)
        public LoginException(string message) : base(message)
        {
        }
    }
@@ -30,6 +34,9 @@
            InitializeComponent();
        }
        private static readonly Encryptor encryptor = new Encryptor("aB3dE5fG7hI9jjK1lMnOpQrS2tUvWxYz",
            "8Wq9RsT4vYx6ZuB1");
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            if (FormGroupHelper.ValidateForm(formPanel))
@@ -37,29 +44,22 @@
                ButtonHelper.SetIsPending(BtnLogin, true);
                string username = TbAccount.Text;
                string password = PwdPassword.Password;
                bool rememberMe = SwRememberMe.IsChecked == true;
                Task.Run(() =>
                {
                    DoLogin(username, password);
                    DoLogin(username, password, rememberMe);
                });
            }
            //try
            //{
            //}
            //finally {
            //    ButtonHelper.SetIsPending(BtnLogin, false);
            //}
        }
        private void DoLogin(string username, string password)
        private void DoLogin(string username, string password, bool rememberMe)
        {
            SqliteHelper helper = null;
            try
            {
                helper = new SqliteHelper(PathHelper.DatabasePath);
                string sql = $"SELECT id,username,name From user WHERE username='{username}' and password='{password}'";
                string sql = $"SELECT id,username,password,name From user WHERE username='{username}' and password='{password}'";
                DataTable dt = helper.GetDataTable(sql);
                if (dt == null || dt.Rows.Count <= 0)
                {
@@ -70,10 +70,22 @@
                    dt.Rows[0]["username"].ToString(),
                    dt.Rows[0]["name"].ToString());
                UserInfo.Login(user);
                if (rememberMe)
                {
                    // 记住登录操作
                    string userToken =
                        JsonUtil.Serialize(
                            new UserInfo(null, user.Username, user.Name, dt.Rows[0]["password"].ToString()));
                    // 存储数据
                    BinUtil.SaveStrToBin(encryptor.Encrypt(userToken),
                        Path.Combine(PathHelper.DatabaseFolder, "user.bin"));
                }
                Dispatcher.Invoke(() =>
                {
                    LoadingWindow loading = new LoadingWindow();
                    loading.Show();
                    this.Closed -= window_Closed;
                    this.Close();
                });
            }
@@ -93,5 +105,37 @@
                });
            }
        }
        /// <summary>
        /// 渲染完成后,尝试自动登录
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void WindowX_ContentRendered(object sender, EventArgs e)
        {
            string userToken = string.Empty;
            if (BinUtil.LoadStrFromBin(ref userToken, Path.Combine(PathHelper.DatabaseFolder, "user.bin")))
            {
                userToken = encryptor.Decrypt(userToken);
                UserInfo userInfo = JsonUtil.Deserialize<UserInfo>(userToken);
                TbAccount.Text = userInfo.Username;
                PwdPassword.Password = userInfo.Password;
                SwRememberMe.IsChecked = true;
                Button_Click(null, null);
            }
        }
        private void window_Closed(object sender, EventArgs e)
        {
            Application.Current.Shutdown();
        }
        private void SwRememberMe_Unchecked(object sender, RoutedEventArgs e)
        {
            string path = Path.Combine(PathHelper.DatabaseFolder, "user.bin");
            if (File.Exists(path))
            {
                File.Delete(path);
            }
        }
    }
}