diff --git a/assets/file.json b/assets/file.json index a17f89b..05d703e 100644 --- a/assets/file.json +++ b/assets/file.json @@ -1,3 +1,3 @@ [ - "assets/miniapp/mhtControl_1.0.35.zip" + "assets/miniapp/mhtControl_1.0.40.zip" ] \ No newline at end of file diff --git a/assets/miniapp/mhtControl_1.0.38.zip b/assets/miniapp/mhtControl_1.0.38.zip deleted file mode 100644 index 94252ec..0000000 Binary files a/assets/miniapp/mhtControl_1.0.38.zip and /dev/null differ diff --git a/assets/miniapp/mhtControl_1.0.35.zip b/assets/miniapp/mhtControl_1.0.40.zip similarity index 97% rename from assets/miniapp/mhtControl_1.0.35.zip rename to assets/miniapp/mhtControl_1.0.40.zip index dfbfd25..facea2d 100644 Binary files a/assets/miniapp/mhtControl_1.0.35.zip and b/assets/miniapp/mhtControl_1.0.40.zip differ diff --git a/lib/controller/user_info_controller.dart b/lib/controller/user_info_controller.dart index f36cc3b..25d640f 100644 --- a/lib/controller/user_info_controller.dart +++ b/lib/controller/user_info_controller.dart @@ -16,6 +16,7 @@ import 'package:vbvs_app/controller/message/message_controller.dart'; import 'package:vbvs_app/controller/time/countdown_controller.dart'; import 'package:vbvs_app/model/api_response.dart'; import 'package:vbvs_app/model/user_data.dart'; +import 'package:vbvs_app/pages/mh_page/homepage/controller/mht_home_controller.dart'; part 'user_info_controller.g.dart'; @@ -224,6 +225,7 @@ class UserInfoController extends GetControllerEx { } ApiResponse logOut() { + MHTHomeController mhtHomeController = Get.find(); ApiResponse apiResponse = ApiResponse(code: 1, msg: "退出成功".tr); EasyDartModule.logger.info("退出登录"); DailyLogUtils.writeLog("退出登录"); @@ -244,6 +246,7 @@ class UserInfoController extends GetControllerEx { messageController.model.system_message_read = 0; CountdownController countdownController = Get.find(); countdownController.countdown.value = 0; + mhtHomeController.personnelList.value = []; return apiResponse; } } diff --git a/lib/pages/mh_page/MattressControl.dart b/lib/pages/mh_page/MattressControl.dart index d9c2ed0..ec4d89c 100644 --- a/lib/pages/mh_page/MattressControl.dart +++ b/lib/pages/mh_page/MattressControl.dart @@ -6,6 +6,7 @@ import 'package:flutter_svg/svg.dart'; import 'package:flutter_switch/flutter_switch.dart'; import 'package:vbvs_app/common/util/FitTool.dart'; import 'package:vbvs_app/controller/user_info_controller.dart'; +import 'package:vbvs_app/pages/mh_page/homepage/controller/mht_home_controller.dart'; import 'package:vbvs_app/pages/mh_page/test/WebviewTestModel.dart'; class MattressControlPage extends StatefulWidget { @@ -18,50 +19,56 @@ class MattressControlPage extends StatefulWidget { class _MattressControlPageState extends State { final controller = Get.put(ControlCardController()); UserInfoController userInfoController = Get.find(); + MHTHomeController deviceController = Get.find(); int selectedIndex = 1; // 当前选中的tab索引 @override Widget build(BuildContext context) { - final isLoggedIn = userInfoController.model.login == 1; - final backgroundImage = isLoggedIn - ? 'assets/images/new_background.png' - : 'assets/images/noLoginControl.png'; - return LayoutBuilder( builder: (context, bodySize) => GestureDetector( - child: Stack( - children: [ - // Background Image - Container( - decoration: BoxDecoration( - image: DecorationImage( - image: AssetImage(backgroundImage), - fit: BoxFit.fill, - ), - ), - ), + child: Obx(() { + final isLoggedIn = userInfoController.model.login == 1; + final hasDevice = deviceController.deviceList.values.isNotEmpty; - // Blur overlay when not logged in - if (!isLoggedIn) - Positioned.fill( - child: BackdropFilter( - filter: ImageFilter.blur(sigmaX: 5.0, sigmaY: 5.0), - child: Container( - color: Colors.black.withOpacity(0.5), + final showNoLoginView = !isLoggedIn || !hasDevice; + + final backgroundImage = showNoLoginView + ? 'assets/images/noLoginControl.png' + : 'assets/images/new_background.png'; + + return Stack( + children: [ + // 背景图片 + Container( + decoration: BoxDecoration( + image: DecorationImage( + image: AssetImage(backgroundImage), + fit: BoxFit.fill, ), ), ), + // 遮罩层:未登录或无设备时显示 + if (showNoLoginView) + Positioned.fill( + child: BackdropFilter( + filter: ImageFilter.blur(sigmaX: 5.0, sigmaY: 5.0), + child: Container( + color: Colors.black.withOpacity(0.5), + ), + ), + ), - // Main Content - Scaffold( - backgroundColor: Colors.transparent, - body: SafeArea( - child: WebviewTestView(), + // 主内容 + Scaffold( + backgroundColor: Colors.transparent, + body: SafeArea( + child: WebviewTestView(), + ), ), - ), - ], - ), + ], + ); + }), ), ); } diff --git a/lib/pages/mh_page/bluetooth.dart b/lib/pages/mh_page/bluetooth.dart index 089e7ac..32a6934 100644 --- a/lib/pages/mh_page/bluetooth.dart +++ b/lib/pages/mh_page/bluetooth.dart @@ -213,8 +213,8 @@ class _BluetoothPageState extends State { "/mhtCalibrationAfterPage", arguments: obsData, ), - _buildMenuButton( - context, '体征传感器'.tr, "/vitalSignsSensorPage", + _buildMenuButton(context, '体征传感器'.tr, + "/vitalSignsSensorPage", arguments: obsData), _buildMenuButton( context, @@ -231,7 +231,9 @@ class _BluetoothPageState extends State { if (!isBind) ...[ _buildMenuButton( context, - obsData['bind_type'] == 1 ? '解绑'.tr : '删除'.tr, + obsData['bind_type'] == 1 + ? '解绑'.tr + : '删除'.tr, "", onTap: () async { // await deviceListController @@ -251,7 +253,7 @@ class _BluetoothPageState extends State { // ef.log("[h5]通知列表更新报错:$e"); // } // Get.toNamed("/mianPageBottomChange"); - if (obsData['bind_type'] == 1) { + if (obsData['bind_type'] == 1) { // 解绑弹窗 showUnbindConfirmDialog( context: context, @@ -266,6 +268,8 @@ class _BluetoothPageState extends State { Get.find(); homeController.selectDevcie.value = ""; + await homeController + .getPersonList(); try { WebviewTestController webviewTestController = @@ -313,7 +317,9 @@ class _BluetoothPageState extends State { if (isBind) ...[ _buildMenuButton( context, - obsData['bind_type'] == 1 ? '解绑'.tr : '删除'.tr, + obsData['bind_type'] == 1 + ? '解绑'.tr + : '删除'.tr, "", onTap: () { if (obsData['bind_type'] == 1) { diff --git a/lib/pages/mh_page/homepage/mht_sleep_report_page.dart b/lib/pages/mh_page/homepage/mht_sleep_report_page.dart index abc0bb8..d6f9ea4 100644 --- a/lib/pages/mh_page/homepage/mht_sleep_report_page.dart +++ b/lib/pages/mh_page/homepage/mht_sleep_report_page.dart @@ -6,7 +6,6 @@ import 'package:flutterflow_ui/flutterflow_ui.dart'; import 'package:vbvs_app/common/color/app_uri_status.dart'; import 'package:vbvs_app/common/util/FitTool.dart'; import 'package:vbvs_app/common/util/MyUtils.dart'; -import 'package:vbvs_app/component/NullDataComponentWidget.dart'; import 'package:vbvs_app/controller/user_info_controller.dart'; import 'package:vbvs_app/pages/mh_page/homepage/controller/mht_home_controller.dart'; import 'package:vbvs_app/pages/sleep_report/new_sleep_report_page.dart'; @@ -56,28 +55,38 @@ class _MhtSleepReportPageState extends State { child: Stack( children: [ // Background Container - Container( - decoration: BoxDecoration( - image: DecorationImage( - image: AssetImage((userInfoController.model.login! != null && - userInfoController.model.login! == 1) - ? 'assets/images/new_background.png' - : "assets/images/noLoginSleep.jpg"), - fit: BoxFit.fill, - ), - ), - ), - // Blur overlay when not logged in - if (userInfoController.model.login == null || - userInfoController.model.login != 1) - Positioned.fill( - child: BackdropFilter( - filter: ImageFilter.blur(sigmaX: 5.0, sigmaY: 5.0), - child: Container( - color: Colors.black.withOpacity(0.5), + Obx(() { + return Container( + decoration: BoxDecoration( + image: DecorationImage( + image: AssetImage((userInfoController.model.login! != null && + userInfoController.model.login! == 1 && + deviceController.personnelList.value.isNotEmpty) + ? 'assets/images/new_background.png' + : "assets/images/noLoginSleep.jpg"), + fit: BoxFit.fill, ), ), - ), + ); + }), + Obx(() { + bool showBlur = userInfoController.model.login == null || + userInfoController.model.login != 1 || + (userInfoController.model.login == 1 && + deviceController.personnelList.isEmpty); + + return showBlur + ? Positioned.fill( + child: BackdropFilter( + filter: ImageFilter.blur(sigmaX: 5.0, sigmaY: 5.0), + child: Container( + color: Colors.black.withOpacity(0.5), + ), + ), + ) + : const SizedBox.shrink(); // 不显示时返回空组件 + }), + // Main content Scaffold( backgroundColor: Colors.transparent, @@ -85,84 +94,137 @@ class _MhtSleepReportPageState extends State { child: Container( width: MediaQuery.sizeOf(context).width, height: MediaQuery.sizeOf(context).height, - child: Column( - mainAxisSize: MainAxisSize.max, - mainAxisAlignment: (userInfoController.model.login! != null && - userInfoController.model.login! == 1) - ? MainAxisAlignment.start - : MainAxisAlignment.center, - children: [ - //未登录 - Obx(() { - if (userInfoController.model.login! == null || - userInfoController.model.login! == 0) { - return Center( - child: InkWell( - onTap: () => Get.toNamed("/loginPage"), - child: RichText( - text: TextSpan( - children: [ - TextSpan( - text: "请先".tr, - style: TextStyle( - color: Colors.white, - fontSize: 30.rpx, + child: Obx(() { + return Column( + mainAxisSize: MainAxisSize.max, + mainAxisAlignment: + (userInfoController.model.login! != null && + userInfoController.model.login! == 1 && + deviceController.personnelList.value.isNotEmpty) + ? MainAxisAlignment.start + : MainAxisAlignment.center, + children: [ + //未登录或已登录但未绑定设备 + Obx(() { + if (userInfoController.model.login! == null || + userInfoController.model.login! == 0) { + return Center( + child: InkWell( + onTap: () => Get.toNamed("/loginPage"), + child: RichText( + text: TextSpan( + children: [ + TextSpan( + text: "请先".tr, + style: TextStyle( + color: Colors.white, + fontSize: 30.rpx, + ), ), - ), - WidgetSpan( - child: Stack( - children: [ - Text( - "登录".tr, - style: TextStyle( - color: stringToColor("#84F5FF"), - fontSize: 30.rpx, + WidgetSpan( + child: Stack( + children: [ + Text( + "登录".tr, + style: TextStyle( + color: stringToColor("#84F5FF"), + fontSize: 30.rpx, + ), ), - ), - Positioned( - bottom: 0, - left: 0, - right: 0, - child: Container( - height: 1, - color: stringToColor("#84F5FF"), + Positioned( + bottom: 0, + left: 0, + right: 0, + child: Container( + height: 1, + color: stringToColor("#84F5FF"), + ), ), - ), - ], + ], + ), ), - ), - TextSpan( - text: "后,再查看睡眠报告".tr, - style: TextStyle( - color: Colors.white, - fontSize: 30.rpx, + TextSpan( + text: "后,再查看睡眠报告".tr, + style: TextStyle( + color: Colors.white, + fontSize: 30.rpx, + ), ), - ), - ], + ], + ), ), ), - ), - ); - } - return Container(); - }), - //已登录 - Obx(() { - if (userInfoController.model.login! != null && - userInfoController.model.login! == 1) { - final list = deviceController.personnelList.value; - if (list.isNotEmpty) { - WidgetsBinding.instance.addPostFrameCallback((_) { - formFieldController.value = list[0]["mac".tr]; - personInfo.value = list[0]; - homeController.selectPerson.value = list[0]; - homeController.selectDevcie.value = list[0]["mac".tr]; - deviceController - .getSleeps(formFieldController.value); - homeController.updateAll(); - }); + ); + } else if (userInfoController.model.login == 1 && + deviceController.personnelList.value.isEmpty) { + return Center( + child: InkWell( + onTap: () => Get.toNamed("/mHTDeviceTypePage"), + child: RichText( + text: TextSpan( + children: [ + TextSpan( + text: "请先".tr, + style: TextStyle( + color: Colors.white, + fontSize: 30.rpx, + ), + ), + WidgetSpan( + child: Stack( + children: [ + Text( + "绑定设备".tr, + style: TextStyle( + color: stringToColor("#84F5FF"), + fontSize: 30.rpx, + ), + ), + Positioned( + bottom: 0, + left: 0, + right: 0, + child: Container( + height: 1, + color: stringToColor("#84F5FF"), + ), + ), + ], + ), + ), + TextSpan( + text: "后,再查看睡眠报告".tr, + style: TextStyle( + color: Colors.white, + fontSize: 30.rpx, + ), + ), + ], + ), + ), + ), + ); } - if (homeController.personnelList.value.length != 0) + return Container(); + }), + //已登录且已绑定设备 + Obx(() { + if (userInfoController.model.login! != null && + userInfoController.model.login! == 1 && + deviceController.personnelList.value.isNotEmpty) { + final list = deviceController.personnelList.value; + if (list.isNotEmpty) { + WidgetsBinding.instance.addPostFrameCallback((_) { + formFieldController.value = list[0]["mac".tr]; + personInfo.value = list[0]; + homeController.selectPerson.value = list[0]; + homeController.selectDevcie.value = + list[0]["mac".tr]; + deviceController + .getSleeps(formFieldController.value); + homeController.updateAll(); + }); + } return Padding( padding: EdgeInsetsDirectional.fromSTEB( 0.rpx, 40.rpx, 30.rpx, 10.rpx), @@ -235,8 +297,8 @@ class _MhtSleepReportPageState extends State { deviceController .personnelList.value .map((d) { - var s = - d["name"] ?? d["mac".tr]; + var s = d["name"] ?? + d["mac".tr]; if (s == null) { return ""; } else { @@ -326,36 +388,34 @@ class _MhtSleepReportPageState extends State { ), ), ); - } - if (userInfoController.model.login != null && - userInfoController.model.login == 1) - return Expanded(child: NullDataWidget()); - return Container(); - }), + } + return Container(); + }), - Obx(() { - if (homeController.selectDevcie.value != null && - homeController.selectDevcie.value!.isNotEmpty && - deviceController.personnelList.value.isNotEmpty) - return Expanded( - child: NewSleepReportPage( - data: { - "tag": "123", - 'date': DateTime.now().millisecondsSinceEpoch, - 'mac'.tr: homeController.selectDevcie.value, - 'person': homeController.selectPerson.value, - 'backgroundImg': - 'assets/images/new_background.png', - 'arrow': false, - 'noBackImg': true, - 'person_show': false, - }, - ), - ); - return Container(); - }), - ], - ), + Obx(() { + if (homeController.selectDevcie.value != null && + homeController.selectDevcie.value!.isNotEmpty && + deviceController.personnelList.value.isNotEmpty) + return Expanded( + child: NewSleepReportPage( + data: { + "tag": "123", + 'date': DateTime.now().millisecondsSinceEpoch, + 'mac'.tr: homeController.selectDevcie.value, + 'person': homeController.selectPerson.value, + 'backgroundImg': + 'assets/images/new_background.png', + 'arrow': false, + 'noBackImg': true, + 'person_show': false, + }, + ), + ); + return Container(); + }), + ], + ); + }), ), ), ), diff --git a/lib/pages/mh_page/test/WebviewTestModel.dart b/lib/pages/mh_page/test/WebviewTestModel.dart index dab99c5..3fba08c 100644 --- a/lib/pages/mh_page/test/WebviewTestModel.dart +++ b/lib/pages/mh_page/test/WebviewTestModel.dart @@ -178,7 +178,8 @@ class WebviewTestController extends GetControllerEx { ef.log('查询睡眠习惯: $args[0]'); try { MHTBlueToothController blueToothController = Get.find(); - var sleepData = await blueToothController.loadMattressTimeData(args[0]); + var sleepData = + await blueToothController.loadMattressTimeData(args[0]); return sleepData['data']; } catch (e) { ef.log("[查询睡眠习惯失败]:$e"); @@ -373,44 +374,133 @@ class WebviewTestView extends GetComponent { @override WebviewTestController newinstance() { if (ef.kvRoot.WebviewTestController == null) { - ef.kvRoot.WebviewTestController = WebviewTestController(); if (Get.isRegistered() == false) { Get.put(ef.kvRoot.WebviewTestController); WebviewTestController webviewTestController = Get.find(); - webviewTestController.global=true; + webviewTestController.global = true; return webviewTestController; } } return ef.kvRoot.WebviewTestController; } + // @override + // Widget build(BuildContext context) { + // UserInfoController userInfoController = Get.find(); + // MHTHomeController deviceController = Get.find(); + // deviceController.getDeviceList().then((x) { + // if (controller.web.jsbridge!.inited) { + // //发送测试消息给webview + // // controller.web.jsbridge!.dart + // // .updateDeviceList(deviceController.deviceList.values); + // } + // }); + // return Scaffold( + // backgroundColor: Colors.transparent, + // body: Column( + // crossAxisAlignment: CrossAxisAlignment.center, + // mainAxisSize: MainAxisSize.max, + // mainAxisAlignment: (userInfoController.model.login! != null && + // userInfoController.model.login! == 1) + // ? MainAxisAlignment.start + // : MainAxisAlignment.center, + // children: [ + // Obx(() { + // return Visibility( + // visible: userInfoController.model.login! == null || + // userInfoController.model.login! == 0, + // child: Center( + // child: InkWell( + // onTap: () => Get.toNamed("/loginPage"), + // child: RichText( + // text: TextSpan( + // children: [ + // TextSpan( + // text: "请先".tr, + // style: TextStyle( + // color: Colors.white, + // fontSize: 30.rpx, + // ), + // ), + // WidgetSpan( + // child: Stack( + // children: [ + // Text( + // "登录".tr, + // style: TextStyle( + // color: stringToColor("#84F5FF"), + // fontSize: 30.rpx, + // ), + // ), + // Positioned( + // bottom: 0, // 控制下划线与文字的间距 + // left: 0, + // right: 0, + // child: Container( + // height: 1, // 下划线粗细 + // color: stringToColor("#84F5FF"), + // ), + // ), + // ], + // ), + // ), + // TextSpan( + // text: "后,再进行设备控制".tr, + // style: TextStyle( + // color: Colors.white, + // fontSize: 30.rpx, + // ), + // ), + // ], + // ), + // ), + // ), + // ), + // ); + // }), + // Obx(() { + // return Visibility( + // visible: userInfoController.model.login! != null && + // userInfoController.model.login! == 1, + // child: Expanded( + // child: Align( + // alignment: Alignment.topLeft, + // child: Obx(() { + // return controller.ready.value + // ? controller.web.build() + // : Container(); + // }), + // ), + // )); + // }), + // ], + // ), + // ); + // } + @override Widget build(BuildContext context) { - UserInfoController userInfoController = Get.find(); - MHTHomeController deviceController = Get.find(); - deviceController.getDeviceList().then((x) { - if (controller.web.jsbridge!.inited) { - //发送测试消息给webview - // controller.web.jsbridge!.dart - // .updateDeviceList(deviceController.deviceList.values); - } - }); - return Scaffold( - backgroundColor: Colors.transparent, - body: Column( - crossAxisAlignment: CrossAxisAlignment.center, - mainAxisSize: MainAxisSize.max, - mainAxisAlignment: (userInfoController.model.login! != null && - userInfoController.model.login! == 1) - ? MainAxisAlignment.start - : MainAxisAlignment.center, - children: [ - Obx(() { - return Visibility( - visible: userInfoController.model.login! == null || - userInfoController.model.login! == 0, - child: Center( + return Obx(() { + UserInfoController userInfoController = Get.find(); + MHTHomeController deviceController = Get.find(); + final isLoggedIn = userInfoController.model.login == 1; + final hasDevice = deviceController.deviceList.values.isNotEmpty; + + final showWeb = isLoggedIn && hasDevice; + final mainAxisAlignment = + showWeb ? MainAxisAlignment.start : MainAxisAlignment.center; + + return Scaffold( + backgroundColor: Colors.transparent, + body: Column( + crossAxisAlignment: CrossAxisAlignment.center, + mainAxisSize: MainAxisSize.max, + mainAxisAlignment: mainAxisAlignment, + children: [ + // 未登录提示 + if (!isLoggedIn) + Center( child: InkWell( onTap: () => Get.toNamed("/loginPage"), child: RichText( @@ -434,11 +524,11 @@ class WebviewTestView extends GetComponent { ), ), Positioned( - bottom: 0, // 控制下划线与文字的间距 + bottom: 0, left: 0, right: 0, child: Container( - height: 1, // 下划线粗细 + height: 1, color: stringToColor("#84F5FF"), ), ), @@ -457,25 +547,72 @@ class WebviewTestView extends GetComponent { ), ), ), - ); - }), - Obx(() { - return Visibility( - visible: userInfoController.model.login! != null && - userInfoController.model.login! == 1, - child: Expanded( - child: Align( - alignment: Alignment.topLeft, - child: Obx(() { - return controller.ready.value - ? controller.web.build() - : Container(); - }), + + // 已登录但无设备提示 + if (isLoggedIn && !hasDevice) + Center( + child: InkWell( + onTap: () => Get.toNamed("/mHTDeviceTypePage"), + child: RichText( + text: TextSpan( + children: [ + TextSpan( + text: "请先".tr, + style: TextStyle( + color: Colors.white, + fontSize: 30.rpx, + ), + ), + WidgetSpan( + child: Stack( + children: [ + Text( + "绑定设备".tr, + style: TextStyle( + color: stringToColor("#84F5FF"), + fontSize: 30.rpx, + ), + ), + Positioned( + bottom: 0, + left: 0, + right: 0, + child: Container( + height: 1, + color: stringToColor("#84F5FF"), + ), + ), + ], + ), + ), + TextSpan( + text: "后,再进行设备控制".tr, + style: TextStyle( + color: Colors.white, + fontSize: 30.rpx, + ), + ), + ], + ), ), - )); - }), - ], - ), - ); + ), + ), + + // 显示 WebView + if (showWeb) + Expanded( + child: Align( + alignment: Alignment.topLeft, + child: Obx(() { + return controller.ready.value + ? controller.web.build() + : Container(); + }), + ), + ), + ], + ), + ); + }); } }