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.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.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.config.TextValidate; import top.octopusyan.http.Api; import top.octopusyan.http.request.LoginParam; import top.octopusyan.utils.*; 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; private boolean autoLogin; @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() { String account = ApplicatonStore.getAccount(); String password = ApplicatonStore.getPassword(); if (!StringUtils.isEmpty(account)) accountTextField.setText(account); if (!StringUtils.isEmpty(password)) { passwordTextField.setText(password); seePwdTextField.setText(password); } } // 隐藏展示密码框 private AnchorPane pwdParent; @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.textProperty().addListener((observable, oldValue, newValue) -> ApplicatonStore.setAccount(newValue)); passwordTextField.textProperty().addListener((observable, oldValue, newValue) -> ApplicatonStore.setPassword(newValue)); seePwdTextField.textProperty().addListener((observable, oldValue, newValue) -> ApplicatonStore.setPassword(newValue)); // 添加文本校验 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); // 记住密码 rememberCBox.selectedProperty().addListener((observable, oldValue, newValue) -> ApplicatonStore.setRememberMe(newValue)); // 自动登录 autoLoginCBox.selectedProperty().addListener((observable, oldValue, newValue) -> { ApplicatonStore.setAutoLogin(newValue); if (newValue && !ApplicatonStore.isRememberMe()) rememberCBox.selectedProperty().set(true); }); } @Override public void initViewAction() { // 注册 registerBtn.setOnMouseClicked(event -> { 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(ApplicatonStore.getPassword()); 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(); }); // 自动登录 if ((ApplicatonStore.isAutoLogin() || ApplicatonStore.isRegisterSuccess()) && !StringUtils.isEmpty(ApplicatonStore.getAccount()) && !StringUtils.isEmpty(ApplicatonStore.getPassword()) ) { login(); } } 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(), ApplicatonStore.getPassword())) .request(new OnHttpListener() { @Override public void onSucceed(String result) { // 登录出错 if (!JsoupUtil.isAlertSuccess(result)) { Platform.runLater(() -> AlertUtil.error(JsoupUtil.getErrorMessage(result)).show()); return; } // TODO 登录成功 setCsrf(); 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) { ProxyUtil.setCsrf(result); } @Override public void onFail(Exception e) { } }); } @Override public void onDestroy() { EasyHttp.cancel(); super.onDestroy(); } }