From c401a2f2fd1a509cdeb33e850bb5c2827074af48 Mon Sep 17 00:00:00 2001
From: alielie <alielie@git.com>
Date: 星期一, 17 三月 2025 08:44:51 +0800
Subject: [PATCH] 完善框架,新增两个close方法;

---
 WPFProject/Login.xaml.cs |   70 ++++++++++++++++++++++++++++------
 1 files changed, 57 insertions(+), 13 deletions(-)

diff --git a/WPFProject/Login.xaml.cs b/WPFProject/Login.xaml.cs
index 4999c8c..bf04d2c 100644
--- a/WPFProject/Login.xaml.cs
+++ b/WPFProject/Login.xaml.cs
@@ -1,4 +1,5 @@
 锘縰sing 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);
+            }
+        }
     }
 }

--
Gitblit v1.9.1