package com.mathgenerator.controller; import com.mathgenerator.service.UserService; import javafx.event.ActionEvent; import javafx.fxml.FXML; import javafx.fxml.FXMLLoader; import javafx.scene.Parent; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.control.Label; import javafx.scene.control.PasswordField; import javafx.scene.control.TextField; import javafx.stage.Stage; import java.io.IOException; public class RegisterController { private final UserService userService = new UserService(); private String sentCode; // 用于存储已发送的验证码 @FXML private TextField usernameField; @FXML private TextField emailField; @FXML private TextField verificationCodeField; @FXML private PasswordField passwordField; @FXML private PasswordField confirmPasswordField; @FXML private Button sendCodeButton; @FXML private Button registerButton; @FXML private Button backToLoginButton; @FXML private Label statusLabel; @FXML private void handleSendCodeAction(ActionEvent event) { String email = emailField.getText(); if (email.isEmpty() || !email.contains("@")) { statusLabel.setText("请输入一个有效的邮箱地址!"); return; } // 调用后端服务发送验证码(模拟) this.sentCode = userService.sendVerificationCode(email); statusLabel.setText("验证码已发送(请查看控制台输出)。"); sendCodeButton.setDisable(true); // 防止重复点击 } @FXML private void handleRegisterAction(ActionEvent event) { // 1. 字段校验 if (usernameField.getText().isEmpty() || emailField.getText().isEmpty() || verificationCodeField.getText().isEmpty() || passwordField.getText().isEmpty()) { statusLabel.setText("所有字段都不能为空!"); return; } if (!passwordField.getText().equals(confirmPasswordField.getText())) { statusLabel.setText("两次输入的密码不匹配!"); return; } if (this.sentCode == null || !this.sentCode.equals(verificationCodeField.getText())) { statusLabel.setText("验证码错误!"); return; } if (!UserService.isPasswordValid(passwordField.getText())) { statusLabel.setText("密码格式错误!必须为6-10位,且包含大小写字母和数字。"); return; } // 2. 调用后端服务进行注册 boolean success = userService.register( usernameField.getText(), emailField.getText(), passwordField.getText() ); // 3. 根据结果更新UI if (success) { statusLabel.setText("注册成功!请返回登录。"); registerButton.setDisable(true); } else { statusLabel.setText("注册失败:用户名或邮箱已被占用。"); } } @FXML private void handleBackToLoginAction(ActionEvent event) { loadScene("/com/mathgenerator/view/LoginView.fxml"); } private void loadScene(String fxmlPath) { try { Parent root = FXMLLoader.load(getClass().getResource(fxmlPath)); Stage stage = (Stage) backToLoginButton.getScene().getWindow(); stage.setScene(new Scene(root)); } catch (IOException e) { e.printStackTrace(); } } }