diff --git a/src/main/java/com/fantaibao/page/LoginView.java b/src/main/java/com/fantaibao/page/LoginView.java index 85f382f..e115273 100644 --- a/src/main/java/com/fantaibao/page/LoginView.java +++ b/src/main/java/com/fantaibao/page/LoginView.java @@ -6,6 +6,7 @@ import com.alibaba.fastjson.JSONObject; import com.fantaibao.config.GlobalConfig; import com.fantaibao.model.LoginUserDTO; import com.fantaibao.model.LoginUserVO; +import javafx.application.Platform; import javafx.geometry.Insets; import javafx.geometry.Pos; import javafx.scene.Scene; @@ -13,6 +14,7 @@ import javafx.scene.control.Alert; import javafx.scene.control.Button; import javafx.scene.control.Label; import javafx.scene.control.PasswordField; +import javafx.scene.control.ProgressIndicator; import javafx.scene.control.TextField; import javafx.scene.layout.VBox; import javafx.stage.Stage; @@ -54,39 +56,79 @@ public class LoginView { // 设置鼠标悬停时为手型光标 loginButton.setCursor(javafx.scene.Cursor.HAND); + // 创建加载指示器(默认隐藏) + ProgressIndicator progressIndicator = new ProgressIndicator(); + progressIndicator.setPrefSize(30, 30); + progressIndicator.setVisible(false); + // 添加登录按钮事件处理 loginButton.setOnAction(e -> { // 获取用户输入的账号和密码 String account = accountField.getText(); String password = passwordField.getText(); - LoginUserDTO loginUserDTO = new LoginUserDTO(); - loginUserDTO.setAccount(account); - loginUserDTO.setPassword(password); - String result = HttpUtil.post(GlobalConfig.loginInterfaceAddress, JSON.toJSONString(loginUserDTO)); - // 解析返回结果 - JSONObject jsonResultObject = JSON.parseObject(result); - if (jsonResultObject.getInteger("code") != 200) { - // 显示错误提示弹窗 - Alert alert = new Alert(Alert.AlertType.ERROR); - alert.setTitle("登录失败"); - alert.setHeaderText(null); - alert.setContentText(jsonResultObject.getString("msg")); - alert.showAndWait(); - return; - } - LoginUserVO loginUserVO = jsonResultObject.getObject("data", LoginUserVO.class); - // 网络地址 - GlobalConfig.tenantId = loginUserVO.getTenantId(); - GlobalConfig.mtDianPingInterfaceAddress = loginUserVO.getMtDianPingInterfaceAddress(); - GlobalConfig.mtDaZhInterfaceAddress = loginUserVO.getMtDaZhInterfaceAddress(); - GlobalConfig.dyPingJiaInterfaceAddress = loginUserVO.getDyPingJiaInterfaceAddress(); - GlobalConfig.mtLoginPage = loginUserVO.getMtLoginPage(); - GlobalConfig.dyLoginPage = loginUserVO.getDyLoginPage(); - navigateToPlatformSelection(primaryStage); + + // 显示加载指示器,禁用登录按钮 + progressIndicator.setVisible(true); + loginButton.setDisable(true); + loginButton.setText("登录中..."); + + // 在新线程中执行登录操作 + new Thread(() -> { + try { + LoginUserDTO loginUserDTO = new LoginUserDTO(); + loginUserDTO.setAccount(account); + loginUserDTO.setPassword(password); + String result = HttpUtil.post(GlobalConfig.loginInterfaceAddress, JSON.toJSONString(loginUserDTO)); + // 解析返回结果 + JSONObject jsonResultObject = JSON.parseObject(result); + // 在JavaFX主线程中更新UI + Platform.runLater(() -> { + // 隐藏加载指示器,启用登录按钮 + progressIndicator.setVisible(false); + loginButton.setDisable(false); + loginButton.setText("登 录"); + + if (jsonResultObject.getInteger("code") != 200) { + // 显示错误提示弹窗 + Alert alert = new Alert(Alert.AlertType.ERROR); + alert.setTitle("登录失败"); + alert.setHeaderText(null); + alert.setContentText(jsonResultObject.getString("msg")); + alert.showAndWait(); + return; + } + LoginUserVO loginUserVO = jsonResultObject.getObject("data", LoginUserVO.class); + // 网络地址 + GlobalConfig.tenantId = loginUserVO.getTenantId(); + GlobalConfig.mtDianPingInterfaceAddress = loginUserVO.getMtDianPingInterfaceAddress(); + GlobalConfig.mtDaZhInterfaceAddress = loginUserVO.getMtDaZhInterfaceAddress(); + GlobalConfig.dyPingJiaInterfaceAddress = loginUserVO.getDyPingJiaInterfaceAddress(); + GlobalConfig.mtLoginPage = loginUserVO.getMtLoginPage(); + GlobalConfig.dyLoginPage = loginUserVO.getDyLoginPage(); + navigateToPlatformSelection(primaryStage); + }); + } catch (Exception ex) { + // 发生异常时也要恢复UI状态 + Platform.runLater(() -> { + progressIndicator.setVisible(false); + loginButton.setDisable(false); + loginButton.setText("登 录"); + + // 显示错误提示弹窗 + Alert alert = new Alert(Alert.AlertType.ERROR); + alert.setTitle("登录失败"); + alert.setHeaderText(null); + alert.setContentText("登录过程中发生错误: " + ex.getMessage()); + alert.showAndWait(); + }); + } + }).start(); }); + // 添加组件到主容器 root.getChildren().addAll(titleLabel, infoLabel, new Label("账号"), accountField, - new Label("密码"), passwordField, loginButton); + new Label("密码"), passwordField, loginButton, progressIndicator); + // 设置场景并显示窗口 Scene scene = new Scene(root, 400, 600); primaryStage.setScene(scene); diff --git a/src/main/java/com/fantaibao/service/FtbCrawlNetDy.java b/src/main/java/com/fantaibao/service/FtbCrawlNetDy.java index dd12872..b462e73 100644 --- a/src/main/java/com/fantaibao/service/FtbCrawlNetDy.java +++ b/src/main/java/com/fantaibao/service/FtbCrawlNetDy.java @@ -1,18 +1,12 @@ package com.fantaibao.service; -import cn.hutool.http.HttpUtil; -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; import com.fantaibao.base.FtbCrawlNetBase; import com.fantaibao.config.GlobalConfig; -import com.fantaibao.model.UpdateUserCookieDTO; import com.microsoft.playwright.*; -import com.microsoft.playwright.options.Cookie; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; -import java.util.List; import java.util.concurrent.atomic.AtomicBoolean; @@ -29,7 +23,7 @@ public class FtbCrawlNetDy extends AbstractFtbCrawlNetBase implements FtbCrawlNe try (Browser browser = playwright.chromium().launch(new BrowserType.LaunchOptions().setHeadless(false))) { // 设置浏览器窗口大小为1920x1080 Browser.NewContextOptions contextOptions = new Browser.NewContextOptions() - .setViewportSize(1600, 900); + .setViewportSize(1680, 900); BrowserContext context = browser.newContext(contextOptions); Page page = context.newPage(); AtomicBoolean dyCookie = new AtomicBoolean(false); diff --git a/src/main/java/com/fantaibao/service/FtbCrawlNetMt.java b/src/main/java/com/fantaibao/service/FtbCrawlNetMt.java index c0f79e8..2c93c23 100644 --- a/src/main/java/com/fantaibao/service/FtbCrawlNetMt.java +++ b/src/main/java/com/fantaibao/service/FtbCrawlNetMt.java @@ -1,20 +1,12 @@ package com.fantaibao.service; -import cn.hutool.http.HttpUtil; -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; import com.fantaibao.base.FtbCrawlNetBase; import com.fantaibao.config.GlobalConfig; -import com.fantaibao.model.UpdateUserCookieDTO; import com.microsoft.playwright.*; import jakarta.annotation.Resource; -import javafx.application.Platform; -import javafx.scene.control.Alert; -import javafx.scene.control.ButtonType; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; -import java.util.Optional; import java.util.concurrent.atomic.AtomicBoolean; @@ -31,7 +23,7 @@ public class FtbCrawlNetMt extends AbstractFtbCrawlNetBase implements FtbCrawlNe try (Browser browser = playwright.chromium().launch(new BrowserType.LaunchOptions().setHeadless(false))) { // 设置浏览器窗口大小为1920x1080 Browser.NewContextOptions contextOptions = new Browser.NewContextOptions() - .setViewportSize(1600, 900); + .setViewportSize(1680, 900); BrowserContext context = browser.newContext(contextOptions); // 美团cookie AtomicBoolean mtCookie = new AtomicBoolean(false);