diff --git a/android/local.properties b/android/local.properties index 4b98d2e..79d213b 100644 --- a/android/local.properties +++ b/android/local.properties @@ -4,7 +4,7 @@ flutter.sdk=C:\\dev\\flutter flutter.buildMode=release flutter.versionName=1.0.0 flutter.versionCode=1 -flutter.minSdkVersion=21 +flutter.minSdkVersion=22 flutter.targetSdkVersion=35 flutter.compileSdkVersion=35 flutter.ndkVersion=28.0.12433566 \ No newline at end of file diff --git a/assets/file.json b/assets/file.json index e594e50..0930d34 100644 --- a/assets/file.json +++ b/assets/file.json @@ -1,3 +1,3 @@ [ - "assets/miniapp/mhtControl_1.0.0.zip" + "assets/miniapp/mhtControl_1.0.28.zip" ] \ No newline at end of file diff --git a/assets/miniapp/mhtControl_1.0.28.zip b/assets/miniapp/mhtControl_1.0.28.zip new file mode 100644 index 0000000..d62ed6d Binary files /dev/null and b/assets/miniapp/mhtControl_1.0.28.zip differ diff --git a/lib/common/util/CommonVariables.dart b/lib/common/util/CommonVariables.dart index 5cf6168..f9c3919 100644 --- a/lib/common/util/CommonVariables.dart +++ b/lib/common/util/CommonVariables.dart @@ -2,9 +2,11 @@ class CommonVariables { static bool isNetWorkOn = false; static String supabaseUrl = "https://zhmht.swes.com.cn:3443"; // 企业微信客服拉起的url地址 - static String wxKfUrl = "https://work.weixin.qq.com/kfid/kfcab6a07e8aac68945"; + // static String wxKfUrl = "https://work.weixin.qq.com/kfid/kfcab6a07e8aac68945"; + static String wxKfUrl = "https://work.weixin.qq.com/kfid/kfc7d2337b9c07b1269"; // 企业微信ID - static String wxCorpId = "wwc17348c75dbde1dc"; + // static String wxCorpId = "wwc17348c75dbde1dc"; + static String wxCorpId = "ww51feda6026280cd0"; //ICP备案号 static String ICPRightCode = "皖ICP备2024068219号-1A"; //公司名称 diff --git a/lib/main.dart b/lib/main.dart index a96221c..d7d5f91 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -140,10 +140,13 @@ Future initWX() async { Fluwx fluwx = Fluwx(); fluwx.registerApi( //请填写自己的微信appid - appId: "wxeb2688220799e2c5", + // appId: "wxeb2688220799e2c5",//太和 + appId: "wx929c548fea6af9c7",//眠花糖 doOnAndroid: true, doOnIOS: true, - universalLink: "https://app.he-info.com/theh/"); + // universalLink: "https://app.he-info.com/theh/", + universalLink: "https://zhmht.swes.com.cn/app/", + ); } Timer? _messageTimer; diff --git a/lib/pages/mh_page/new_mine_page.dart b/lib/pages/mh_page/new_mine_page.dart index 586a772..4e5ceec 100644 --- a/lib/pages/mh_page/new_mine_page.dart +++ b/lib/pages/mh_page/new_mine_page.dart @@ -3,7 +3,9 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_svg/svg.dart'; import 'package:flutterflow_ui/flutterflow_ui.dart'; +import 'package:fluwx/fluwx.dart'; import 'package:vbvs_app/common/color/appConstants.dart'; +import 'package:vbvs_app/common/util/CommonVariables.dart'; import 'package:vbvs_app/common/util/FitTool.dart'; import 'package:vbvs_app/common/util/MyUtils.dart'; import 'package:vbvs_app/component/tool/ClickableContainer.dart'; @@ -13,6 +15,8 @@ import 'package:vbvs_app/controller/theme_controller/ThemeController.dart'; import 'package:vbvs_app/controller/user_info_controller.dart'; import 'dart:ui' as ui; +import 'package:vbvs_app/pages/mh_page/user/controller/mht_login_controller.dart'; + class NewMinePage extends StatefulWidget { const NewMinePage({super.key}); @@ -299,10 +303,17 @@ class _MinePageState extends State { '问题与帮助', '常见的问题汇总,如:智能床连接流程、如何查看睡眠报告', path: "/issueListpage"), _buildListTile( - 'assets/img/icon/customer_service.svg', - '在线客服', - '购买和使用智能床过程中,如果遇到疑问可与客服进行联系', - path: ""), + 'assets/img/icon/customer_service.svg', + '在线客服', + '购买和使用智能床过程中,如果遇到疑问可与客服进行联系', + path: "", + onTap: () async { + MHTLoginController mhtLoginController = + Get.find(); + await mhtLoginController + .openWeChatCustomerService(context); + }, + ), ], ), ), @@ -334,85 +345,89 @@ class _MinePageState extends State { String svgPath, String title, String subtitle, { - // VoidCallback? onTap, String? path, bool showTopLine = false, + VoidCallback? onTap, // ✅ 新增可选 onTap 参数 }) { return ClickableContainer( - backgroundColor: Colors.transparent, - highlightColor: Colors.white, - padding: EdgeInsets.all(0.rpx), - onTap: () { + backgroundColor: Colors.transparent, + highlightColor: Colors.white, + padding: EdgeInsets.all(0.rpx), + onTap: () { + if (onTap != null) { + onTap(); // ✅ 使用外部传入的 onTap + } else { if (path == null || path.isEmpty) { TopSlideNotification.show(context, text: "待开发功能".tr); } else { Get.toNamed(path); } - }, - child: Container( - decoration: BoxDecoration( - border: Border( - top: showTopLine - ? BorderSide(color: Color(0xFF929699), width: 0.5.rpx) - : BorderSide.none, - bottom: BorderSide(color: Color(0xFF929699), width: 0.5.rpx), - ), + } + }, + child: Container( + decoration: BoxDecoration( + border: Border( + top: showTopLine + ? BorderSide(color: Color(0xFF929699), width: 0.5.rpx) + : BorderSide.none, + bottom: BorderSide(color: Color(0xFF929699), width: 0.5.rpx), ), - height: 116.rpx, - child: Padding( - padding: EdgeInsets.fromLTRB(40.rpx, 0.rpx, 40.rpx, 0.rpx), - child: Row( - children: [ - Container( + ), + height: 116.rpx, + child: Padding( + padding: EdgeInsets.fromLTRB(40.rpx, 0.rpx, 40.rpx, 0.rpx), + child: Row( + children: [ + SvgPicture.asset( + svgPath, + width: 42.rpx, + height: 42.rpx, + ), + SizedBox(width: 30.rpx), + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text( + title, + style: TextStyle( + color: Colors.white, + fontSize: 30.rpx, + ), + ), + Text( + subtitle, + style: TextStyle( + color: Color(0xFF929699), + fontSize: 20.rpx, + ), + maxLines: 1, + overflow: TextOverflow.ellipsis, + softWrap: true, + ), + ], + ), + ), + ClickableContainer( + backgroundColor: Colors.transparent, + highlightColor: Colors.transparent, + padding: EdgeInsets.only(right: 0), + onTap: () {}, + child: Container( + height: 30.rpx, + width: 30.rpx, child: SvgPicture.asset( - svgPath, - width: 42.rpx, - height: 42.rpx, + 'assets/img/icon/expand.svg', + color: Colors.white, ), ), - SizedBox(width: 30.rpx), - Expanded( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisAlignment: MainAxisAlignment.center, // 垂直方向居中对齐 - children: [ - Text( - title, - style: TextStyle( - color: Colors.white, - fontSize: 30.rpx, - ), - ), - // SizedBox(height: 6.rpx), // 加点间距 - Text( - subtitle, - style: TextStyle( - color: Color(0xFF929699), - fontSize: 20.rpx, - ), - maxLines: 1, - overflow: TextOverflow.ellipsis, - softWrap: true, // 允许换行 - ), - ], - ), - ), - ClickableContainer( - backgroundColor: Colors.transparent, - highlightColor: Colors.transparent, - padding: EdgeInsets.only(right: 0), - onTap: () {}, - child: Container( - height: 30.rpx, - width: 30.rpx, - child: SvgPicture.asset( - 'assets/img/icon/expand.svg', - color: Colors.white, - ))), - ], - ), + ), + ], ), - )); + ), + ), + ); } Widget _buildSettingButton() { diff --git a/lib/pages/mh_page/user/controller/mht_login_controller.dart b/lib/pages/mh_page/user/controller/mht_login_controller.dart index 2c95bfc..107b471 100644 --- a/lib/pages/mh_page/user/controller/mht_login_controller.dart +++ b/lib/pages/mh_page/user/controller/mht_login_controller.dart @@ -6,11 +6,14 @@ import 'package:fluwx/fluwx.dart'; import 'package:get_storage/get_storage.dart'; import 'package:json_annotation/json_annotation.dart'; import 'package:vbvs_app/common/color/ServiceConstant.dart'; +import 'package:vbvs_app/common/color/app_uri_status.dart'; +import 'package:vbvs_app/common/util/CommonVariables.dart'; import 'package:vbvs_app/common/util/MyUtils.dart'; import 'package:vbvs_app/common/util/requestWithLog.dart'; import 'package:vbvs_app/component/tool/TopSlideNotification.dart'; import 'package:vbvs_app/controller/time/countdown_controller.dart'; import 'package:vbvs_app/controller/user_info_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/user/controller/mht_register_controller.dart'; @@ -247,12 +250,54 @@ class MHTLoginController extends GetControllerEx { // await repository.logout(); } - loginByWechatCode(String code) async { - // return await repository.loginByWechatCode(code); + Future loginByWechatCode(String code) async { + String serviceAddress = ServiceConstant.service_address; + String serviceName = ServiceConstant.server_service; + String serviceApi = ServiceConstant.login; + String queryUrl = "${serviceAddress}${serviceName}${serviceApi}"; + String? language = ""; + var data = { + "type": 2, + "password": code, + "khCode": "mht", + }; + ApiResponse apiResponse = await requestWithLog( + logTitle: "微信登录", + method: MyHttpMethod.post, + queryUrl: queryUrl, + data: data); + if (apiResponse.code == HttpStatusCodes.ok) { + UserInfoController userInfoController = Get.find(); + userInfoController.model.login = 1; + userInfoController.model.user = UserModel.fromJson(apiResponse.data); + String token = apiResponse.rawResponse.headers['token']!.first; + EasyDartModule.dio.token = token; + final box = GetStorage(); + box.write('token', token); // 存储 token + box.write('user', userInfoController.model.user!.toJson()); // 存储用户信息 + } + return apiResponse.code!; } //注销账号 deletedAccount() async { // return await repository.deletedAccount(); } + + Future openWeChatCustomerService(BuildContext context) async { + bool isWeChatInstalled = await fluwx.isWeChatInstalled; + if (!isWeChatInstalled) { + TopSlideNotification.show(context, + text: "请先安装微信APP,再联系客服".tr, + textColor: themeController.currentColor.sc9); + return; + } + TopSlideNotification.show( + context, + text: "正在打开微信客服...".tr, + ); + await fluwx.open( + target: CustomerServiceChat( + corpId: CommonVariables.wxCorpId, url: CommonVariables.wxKfUrl)); + } } diff --git a/lib/pages/mh_page/user/page/mht_login_page.dart b/lib/pages/mh_page/user/page/mht_login_page.dart index d632471..f52b2ef 100644 --- a/lib/pages/mh_page/user/page/mht_login_page.dart +++ b/lib/pages/mh_page/user/page/mht_login_page.dart @@ -91,8 +91,8 @@ class MHTLoginPage extends GetView { textColor: themeController.currentColor.sc9); return; } - String msg = await controller.loginByWechatCode(code); - if (msg.isEmpty) { + int rescode = await controller.loginByWechatCode(code); + if (rescode == 1) { // TODO 操作全部跳转页面前成功以后移除监听,防止重复监听,其他方式登录成功也需要移出监听 controller.fluwxCancelable?.cancel(); // 登录成功移出网络检查监听 @@ -1785,25 +1785,29 @@ class MHTLoginPage extends GetView { borderRadius: 999.rpx, padding: EdgeInsets.zero, onTap: () async { - //loginController.model.isIos == true && - // if (loginController - // .model.register_agree == - // null || - // loginController - // .model.register_agree != - // true) { - // TopSlideNotification.show( - // context, - // text: "登录页.未同意协议".tr, - // textColor: - // themeController.currentColor.sc9, - // ); - // return; - // } - // await loginController - // .wxLoginSendAuth(context); - TopSlideNotification.show(context, - text: "测试阶段,暂不支持".tr); + // loginController.model.isIos == true && + MHTRegisterController + registerController = Get.find(); + if (registerController + .model.register_agree == + null || + registerController + .model.register_agree != + true) { + TopSlideNotification.show( + context, + text: "登录页.未同意协议".tr, + textColor: + themeController.currentColor.sc9, + ); + return; + } + MHTLoginController loginController = + Get.find(); + await loginController + .wxLoginSendAuth(); + // TopSlideNotification.show(context, + // text: "测试阶段,暂不支持".tr); }, child: Container( width: 90.rpx, diff --git a/pubspec.yaml b/pubspec.yaml index 2704ba8..1df3ea2 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -7,6 +7,16 @@ version: 1.0.0+1 environment: sdk: ^3.5.4 +fluwx: + app_id: 'wx929c548fea6af9c7' #填写自己的 WeChat app id. + debug_logging: false # Logging in debug mode. + android: +# interrupt_wx_request: true # Defaults to true. +# flutter_activity: 'MainActivity' # Defaults to app's launcher + ios: + universal_link: https://zhmht.swes.com.cn + no_pay: true # Set to true to disable payment. + dependencies: qr_flutter: ^4.1.0 flutter: