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

---
 src/user/ZhaohuiMima.java |  172 ++++++++++++++++++++++++++++++++++++++++++++-------------
 1 files changed, 133 insertions(+), 39 deletions(-)

diff --git a/src/user/ZhaohuiMima.java b/src/user/ZhaohuiMima.java
index 421c39e..54ab6de 100644
--- a/src/user/ZhaohuiMima.java
+++ b/src/user/ZhaohuiMima.java
@@ -1,5 +1,7 @@
 package user;
 
+import login.EmailCodeSender;
+import login.PasswordReset;
 import javax.swing.*;
 import java.awt.*;
 import java.awt.event.ActionEvent;
@@ -20,7 +22,6 @@
     private JLabel tipLabel;
     private Timer timer;
     private int countdown = 60;
-    private String generatedCode; // 瀛樺偍鐢熸垚鐨勯獙璇佺爜
     
     // 涓婚棰滆壊 (鍙傝�� Denglu.java)
     private final Color THEME_COLOR = new Color(46, 139, 87);
@@ -170,6 +171,13 @@
         });
     }
 
+    // 閭楠岃瘉鏂规硶
+    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 void setupEvents() {
         getCodeButton.addActionListener(new ActionListener() {
             @Override
@@ -177,15 +185,62 @@
                 String email = emailField.getText().trim();
                 if (email.isEmpty()) {
                     JOptionPane.showMessageDialog(ZhaohuiMima.this, "璇疯緭鍏ラ偖绠�", "鎻愮ず", JOptionPane.WARNING_MESSAGE);
+                    emailField.requestFocus();
                     return;
                 }
                 
-                // 杩欓噷搴旇娣诲姞鍙戦�侀獙璇佺爜鐨勯�昏緫
-                // 妯℃嫙鐢熸垚楠岃瘉鐮�
-                generatedCode = String.valueOf((int)((Math.random() * 9 + 1) * 100000));
+                // 楠岃瘉閭鏍煎紡
+                if (!isValidEmail(email)) {
+                    JOptionPane.showMessageDialog(ZhaohuiMima.this, 
+                        "璇疯緭鍏ユ湁鏁堢殑閭鍦板潃", 
+                        "杈撳叆閿欒", 
+                        JOptionPane.WARNING_MESSAGE);
+                    emailField.requestFocus();
+                    return;
+                }
                 
-                startCountdown();
-                JOptionPane.showMessageDialog(ZhaohuiMima.this, "楠岃瘉鐮佸凡鍙戦��: " + generatedCode, "鎻愮ず", JOptionPane.INFORMATION_MESSAGE);
+                // 绂佺敤鎸夐挳锛岄槻姝㈤噸澶嶇偣鍑�
+                getCodeButton.setEnabled(false);
+                
+                // 鍦ㄦ柊绾跨▼涓皟鐢ˋPI锛岄伩鍏嶉樆濉濽I
+                new Thread(() -> {
+                    try {
+                        // 璋冪敤閭欢楠岃瘉鐮佸彂閫丄PI
+                        EmailCodeSender.EmailCodeResponse response = EmailCodeSender.sendEmailCode(email);
+                        
+                        // 鍦‥DT绾跨▼涓洿鏂癠I
+                        SwingUtilities.invokeLater(() -> {
+                            if (response.isSuccess()) {
+                                // 鍙戦�佹垚鍔燂紝鏄剧ず鎻愮ず骞跺紑濮嬪�掕鏃�
+                                JOptionPane.showMessageDialog(ZhaohuiMima.this, 
+                                    "楠岃瘉鐮佸凡鍙戦�佸埌鎮ㄧ殑閭", 
+                                    "鎻愮ず", 
+                                    JOptionPane.INFORMATION_MESSAGE);
+                                
+                                // 寮�濮�60绉掑�掕鏃�
+                                startCountdown();
+                            } else {
+                                // 鍙戦�佸け璐ワ紝鏄剧ず閿欒淇℃伅骞舵仮澶嶆寜閽�
+                                getCodeButton.setEnabled(true);
+                                String errorMessage = response.getMessage() != null ? 
+                                    response.getMessage() : "楠岃瘉鐮佸彂閫佸け璐�";
+                                JOptionPane.showMessageDialog(ZhaohuiMima.this, 
+                                    errorMessage, 
+                                    "閿欒", 
+                                    JOptionPane.ERROR_MESSAGE);
+                            }
+                        });
+                    } catch (Exception ex) {
+                        // 寮傚父澶勭悊锛屾仮澶嶆寜閽苟鏄剧ず閿欒
+                        SwingUtilities.invokeLater(() -> {
+                            getCodeButton.setEnabled(true);
+                            JOptionPane.showMessageDialog(ZhaohuiMima.this, 
+                                "鍙戦�侀獙璇佺爜鏃跺彂鐢熼敊璇�: " + ex.getMessage(), 
+                                "閿欒", 
+                                JOptionPane.ERROR_MESSAGE);
+                        });
+                    }
+                }).start();
             }
         });
 
@@ -280,58 +335,97 @@
     private void savePassword() {
         String email = emailField.getText().trim();
         String code = codeField.getText().trim();
-        String password = new String(passwordField.getPassword());
-        String confirmPassword = new String(confirmPasswordField.getPassword());
+        String newPassword = new String(passwordField.getPassword()).trim();
+        String confirmPassword = new String(confirmPasswordField.getPassword()).trim();
 
+        // 杈撳叆楠岃瘉
         if (email.isEmpty()) {
             JOptionPane.showMessageDialog(this, "璇疯緭鍏ラ偖绠�", "閿欒", JOptionPane.ERROR_MESSAGE);
-            return;
-        }
-        if (code.isEmpty()) {
-            JOptionPane.showMessageDialog(this, "璇疯緭鍏ラ獙璇佺爜", "閿欒", JOptionPane.ERROR_MESSAGE);
+            emailField.requestFocus();
             return;
         }
         
-        // 楠岃瘉楠岃瘉鐮�
-        if (generatedCode == null || !generatedCode.equals(code)) {
-            JOptionPane.showMessageDialog(this, "楠岃瘉鐮侀敊璇�", "閿欒", JOptionPane.ERROR_MESSAGE);
+        // 楠岃瘉閭鏍煎紡
+        if (!isValidEmail(email)) {
+            JOptionPane.showMessageDialog(this, "璇疯緭鍏ユ湁鏁堢殑閭鍦板潃", "閿欒", JOptionPane.ERROR_MESSAGE);
+            emailField.requestFocus();
+            return;
+        }
+        
+        if (code.isEmpty()) {
+            JOptionPane.showMessageDialog(this, "璇疯緭鍏ラ獙璇佺爜", "閿欒", JOptionPane.ERROR_MESSAGE);
+            codeField.requestFocus();
             return;
         }
 
-        if (password.length() < 6) {
+        if (newPassword.isEmpty()) {
+            JOptionPane.showMessageDialog(this, "璇疯緭鍏ユ柊瀵嗙爜", "閿欒", JOptionPane.ERROR_MESSAGE);
+            passwordField.requestFocus();
+            return;
+        }
+
+        if (newPassword.length() < 6) {
             JOptionPane.showMessageDialog(this, "瀵嗙爜闀垮害涓嶈兘灏戜簬6涓瓧绗�", "閿欒", JOptionPane.ERROR_MESSAGE);
+            passwordField.requestFocus();
             return;
         }
-        if (password.length() > 25) {
+        if (newPassword.length() > 25) {
             JOptionPane.showMessageDialog(this, "瀵嗙爜闀垮害涓嶈兘瓒呰繃25涓瓧绗�", "閿欒", JOptionPane.ERROR_MESSAGE);
+            passwordField.requestFocus();
             return;
         }
-        if (!password.equals(confirmPassword)) {
+        
+        if (confirmPassword.isEmpty()) {
+            JOptionPane.showMessageDialog(this, "璇疯緭鍏ョ‘璁ゅ瘑鐮�", "閿欒", JOptionPane.ERROR_MESSAGE);
+            confirmPasswordField.requestFocus();
+            return;
+        }
+        
+        if (!newPassword.equals(confirmPassword)) {
             JOptionPane.showMessageDialog(this, "涓ゆ杈撳叆鐨勫瘑鐮佷笉涓�鑷�", "閿欒", JOptionPane.ERROR_MESSAGE);
+            confirmPasswordField.requestFocus();
             return;
         }
 
-        // 楠岃瘉閭鏄惁鍖归厤 (鍙�夛紝鏍规嵁闇�姹�)
-        String savedEmail = Usrdell.getProperty("email");
-        if (savedEmail != null && !savedEmail.equals(email)) {
-             // 杩欓噷鍋囪蹇呴』鍖归厤宸插瓨閭锛屾垨鑰呰繖鏄竴涓柊鍔熻兘鍏佽浠绘剰閭鎵惧洖锛�
-             // 閫氬父鎵惧洖瀵嗙爜闇�瑕佸尮閰嶈处鍙风粦瀹氱殑閭
-             // 濡傛灉鏈湴娌℃湁瀛橀偖绠憋紝鎴栬�呰緭鍏ョ殑閭涓嶅
-             // JOptionPane.showMessageDialog(this, "閭涓嶅尮閰�", "閿欒", JOptionPane.ERROR_MESSAGE);
-             // return;
-        }
-
-        // 杩欓噷搴旇楠岃瘉楠岃瘉鐮佹槸鍚︽纭�
-        // ...
-
-        // 淇濆瓨瀵嗙爜
-        try {
-            Usrdell.updateProperty("password", password);
-            JOptionPane.showMessageDialog(this, "瀵嗙爜淇敼鎴愬姛", "鎴愬姛", JOptionPane.INFORMATION_MESSAGE);
-            dispose();
-        } catch (Exception ex) {
-            JOptionPane.showMessageDialog(this, "淇濆瓨澶辫触: " + ex.getMessage(), "閿欒", JOptionPane.ERROR_MESSAGE);
-        }
+        // 绂佺敤淇濆瓨鎸夐挳锛岄槻姝㈤噸澶嶆彁浜�
+        saveButton.setEnabled(false);
+        
+        // 鍦ㄦ柊绾跨▼涓皟鐢ˋPI锛岄伩鍏嶉樆濉濽I
+        new Thread(() -> {
+            try {
+                // 璋冪敤瀵嗙爜閲嶇疆API
+                PasswordReset.ResetPasswordResponse response = PasswordReset.resetPassword(
+                    email, code, newPassword, confirmPassword);
+                
+                // 鍦‥DT绾跨▼涓洿鏂癠I
+                SwingUtilities.invokeLater(() -> {
+                    saveButton.setEnabled(true);
+                    
+                    // 鏄剧ず杩斿洖娑堟伅
+                    String message = response.getMessage() != null ? 
+                        response.getMessage() : (response.isSuccess() ? "瀵嗙爜閲嶇疆鎴愬姛" : "瀵嗙爜閲嶇疆澶辫触");
+                    int messageType = response.isSuccess() ? 
+                        JOptionPane.INFORMATION_MESSAGE : JOptionPane.ERROR_MESSAGE;
+                    String title = response.isSuccess() ? "鎴愬姛" : "澶辫触";
+                    
+                    JOptionPane.showMessageDialog(this, message, title, messageType);
+                    
+                    // 濡傛灉鎴愬姛锛屽叧闂獥鍙�
+                    if (response.isSuccess()) {
+                        dispose();
+                    }
+                });
+            } catch (Exception e) {
+                // 寮傚父澶勭悊锛屾仮澶嶆寜閽苟鏄剧ず閿欒
+                SwingUtilities.invokeLater(() -> {
+                    saveButton.setEnabled(true);
+                    JOptionPane.showMessageDialog(this, 
+                        "閲嶇疆瀵嗙爜鏃跺彂鐢熼敊璇�: " + e.getMessage(), 
+                        "閿欒", 
+                        JOptionPane.ERROR_MESSAGE);
+                });
+            }
+        }).start();
     }
 
     private JPanel createPasswordPanel() {

--
Gitblit v1.10.0