package top.octopusyan.controller; import com.jfoenix.controls.JFXButton; import com.jfoenix.controls.JFXCheckBox; import com.jfoenix.controls.JFXPasswordField; import com.jfoenix.controls.JFXTextField; import javafx.application.Platform; import javafx.beans.property.SimpleStringProperty; import javafx.fxml.FXML; import javafx.fxml.Initializable; import javafx.scene.control.Button; import javafx.scene.image.ImageView; import javafx.scene.input.KeyCode; import javafx.scene.layout.AnchorPane; import javafx.scene.layout.StackPane; import javafx.scene.paint.Color; import org.apache.commons.lang3.StringUtils; import org.jetbrains.annotations.NotNull; import org.kordamp.ikonli.javafx.FontIcon; import top.octopusyan.base.BaseController; import top.octopusyan.config.TextValidate; import top.octopusyan.http.Api; import top.octopusyan.http.request.FindPassParam; import top.octopusyan.http.request.LoginParam; import top.octopusyan.manager.ProxyManager; import top.octopusyan.manager.http.EasyHttp; import top.octopusyan.manager.http.api.NotParamApi; import top.octopusyan.manager.http.config.HttpConstant; import top.octopusyan.manager.http.listener.OnHttpListener; import top.octopusyan.model.ApplicatonStore; import top.octopusyan.utils.AlertUtil; import top.octopusyan.utils.JsoupUtil; import java.io.IOException; /** * @author : octopus yan * @email : octopus_yan@foxmail.com * @description : Login 控制器 * @create : 2022-3-30 16:06 */ public class LoginController extends BaseController implements Initializable { @FXML public StackPane root; @FXML public JFXButton closeBtn, minimizeBtn, loginBtn; @FXML public AnchorPane loginBottomPane; @FXML public ImageView loginBkgPane; @FXML public JFXButton registerBtn; @FXML public JFXTextField accountTextField; @FXML public JFXPasswordField passwordTextField; @FXML public JFXTextField seePwdTextField; @FXML public JFXButton accountIconBtn; @FXML public FontIcon accountIcon; @FXML public JFXButton pwdIconBtn; @FXML public FontIcon pwdIcon; @FXML public JFXButton seePwdIconBtn; @FXML public FontIcon seePwdIcon; @FXML public JFXCheckBox autoLoginCBox; @FXML public JFXCheckBox rememberCBox; @FXML public JFXButton findpassBtn; private SimpleStringProperty tmppwd = new SimpleStringProperty(); @Override public boolean dragWindow() { return true; } @Override public StackPane getRootPanel() { return root; } @NotNull @Override public String getRootFxmlPath() { return "/fxml/login.fxml"; } @Override public Button getClooseBtn() { return closeBtn; } @Override public Button getMinimizeBtn() { return minimizeBtn; } @Override public JFXButton getFirstBtn() { return minimizeBtn; } @Override public void initData() { // 数据绑定 // 账号 accountTextField.textProperty().bindBidirectional(ApplicatonStore.accountProperty()); // 密码 if (ApplicatonStore.isRememberMe()) tmppwd.set(ApplicatonStore.getPassword()); // 自动登录 autoLoginCBox.selectedProperty().bindBidirectional(ApplicatonStore.autoLoginProperty()); // 记住我 rememberCBox.selectedProperty().bindBidirectional(ApplicatonStore.rememberMeProperty()); passwordTextField.textProperty().bindBidirectional(tmppwd); seePwdTextField.textProperty().bindBidirectional(tmppwd); } // 隐藏展示密码框 private AnchorPane pwdParent; private AlertUtil.Builder findpassAlert; @Override public void initViewStyle() { // 文本框焦点状态监听 accountTextField.focusedProperty().addListener((observable, oldValue, newValue) -> { if (newValue) accountTextField.resetValidation(); }); passwordTextField.focusedProperty().addListener((observable, oldValue, newValue) -> { if (newValue) passwordTextField.resetValidation(); }); seePwdTextField.focusedProperty().addListener((observable, oldValue, newValue) -> { if (newValue) seePwdTextField.resetValidation(); }); // 隐藏展示密码框 pwdParent = (AnchorPane) passwordTextField.getParent(); pwdParent.getChildren().remove(seePwdTextField); // 添加文本校验 accountTextField.getValidators().add(TextValidate.AccoountRequired); accountTextField.getValidators().add(TextValidate.AccoountValidator); accountTextField.getValidators().add(TextValidate.getLengthValidator(6, 18, "账号")); passwordTextField.getValidators().add(TextValidate.PasswordRequired); seePwdTextField.getValidators().add(TextValidate.PasswordRequired); // 自动登录 autoLoginCBox.selectedProperty().addListener((observable, oldValue, newValue) -> { if (newValue) ApplicatonStore.setRememberMe(true); }); } @Override public void initViewAction() { // 注册 registerBtn.setOnMouseClicked(event -> { ApplicatonStore.setPassword(tmppwd.get()); try { jumpTo(new RegisterController()); } catch (IOException e) { e.printStackTrace(); } }); // 查看密码 seePwdIconBtn.setOnMouseClicked(event -> { boolean isHide = pwdParent.getChildren().contains(passwordTextField); pwdParent.getChildren().remove(isHide ? passwordTextField : seePwdTextField); pwdParent.getChildren().add(1, isHide ? seePwdTextField : passwordTextField); (isHide ? seePwdTextField : passwordTextField).setText(tmppwd.get()); seePwdIcon.setIconColor(isHide ? Color.BLUE : Color.BLACK); }); // 登录 loginBtn.setOnMouseClicked(event -> login()); accountTextField.setOnKeyPressed(event -> { if (event.getCode() == KeyCode.ENTER) login(); }); passwordTextField.setOnKeyPressed(event -> { if (event.getCode() == KeyCode.ENTER) login(); }); // 找回密码 findpassBtn.setOnMouseClicked(event -> { findpassAlert = AlertUtil.input("请输入您的账号或邮箱") .title("找回密码") .header(null); findpass(findpassAlert.getInput()); }); // 自动登录 if ((ApplicatonStore.isAutoLogin() || ApplicatonStore.isRegisterSuccess()) && !StringUtils.isEmpty(ApplicatonStore.getAccount()) && !StringUtils.isEmpty(ApplicatonStore.getPassword()) ) { login(); } } /** * 找回密码 */ private void findpass(String input) { if (StringUtils.isNotEmpty(input)) EasyHttp.builder() .api(Api.findpass) .param(new FindPassParam(input)) .request(new OnHttpListener() { @Override public void onSucceed(String result) { Platform.runLater(() -> { if (JsoupUtil.isAlertSuccess(result)) { AlertUtil.info(JsoupUtil.getSuccessMessage(result)).show(); } else { AlertUtil.error(JsoupUtil.getErrorMessage(result)).show(); } }); } @Override public void onFail(Exception e) { Platform.runLater(() -> AlertUtil.exceptionAlert(e).show()); } }); } private void login() { // 获取文本校验结果 boolean pwdValidate = pwdParent.getChildren().contains(passwordTextField) ? passwordTextField.validate() : seePwdTextField.validate(); boolean accountValidate = accountTextField.validate(); if (pwdValidate && accountValidate) EasyHttp.builder() .api(Api.Login) .param(new LoginParam(accountTextField.getText(), tmppwd.get())) .request(new OnHttpListener() { @Override public void onSucceed(String result) { // 登录出错 if (!JsoupUtil.isAlertSuccess(result)) { Platform.runLater(() -> AlertUtil.error(JsoupUtil.getErrorMessage(result)).show()); return; } // 登录成功 setCsrf(); // 记住我 ApplicatonStore.rememberMe(tmppwd.get()); // 跳转 Platform.runLater(() -> { try { jumpTo(new MainController()); } catch (IOException e) { e.printStackTrace(); } }); } @Override public void onFail(Exception e) { } }); } private void setCsrf() { EasyHttp.builder() .api(new NotParamApi( "/?page=panel&module=addproxy", HttpConstant.Method.GET )) .request(new OnHttpListener() { @Override public void onSucceed(String result) { ProxyManager.setCsrf(result); } @Override public void onFail(Exception e) { } }); } @Override public void onDestroy() { super.onDestroy(); } }