Browse Source

前端splash window,轮询一个接口,调通后才启动。区分一体机和工作站依靠前端的local_station配置

loki.wu 1 year ago
parent
commit
8e3481a8da

+ 2 - 1
assets/app_params.json

@@ -1,3 +1,4 @@
 {
-    "server_gateway": "https://platform.xinglinghui.com:9400"
+    "server_gateway": "http://192.168.3.2:8400",
+    "local_station": false
 }

+ 11 - 2
lib/architecture/app_parameters.dart

@@ -33,18 +33,27 @@ class AppParameterDataModel {
   static const C_DEFAULT_GATEWAY =
       "https://platform.xinglinghui.com:9400"; // TODO:
   static const C_HOME_PAGE_URL = "http://192.168.6.80:8408"; // TODO:
+  static const C_LOCAL_STATION = false;
 
   AppParameterDataModel({
     this.serverGateway = C_DEFAULT_GATEWAY,
     this.homePageUrl = C_HOME_PAGE_URL,
+    this.isLocalStation = C_LOCAL_STATION,
   });
   factory AppParameterDataModel.fromJson(Map<String, dynamic> map) {
+    final serverGetway = map['server_gateway'] ?? C_DEFAULT_GATEWAY;
+    final homePageUrl = map['home_page_url'] ?? C_HOME_PAGE_URL;
+    final isLocalStation = map['local_station'] ?? C_LOCAL_STATION;
     return AppParameterDataModel(
-      serverGateway: map['server_gateway'] ?? C_DEFAULT_GATEWAY,
-      homePageUrl: map['home_page_url'] ?? C_HOME_PAGE_URL,
+      serverGateway: serverGetway,
+      homePageUrl: homePageUrl,
+      isLocalStation: isLocalStation,
     );
   }
 
   String serverGateway;
   String homePageUrl;
+
+  ///是否本地工作站,默认false,如果设置为true,将会在App启动时轮询调用成功Server的接口才会进行登录,否则将会一直处于Splash页面
+  bool isLocalStation;
 }

+ 11 - 2
lib/architecture/utils/json_rpc_ex_interceptor.dart

@@ -1,6 +1,7 @@
 import 'package:fis_jsonrpc/rpc.dart';
 import 'package:flutter_easyloading/flutter_easyloading.dart';
 import 'package:get/get.dart';
+import 'package:vitalapp/architecture/app_parameters.dart';
 import 'package:vitalapp/architecture/utils/prompt_box.dart';
 import 'package:vitalapp/components/dialog_confirm.dart';
 import 'package:vitalapp/managers/interfaces/account.dart';
@@ -10,11 +11,19 @@ import 'package:fis_common/logger/logger.dart';
 class JsonRpcExInterceptor extends JsonRpcInterceptor {
   static final _reloginNeededCodes = [1, 2, 3, 9013];
   static bool _isDisplayingAlertRelogin = false;
+  String get serverGateway => AppParameters.data.serverGateway;
+
+  ///是否本地工作站(若为True,则需等待Server启动后再结束Splash Page)
+
+  bool get isLocalStation => AppParameters.data.isLocalStation;
   @override
   Future<JsonRpcNetworkException> onHttpRequestError(
       JsonRpcNetworkException error) async {
     logger.e("JsonRpcExInterceptor-HttpRequestError", error);
-    PromptBox.toast("网络请求错误");
+
+    if (!isLocalStation && error.data != "EchoAsync") {
+      PromptBox.toast("网络请求错误");
+    }
     return super.onHttpRequestError(error);
   }
 
@@ -47,7 +56,7 @@ class JsonRpcExInterceptor extends JsonRpcInterceptor {
           text = errorCodes['errorCode${error.code}'];
         }
         logger.e(text ?? '');
-        PromptBox.toast(text ?? "Unkonwn RPC Exception");
+        PromptBox.toast(text ?? "Unknown RPC Exception");
       }
     } catch (e) {
       // PromptBox.toast("${i18nBook.errorCodes.errorCodeUN.t}[$errorCode]");

+ 7 - 6
lib/main.dart

@@ -1,5 +1,6 @@
 import 'dart:async';
 
+import 'package:fis_lib_business_components/index.dart';
 import 'package:flutter/foundation.dart';
 import 'package:flutter/material.dart';
 import 'package:fis_common/logger/logger.dart';
@@ -39,6 +40,12 @@ class _App extends StatefulWidget {
 class _AppState extends State<_App> with WidgetsBindingObserver {
   Timer? _netCheckTimer;
 
+  @override
+  void initState() {
+    super.initState();
+    WidgetsBinding.instance.addObserver(this);
+  }
+
   @override
   Widget build(BuildContext context) {
     return GetMaterialApp(
@@ -96,12 +103,6 @@ class _AppState extends State<_App> with WidgetsBindingObserver {
     );
   }
 
-  @override
-  void initState() {
-    super.initState();
-    WidgetsBinding.instance.addObserver(this);
-  }
-
   @override
   void dispose() {
     WidgetsBinding.instance.removeObserver(this);

+ 3 - 4
lib/pages/medical_checkup_station/registration/controller/form.dart

@@ -7,6 +7,7 @@ import 'package:vitalapp/pages/home/controller.dart';
 import 'package:vitalapp/pages/medical_checkup_station/registration/controller.dart';
 import 'package:vitalapp/pages/medical_checkup_station/registration/state/list.dart';
 import 'package:vitalapp/pages/medical_checkup_station/registration/widgets/form/index.dart';
+import 'package:vitalapp/store/store.dart';
 
 class RegistrationFormController {
   late RegistrationController registrationController;
@@ -49,10 +50,8 @@ class RegistrationFormController {
       request: addRegiterInfo,
     );
     if (infoResult?.isNewPatient ?? false) {
-      Get.toNamed(
-        "/patient/info",
-        parameters: {"code": patient?.cardNo ?? ''},
-      );
+      Store.user.currentSelectPatientInfo = patient;
+      Get.toNamed("/patient/info");
     }
   }
 

+ 57 - 10
lib/pages/splash/view.dart

@@ -1,8 +1,11 @@
 import 'dart:async';
 
+import 'package:fis_common/logger/logger.dart';
 import 'package:flutter/foundation.dart';
 import 'package:flutter/material.dart';
 import 'package:get/get.dart';
+import 'package:vitalapp/architecture/app_parameters.dart';
+import 'package:vitalapp/rpc.dart';
 import 'package:vitalapp/store/store.dart';
 import 'controller.dart';
 
@@ -27,28 +30,32 @@ class _ImageAnimationState extends State<ImageAnimation>
   late final SplashController _controller;
   late AnimationController _animationController;
   late Animation<double> _animation;
+  int _callServerTimes = 0;
+
+  ///是否本地工作站(若为True,则需等待Server启动后再结束Splash Page)
+  bool _isLocalStation = false;
+  // 定义Timer,用于轮询
+  Timer? _serverCheckTimer;
 
   @override
   void initState() {
     super.initState();
-
+    _isLocalStation = AppParameters.data.isLocalStation;
+    if (_isLocalStation) {
+      _serverCheckTimer = Timer.periodic(
+          Duration(seconds: 1), (Timer t) => checkForConnected());
+    }
     _controller = Get.find<SplashController>();
-
     final animationCompleter = Completer<void>();
-
     Future.wait([
       _controller.loadData(),
       animationCompleter.future,
     ]).then((_) {
-      /// 重启判断是否是web端并且无token
-      if (!kIsWeb || Store.user.token == null) {
-        _controller.onRouteTo();
+      if (_isLocalStation) {
+        return;
       }
 
-      /// web端 并且有token
-      if (kIsWeb && Store.user.token != null) {
-        Get.offAllNamed("/");
-      }
+      _nextPage();
     });
 
     // 创建动画控制器
@@ -75,9 +82,37 @@ class _ImageAnimationState extends State<ImageAnimation>
   void dispose() {
     // 销毁动画控制器
     _animationController.dispose();
+    // 确保timer被释放
+    _serverCheckTimer?.cancel();
     super.dispose();
   }
 
+  void checkForConnected() async {
+    // 这里替换成你的接口调用逻辑
+    bool isCallSuccess = await callServer();
+
+    if (isCallSuccess) {
+      logger.i('call server success,times:${_callServerTimes}');
+      // 如果接口调用成功,取消timer并且跳转到登录页面
+      _serverCheckTimer?.cancel();
+      _nextPage();
+    }
+  }
+
+  Future<bool> callServer() async {
+    try {
+      await rpc.vinnoServer.echoAsync();
+      return true;
+    } catch (e) {
+      _callServerTimes++;
+      logger.i('call server times:${_callServerTimes}');
+      if (kDebugMode) {
+        print('call server times:${_callServerTimes}');
+      }
+    }
+    return false;
+  }
+
   @override
   Widget build(BuildContext context) {
     return Scaffold(
@@ -102,4 +137,16 @@ class _ImageAnimationState extends State<ImageAnimation>
       ),
     );
   }
+
+  void _nextPage() {
+    /// 重启判断是否是web端并且无token
+    if (!kIsWeb || Store.user.token == null) {
+      _controller.onRouteTo();
+    }
+
+    /// web端 并且有token
+    if (kIsWeb && Store.user.token != null) {
+      Get.offAllNamed("/");
+    }
+  }
 }

+ 2 - 2
pubspec.lock

@@ -375,8 +375,8 @@ packages:
     dependency: "direct main"
     description:
       path: "."
-      ref: "0cca03d"
-      resolved-ref: "0cca03d15251f028e1b752d20b112c81281084d7"
+      ref: "64cfd66"
+      resolved-ref: "64cfd66b6c8a96a397bd55e0d64b26f164f57848"
       url: "http://git.ius.plus:88/Project-Wing/fis_lib_jsonrpc.git"
     source: git
     version: "0.0.1"

+ 1 - 1
pubspec.yaml

@@ -155,7 +155,7 @@ dependency_overrides:
   fis_jsonrpc:
     git:
       url: http://git.ius.plus:88/Project-Wing/fis_lib_jsonrpc.git
-      ref: 0cca03d
+      ref: 64cfd66
     #path: ../fis_lib_jsonrpc
   fis_theme:
     git: