From f0d6cefec73492c29d8323e66fb92ee6bbb60cd2 Mon Sep 17 00:00:00 2001
From: 张世豪 <979909237@qq.com>
Date: 星期五, 26 十二月 2025 18:58:23 +0800
Subject: [PATCH] 优化了预览时候视图居中的逻辑

---
 src/denglu/Denglu.java |  171 ++++++++++++++++++++++++++++++++++++++++----------------
 1 files changed, 121 insertions(+), 50 deletions(-)

diff --git a/src/denglu/Denglu.java b/src/denglu/Denglu.java
index 98117a5..4a756c3 100644
--- a/src/denglu/Denglu.java
+++ b/src/denglu/Denglu.java
@@ -9,6 +9,7 @@
 import udpdell.UDPServer;
 import user.Usrdell;
 import Mqttmessage.Client;
+import login.LoginVerifier;
 import javax.swing.*;
 import java.awt.*;
 import java.awt.event.*;
@@ -438,11 +439,17 @@
         boolean isRemember = "1".equals(rememberPwd);
         rememberMe.setSelected(isRemember);
 
-        // 濡傛灉璁颁綇鎴戣閫変腑锛屽~鍏呭瘑鐮�
+        // 濡傛灉璁颁綇鎴戣閫変腑锛屽~鍏呭瘑鐮佸苟鑷姩鐧诲綍锛堝欢杩熸墽琛岋紝纭繚绐楀彛宸叉樉绀猴級
         if (isRemember) {
              String savedPassword = UserChuShiHua.getProperty("password");
-             if (savedPassword != null && !savedPassword.equals("-1")) {
+             String savedEmail = UserChuShiHua.getProperty("email");
+             if (savedPassword != null && !savedPassword.equals("-1") && 
+                 savedEmail != null && !savedEmail.equals("-1")) {
                  passwordField.setText(savedPassword);
+                 // 寤惰繜鎵ц鑷姩鐧诲綍锛岀‘淇濈獥鍙e凡缁忔樉绀�
+                 SwingUtilities.invokeLater(() -> {
+                     performAutoLogin(savedEmail, savedPassword);
+                 });
              }
         }
     }
@@ -459,11 +466,11 @@
     }
 
     private void performLogin() {
-        String username = usernameField.getText().trim();
+        String usernameOrEmail = usernameField.getText().trim();
         String password = new String(passwordField.getPassword()).trim();
         
         // 杈撳叆楠岃瘉
-        if (username.isEmpty()) {
+        if (usernameOrEmail.isEmpty()) {
             JOptionPane.showMessageDialog(this, 
                 "璇疯緭鍏ョ敤鎴峰悕鎴栭偖绠�", 
                 "杈撳叆閿欒", 
@@ -481,43 +488,117 @@
             return;
         }
         
-        // 楠岃瘉鐢ㄦ埛鍚嶅拰瀵嗙爜
-        if (validateLogin(username, password)) {
-            // 鏇存柊鏈�鍚庣櫥褰曟椂闂�
-            UserChuShiHua.updateProperty("lastLoginTime", String.valueOf(System.currentTimeMillis()));
-            
-            // 淇濆瓨璁颁綇鎴戠姸鎬�
-            if (rememberMe.isSelected()) {
-                UserChuShiHua.updateProperty("rememberPassword", "1");
-                UserChuShiHua.updateProperty("userName", username);
-            } else {
-                UserChuShiHua.updateProperty("rememberPassword", "0");
+        // 鑾峰彇閭鍦板潃锛堝鏋滆緭鍏ョ殑鏄敤鎴峰悕锛屼粠閰嶇疆鏂囦欢涓幏鍙栧搴旂殑閭锛�
+        String email = getEmailFromInput(usernameOrEmail);
+        
+        // 绂佺敤鐧诲綍鎸夐挳锛岄槻姝㈤噸澶嶇偣鍑�
+        loginButton.setEnabled(false);
+        
+        // 鍦ㄦ柊绾跨▼涓皟鐢ˋPI锛岄伩鍏嶉樆濉濽I
+        new Thread(() -> {
+            try {
+                // 璋冪敤鐧诲綍楠岃瘉API
+                LoginVerifier.LoginVerifyResponse response = LoginVerifier.verifyLogin(email, password);
+                
+                // 鍦‥DT绾跨▼涓洿鏂癠I
+                SwingUtilities.invokeLater(() -> {
+                    loginButton.setEnabled(true);
+                    
+                    if (response.isSuccess()) {
+                        // 鐧诲綍鎴愬姛
+                        // 鏇存柊鏈�鍚庣櫥褰曟椂闂�
+                        UserChuShiHua.updateProperty("lastLoginTime", String.valueOf(System.currentTimeMillis()));
+                        
+                        // 淇濆瓨璁颁綇鎴戠姸鎬�
+                        if (rememberMe.isSelected()) {
+                            UserChuShiHua.updateProperty("rememberPassword", "1");
+                            UserChuShiHua.updateProperty("userName", usernameOrEmail);
+                            UserChuShiHua.updateProperty("email", email);
+                            UserChuShiHua.updateProperty("password", password);
+                        } else {
+                            UserChuShiHua.updateProperty("rememberPassword", "0");
+                        }
+                        
+                        // 鍏抽棴鐧诲綍绐楀彛骞舵墦寮�棣栭〉
+                        openMainApplication();
+                    } else {
+                        // 鐧诲綍澶辫触锛屾樉绀洪敊璇俊鎭�
+                        String errorMessage = response.getMessage() != null ? 
+                            response.getMessage() : "鐢ㄦ埛鍚嶆垨瀵嗙爜閿欒锛�";
+                        JOptionPane.showMessageDialog(this, 
+                            errorMessage, 
+                            "鐧诲綍澶辫触", 
+                            JOptionPane.ERROR_MESSAGE);
+                        passwordField.setText("");
+                        passwordField.requestFocus();
+                    }
+                });
+            } catch (Exception e) {
+                // 寮傚父澶勭悊锛屾仮澶嶆寜閽苟鏄剧ず閿欒
+                SwingUtilities.invokeLater(() -> {
+                    loginButton.setEnabled(true);
+                    JOptionPane.showMessageDialog(this, 
+                        "鐧诲綍鏃跺彂鐢熼敊璇�: " + e.getMessage(), 
+                        "閿欒", 
+                        JOptionPane.ERROR_MESSAGE);
+                    passwordField.setText("");
+                    passwordField.requestFocus();
+                });
             }
-            
-            // 鍏抽棴鐧诲綍绐楀彛骞舵墦寮�棣栭〉
-            openMainApplication();
-            
-        } else {
-            JOptionPane.showMessageDialog(this, 
-                "鐢ㄦ埛鍚嶆垨瀵嗙爜閿欒锛�", 
-                "鐧诲綍澶辫触", 
-                JOptionPane.ERROR_MESSAGE);
-            passwordField.setText("");
-            passwordField.requestFocus();
-        }
+        }).start();
     }
 
-    private boolean validateLogin(String username, String password) {
-        // 浠嶶serChuShiHua鑾峰彇瀛樺偍鐨勭敤鎴锋暟鎹繘琛屾瘮杈�
-        String storedUsername = UserChuShiHua.getProperty("userName");
-        String storedPassword = UserChuShiHua.getProperty("password");
-        String storedEmail = UserChuShiHua.getProperty("email");
-        
-        // 妫�鏌ョ敤鎴峰悕/閭鍜屽瘑鐮佹槸鍚﹀尮閰�
-        boolean usernameMatch = username.equals(storedUsername) || username.equals(storedEmail);
-        boolean passwordMatch = password.equals(storedPassword);
-        
-        return usernameMatch && passwordMatch;
+    // 閭楠岃瘉鏂规硶
+    private boolean isValidEmail(String email) {
+        // 绠�鍗曠殑閭鏍煎紡楠岃瘉
+        String emailRegex = "^[a-zA-Z0-9_+&*-]+(?:\\.[a-zA-Z0-9_+&*-]+)*@(?:[a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,7}$";
+        return email != null && email.matches(emailRegex);
+    }
+    
+    // 鑾峰彇閭鍦板潃锛堝鏋滆緭鍏ョ殑鏄敤鎴峰悕锛屽垯浠庨厤缃枃浠朵腑鑾峰彇閭锛�
+    private String getEmailFromInput(String usernameOrEmail) {
+        // 濡傛灉杈撳叆鐨勬槸閭鏍煎紡锛岀洿鎺ヨ繑鍥�
+        if (isValidEmail(usernameOrEmail)) {
+            return usernameOrEmail;
+        }
+        // 鍚﹀垯锛屼粠閰嶇疆鏂囦欢涓幏鍙栦繚瀛樼殑閭
+        String savedEmail = UserChuShiHua.getProperty("email");
+        if (savedEmail != null && !savedEmail.equals("-1")) {
+            // 妫�鏌ヨ緭鍏ョ殑鐢ㄦ埛鍚嶆槸鍚﹀尮閰嶄繚瀛樼殑鐢ㄦ埛鍚�
+            String savedUsername = UserChuShiHua.getProperty("userName");
+            if (usernameOrEmail.equals(savedUsername)) {
+                return savedEmail;
+            }
+        }
+        // 濡傛灉鎵句笉鍒伴偖绠憋紝杩斿洖杈撳叆鐨勫瓧绗︿覆锛堝彲鑳芥槸閭鏍煎紡浣嗛獙璇佸け璐ワ紝鎴栬�呯敤鎴峰悕涓嶅瓨鍦級
+        return usernameOrEmail;
+    }
+    
+    // 鑷姩鐧诲綍锛堜粠閰嶇疆鏂囦欢璇诲彇閭鍜屽瘑鐮侊級
+    private void performAutoLogin(String email, String password) {
+        // 鍦ㄦ柊绾跨▼涓皟鐢ˋPI锛岄伩鍏嶉樆濉濽I
+        new Thread(() -> {
+            try {
+                LoginVerifier.LoginVerifyResponse response = LoginVerifier.verifyLogin(email, password);
+                
+                SwingUtilities.invokeLater(() -> {
+                    if (response.isSuccess()) {
+                        // 鐧诲綍鎴愬姛锛岃烦杞埌涓婚〉
+                        openMainApplication();
+                    } else {
+                        // 鐧诲綍澶辫触锛屾竻绌哄瘑鐮佸瓧娈碉紝璁╃敤鎴烽噸鏂拌緭鍏�
+                        passwordField.setText("");
+                        usernameField.requestFocus();
+                    }
+                });
+            } catch (Exception e) {
+                // 寮傚父澶勭悊锛屾竻绌哄瘑鐮佸瓧娈�
+                SwingUtilities.invokeLater(() -> {
+                    passwordField.setText("");
+                    usernameField.requestFocus();
+                });
+            }
+        }).start();
     }
 
     private void openMainApplication() {
@@ -538,7 +619,7 @@
             // 璁剧疆涓庣櫥褰曢〉闈㈢浉鍚岀殑灏哄
             mainFrame.setSize(UIConfig.DIALOG_WIDTH, UIConfig.DIALOG_HEIGHT);
             mainFrame.setMinimumSize(new Dimension(UIConfig.DIALOG_WIDTH, UIConfig.DIALOG_HEIGHT));
-            mainFrame.setResizable(false);
+            mainFrame.setResizable(true);
             mainFrame.setLocationRelativeTo(null);
             mainFrame.setVisible(true);
 
@@ -595,17 +676,7 @@
             System.out.println("鍒濆鐢ㄦ埛鍚�: " + UserChuShiHua.getProperty("userName"));
             System.out.println("鍒濆瀵嗙爜: " + UserChuShiHua.getProperty("password"));
             
-            // 妫�鏌ユ槸鍚﹁浣忓瘑鐮侊紝濡傛灉鏄垯鐩存帴杩涘叆涓婚〉
-            String rememberPwd = UserChuShiHua.getProperty("rememberPassword");
-            if ("1".equals(rememberPwd)) {
-                String storedUser = UserChuShiHua.getProperty("userName");
-                if (storedUser != null && !storedUser.equals("-1")) {
-                    launchMainApp();
-                    return;
-                }
-            }
-            
-            // 鍚姩鐧诲綍鐣岄潰
+            // 鍚姩鐧诲綍鐣岄潰锛堣嚜鍔ㄧ櫥褰曢�昏緫鍦� loadUserPreferences 涓鐞嗭級
             EventQueue.invokeLater(() -> {
                 try {
                     new Denglu().setVisible(true);

--
Gitblit v1.10.0