From d808047c1cd5d5a2e89fe2b6de0f44e7f88e920d Mon Sep 17 00:00:00 2001 From: wangchunxiang <526328077@qq.com> Date: Tue, 14 Oct 2025 15:20:48 +0800 Subject: [PATCH] =?UTF-8?q?feat(login):=20=E4=BC=98=E5=8C=96=E7=99=BB?= =?UTF-8?q?=E5=BD=95=E7=95=8C=E9=9D=A2=E4=BA=A4=E4=BA=92=E4=BD=93=E9=AA=8C?= =?UTF-8?q?=20-=20=E8=B0=83=E6=95=B4=E6=8A=96=E9=9F=B3=E5=92=8C=E7=BE=8E?= =?UTF-8?q?=E5=9B=A2=E7=88=AC=E8=99=AB=E6=9C=8D=E5=8A=A1=E7=9A=84=E6=B5=8F?= =?UTF-8?q?=E8=A7=88=E5=99=A8=E8=A7=86=E5=8F=A3=E5=AE=BD=E5=BA=A6=E4=BB=8E?= =?UTF-8?q?1600px=E4=B8=BA1680px=20-=20=E7=A7=BB=E9=99=A4=E6=9C=AA?= =?UTF-8?q?=E4=BD=BF=E7=94=A8=E7=9A=84=E5=AF=BC=E5=85=A5=E7=B1=BB=EF=BC=8C?= =?UTF-8?q?=E6=B8=85=E7=90=86=E5=86=97=E4=BD=99=E4=BB=A3=E7=A0=81-=20?= =?UTF-8?q?=E7=99=BB=E5=BD=95=E6=8C=89=E9=92=AE=E7=82=B9=E5=87=BB=E5=90=8E?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=8A=A0=E8=BD=BD=E6=8C=87=E7=A4=BA=E5=99=A8?= =?UTF-8?q?=E5=B9=B6=E7=A6=81=E7=94=A8=E6=8C=89=E9=92=AE=E9=98=B2=E6=AD=A2?= =?UTF-8?q?=E9=87=8D=E5=A4=8D=E6=8F=90=E4=BA=A4=20-=20=E5=B0=86=E7=99=BB?= =?UTF-8?q?=E5=BD=95=E8=AF=B7=E6=B1=82=E7=A7=BB=E8=87=B3=E5=AD=90=E7=BA=BF?= =?UTF-8?q?=E7=A8=8B=E6=89=A7=E8=A1=8C=E9=81=BF=E5=85=8D=E9=98=BB=E5=A1=9E?= =?UTF-8?q?UI=E7=BA=BF=E7=A8=8B=20-=20=E5=A2=9E=E5=8A=A0=E5=BC=82=E5=B8=B8?= =?UTF-8?q?=E5=A4=84=E7=90=86=E7=A1=AE=E4=BF=9D=E7=BD=91=E7=BB=9C=E5=BC=82?= =?UTF-8?q?=E5=B8=B8=E6=97=B6=E7=95=8C=E9=9D=A2=E5=8F=AF=E6=81=A2=E5=A4=8D?= =?UTF-8?q?=E6=AD=A3=E5=B8=B8=E7=8A=B6=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/fantaibao/page/LoginView.java | 92 ++++++++++++++----- .../com/fantaibao/service/FtbCrawlNetDy.java | 8 +- .../com/fantaibao/service/FtbCrawlNetMt.java | 10 +- 3 files changed, 69 insertions(+), 41 deletions(-) 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);