diff --git a/assets/mhlangs/en_US.json b/assets/mhlangs/en_US.json index 45f4b5f..2b4f925 100644 --- a/assets/mhlangs/en_US.json +++ b/assets/mhlangs/en_US.json @@ -603,5 +603,16 @@ "注销账号成功": "Account deleted successfully", "注销账号失败": "Failed to delete account", "是否确认注销?": "Are you sure you want to delete your account?", - "设备已被用户解绑,将取消当前分享!": "The device has been unbound by the user, and the current sharing will be cancelled!","设备解绑提醒": "Device Unbind Reminder" + "设备已被用户解绑,将取消当前分享!": "The device has been unbound by the user, and the current sharing will be cancelled!", + "设备解绑提醒": "Device Unbind Reminder", + "位置权限说明": "Location Permission Description", + "获得位置信息,连接附近的蓝牙设备与推荐附近门店": "Obtain location information, connect to nearby Bluetooth devices, and recommend nearby stores", + "蓝牙权限说明": "Bluetooth Permission Description", + "搜索链接附近的蓝牙设备": "Search and connect to nearby Bluetooth devices", + "附近设备权限说明": "Nearby Device Permission Description", + "平均心率": "Ave HeartRate", + "平均hrv": "Ave HRV", + "平均呼吸": "Ave Respiration", + "在床时长": "Time in Bed", + "生命体征指的是睡眠周期的整体数据。": "Vital signs refer to the overall data of the sleep cycle." } \ No newline at end of file diff --git a/assets/mhlangs/zh_CN.json b/assets/mhlangs/zh_CN.json index 3641f84..ddd7e2b 100644 --- a/assets/mhlangs/zh_CN.json +++ b/assets/mhlangs/zh_CN.json @@ -602,5 +602,15 @@ "注销账号失败": "注销账号失败", "是否确认注销?": "是否确认注销?", "设备已被用户解绑,将取消当前分享!": "设备已被用户解绑,将取消当前分享!", - "设备解绑提醒": "设备解绑提醒" + "设备解绑提醒": "设备解绑提醒", + "位置权限说明": "位置权限说明", + "获得位置信息,连接附近的蓝牙设备与推荐附近门店": "获得位置信息,连接附近的蓝牙设备与推荐附近门店和获取天气情况", + "蓝牙权限说明": "蓝牙权限说明", + "搜索链接附近的蓝牙设备": "搜索链接附近的蓝牙设备", + "附近设备权限说明": "附近设备权限说明", + "平均心率":"平均心率", + "平均hrv":"平均hrv", + "平均呼吸":"平均呼吸", + "在床时长": "在床时长", + "生命体征指的是睡眠周期的整体数据。":"生命体征指的是睡眠周期的整体数据。" } \ No newline at end of file diff --git a/assets/mhlangs/zh_TW.json b/assets/mhlangs/zh_TW.json index 6bd8eb7..f66f44d 100644 --- a/assets/mhlangs/zh_TW.json +++ b/assets/mhlangs/zh_TW.json @@ -602,5 +602,15 @@ "注销账号失败": "註銷帳號失敗", "是否确认注销?": "是否確認註銷?", "设备已被用户解绑,将取消当前分享!": "設備已被用戶解綁,將取消當前分享!", - "设备解绑提醒": "設備解绑提醒" + "设备解绑提醒": "設備解绑提醒", + "位置权限说明": "位置權限說明", + "获得位置信息,连接附近的蓝牙设备与推荐附近门店": "獲得位置信息,連接附近的藍牙設備與推薦附近門店", + "蓝牙权限说明": "藍牙權限說明", + "搜索链接附近的蓝牙设备": "搜索連接附近的藍牙設備", + "附近设备权限说明": "附近設備權限說明", + "平均心率": "平均心率", + "平均hrv": "平均hrv", + "平均呼吸": "平均呼吸", + "在床时长": "在床時長", + "生命体征指的是睡眠周期的整体数据。": "生命體徵指的是睡眠週期的整體數據。" } \ No newline at end of file diff --git a/lib/common/util/Dio.dart b/lib/common/util/Dio.dart index 0f9dcf7..8f82702 100644 --- a/lib/common/util/Dio.dart +++ b/lib/common/util/Dio.dart @@ -15,201 +15,6 @@ class ApiService { static Dio reservation = Dio(); static void init() { - // 添加全局配置,如基础URL、 - // 拦截器等 - - // dio.httpClientAdapter = IOHttpClientAdapter( - // createHttpClient: () { - // final client = HttpClient(); - // client.badCertificateCallback = - // (X509Certificate cert, String host, int port) { - // return true; // Verify the certificate. - // }; - // return client; - // }, - // ); - - // request.options.baseUrl = CommonVariables.apiUrl; - // request.options.connectTimeout = const Duration(seconds: 15); - // request.options.receiveTimeout = const Duration(seconds: 10); - // request.options.sendTimeout = const Duration(seconds: 10); - // dio.options.headers['Content-Type'] = "application/json"; - // dio.options.headers['Token'] = "1"; - // 添加其他配置... - - // 添加拦截器(可选) - // request.interceptors.add(InterceptorsWrapper( - // onRequest: (options, handler) { - // print("---> ${options.method}, ${options.path}, ${options.data}"); - // options.headers['token'] = Get.find().model.token; - // print("${options.headers['token']}"); - // return handler.next(options); - // }, - // onResponse: (response, ResponseInterceptorHandler handler) { - // // 在响应处理前的操作,例如解析响应数据 - // // if (response.realUri.toString().contains("/login")) { - // // String? token = response.headers.value('token'); - // // if (token != null) { - // // print("token = ${token}"); - // // Get.find().token.value = token; - // // } - // // } - // print("<--- ${response.statusCode}, ${response.data}"); - // if (response.data is Map) { - // if (response.data['code'] == HttpStatusCodes.ok) { - // return handler.next(response); - // } else { - // if (response.data['code'] == 10011) { - // Get.offAndToNamed( - // "/loginPage", - // ); - // GlobalController globalController = Get.find(); - // globalController.resetParmAll(); - // showCustomConfirmDialog(Get.context!, "当前用户已在别处登录,请确认账号密码安全!", - // btnName: "确定", icon: ConfirmDialogIcon.warn) - // .then((d) { - // if (d == "confirm") { - // Get.back(); - // } - // }); - // } else if (response.data['code'] == 11004) { - // showCustomConfirmAndCancelDialog(Get.context!, "当前用户已登录,是否重新登录", - // confirmName: "确定", cancelName: "取消") - // .then((d) async { - // if (d == "confirm") { - // LoginController loginController = Get.find(); - // loginController.model.forceLogin = 1; - // String msg = await loginController.login(Get.context!); - // if (msg == null || msg.isEmpty) { - // Get.offAndToNamed("/mianPageBottomChange"); - // } - // } else if (d == "cancel") { - // // Get.offAndToNamed( - // // "/loginPage", - // // ); - // Get.back(); - // } - // }); - // } else if (response.data['code'] == 10009 || - // response.data['code'] == 11007 || - // response.data['code'] == 11008) { - // // 有可能对象获取不到,所以try catch包住 - // try { - // GlobalController globalController = - // Get.find(); - // globalController.resetParmAll(); - // UserInfoController userInfoController = - // Get.find(); - // userInfoController.model.token = null; - // userInfoController.model.user = null; - // userInfoController.model.login = 0; - // userInfoController.model.message = 0; - // LoginController loginController = Get.find(); - // loginController.model.account = null; - // loginController.model.password = null; - // loginController.model.phone = null; - // loginController.model.code = null; - // } catch (e) { - // print(e); - // } - // final box = GetStorage(); - // box.remove('user'); - // box.remove('token'); - // showToast(response.data["msg"]); - // } else if (response.data['code'] == 11005) { - // if (response.data['code'] == 11005) { - // var authUserData = response.data['data']; - // AuthBindTelController authBindTelController = Get.find(); - // authBindTelController.model.authUserInfo = authUserData; - // Get.toNamed("/auth_bind_tel"); - // } - // } else { - // showToast(response.data["msg"]); - // } - - // return handler.reject( - // DioException( - // requestOptions: RequestOptions(data: response.data['msg']), - // message: response.data['msg']), - // ); - // } - // } - // return handler.next(response); - // }, - // onError: (e, handler) { - // // 错误处理,例如打印错误信息 - // showToast("网络异常或服务连接异常,请稍候再试", color: color_error); - // print("DioError: $e"); - // return handler.reject(e); - // }, - // )); - - // requestNoInfo.options.baseUrl = CommonVariables.apiUrl; - // requestNoInfo.options.connectTimeout = const Duration(seconds: 15); - // requestNoInfo.options.receiveTimeout = const Duration(seconds: 10); - // requestNoInfo.options.sendTimeout = const Duration(seconds: 10); - // requestNoInfo.interceptors.add(InterceptorsWrapper( - // onRequest: (options, handler) { - // print("---> ${options.method}, ${options.path}, ${options.data}"); - // options.headers['token'] = Get.find().model.token; - // print("${options.headers['token']}"); - // return handler.next(options); - // }, - // onResponse: (response, ResponseInterceptorHandler handler) { - // // 在响应处理前的操作,例如解析响应数据 - // // if (response.realUri.toString().contains("/login")) { - // // String? token = response.headers.value('token'); - // // if (token != null) { - // // print("token = ${token}"); - // // Get.find().token.value = token; - // // } - // // } - // print("<--- ${response.statusCode}, ${response.data}"); - // if (response.data is Map) { - // if (response.data['code'] == HttpStatusCodes.ok) { - // return handler.next(response); - // } else { - // // showToast(response.data["msg"]); - // return handler.reject( - // DioException( - // requestOptions: RequestOptions(data: response.data['msg']), - // message: response.data['msg'], - // ), - // ); - // } - // } - // return handler.next(response); - // }, - // onError: (e, handler) { - // // 错误处理,例如打印错误信息 - // showToast("网络异常或服务连接异常,请稍候再试", color: color_error); - // print("DioError: $e"); - // return handler.reject(e); - // }, - // )); - - // requestNoError.options.baseUrl = CommonVariables.apiUrl; - // requestNoError.options.connectTimeout = const Duration(seconds: 5); - // requestNoError.options.receiveTimeout = const Duration(seconds: 3); - // requestNoError.options.sendTimeout = const Duration(seconds: 3); - // requestNoError.interceptors.add(InterceptorsWrapper( - // onRequest: (options, handler) { - // print( - // "requestNoError---> ${options.method}, ${options.path}, ${options.data}"); - // options.headers['token'] = Get.find().model.token; - // print("${options.headers['token']}"); - // return handler.next(options); - // }, - // onResponse: (response, ResponseInterceptorHandler handler) { - // print("requestNoError<--- ${response.statusCode}, ${response.data}"); - // return handler.next(response); - // }, - // onError: (e, handler) { - // // 错误处理,例如打印错误信息 - // print("requestNoError-->DioError: $e"); - // return handler.reject(e); - // }, - // )); reservationInit(); } diff --git a/lib/controller/login/login_controller.dart b/lib/controller/login/login_controller.dart index defc3b0..cd85ef0 100644 --- a/lib/controller/login/login_controller.dart +++ b/lib/controller/login/login_controller.dart @@ -243,6 +243,17 @@ class LoginController extends GetControllerEx { final box = GetStorage(); box.write('token', token); // 存储 token box.write('user', userInfoController.model.user!.toJson()); // 存储用户信息 + if (userInfoController.model.user!.phone == null || + userInfoController.model.user!.phone!.isEmpty) { + Map data = { + 'img': "assets/img/bgNoImg.png", + }; + await Get.toNamed("/auth_bind_tel", arguments: data); + } + if (userInfoController.model.user!.phone == null || + userInfoController.model.user!.phone!.isEmpty) { + userInfoController.model.login = 0; + } } return apiResponse; } diff --git a/lib/main.dart b/lib/main.dart index 75cd109..ee2b3b8 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -79,6 +79,7 @@ import 'package:vbvs_app/pages/mh_page/user/controller/bind_tel_controller.dart' import 'package:vbvs_app/pages/mh_page/user/controller/mht_login_controller.dart'; import 'package:vbvs_app/pages/mh_page/user/controller/mht_register_controller.dart'; import 'package:vbvs_app/pages/mh_page/user/controller/update_password_controller.dart'; +import 'package:vbvs_app/pages/mh_page/user/page/bind_tel_page.dart'; import 'package:vbvs_app/routers/mh_routers.dart'; import 'controller/mh_controller/apply_repair_controller.dart'; @@ -166,13 +167,13 @@ void initwebService() { initLanguageSetting() async { try { Get.put(MHLanguageController()); + Get.put(LanguageController()); int code = AppConstants().ent_type; if (APPPackageType.MHT.code == code) { Get.put(MHTHomeController()); MHLanguageController mhLanguageController = Get.find(); await mhLanguageController.initLanuageList(); } else { - Get.put(LanguageController()); LanguageController languageController = Get.find(); await languageController.initLanuageList(); } @@ -186,7 +187,7 @@ Future initWX() async { Fluwx fluwx = Fluwx(); fluwx.registerApi( //请填写自己的微信appid - // appId: "wxeb2688220799e2c5",//太和 + // appId: "wxeb2688220799e2c5", //太和 appId: "wx929c548fea6af9c7", //眠花糖 doOnAndroid: true, doOnIOS: true, @@ -694,6 +695,7 @@ class MyApp extends StatelessWidget { Get.lazyPut(() => MessageReviewController()), Get.lazyPut(() => MessageSettingController()), Get.lazyPut(() => CommonMessageSettingController()), + Get.lazyPut(() => AuthBindTelController()), ])); } diff --git a/lib/pages/device_bind/device_type.dart b/lib/pages/device_bind/device_type.dart index c0a6f64..dccd9eb 100644 --- a/lib/pages/device_bind/device_type.dart +++ b/lib/pages/device_bind/device_type.dart @@ -390,9 +390,8 @@ class _EPageState extends State { if (type != null) { if (type == 1) { Get.toNamed("/blueteethDevice"); - } - if (type == 2) { - TopSlideNotification.show( + }else{ + TopSlideNotification.show( context, text: "待开发.提示".tr, textColor: themeController.currentColor.sc2, diff --git a/lib/pages/login/other_login.dart b/lib/pages/login/other_login.dart index 4722ee3..519f99b 100644 --- a/lib/pages/login/other_login.dart +++ b/lib/pages/login/other_login.dart @@ -20,8 +20,6 @@ import 'package:vbvs_app/controller/theme_controller/ThemeController.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/pages/user/privacy_scheme_page.dart'; -import 'package:vbvs_app/pages/user/user_scheme_page.dart'; class OtherLoginPage extends StatefulWidget { const OtherLoginPage({super.key}); diff --git a/lib/pages/mh_page/bluetooth.dart b/lib/pages/mh_page/bluetooth.dart index d11ecd5..7019727 100644 --- a/lib/pages/mh_page/bluetooth.dart +++ b/lib/pages/mh_page/bluetooth.dart @@ -279,7 +279,7 @@ class _BluetoothPageState extends State { arguments: obsData, ), _buildMenuButton( - context, '睡眠习惯', "/sleepHabitPage"), + context, '睡眠习惯'.tr, "/sleepHabitPage"), _buildMenuButton( context, '分享设备'.tr, "/deviceSharePage", arguments: obsData), diff --git a/lib/pages/mh_page/user/controller/bind_tel_controller.dart b/lib/pages/mh_page/user/controller/bind_tel_controller.dart index eb755f3..2742c43 100644 --- a/lib/pages/mh_page/user/controller/bind_tel_controller.dart +++ b/lib/pages/mh_page/user/controller/bind_tel_controller.dart @@ -94,7 +94,7 @@ class AuthBindTelController extends GetControllerEx { // } } - getCode(BuildContext context) async { + getCode(BuildContext context, [Map? img]) async { String message = ""; if (model.phone == null || model.phone!.isEmpty) { message = "请输入手机号".tr; @@ -116,7 +116,11 @@ class AuthBindTelController extends GetControllerEx { "userName": model.phone!, 'type': 5, }; - data['code'] = "mht"; + if (img != null) { + if (img!['code'] != null) { + data['code'] = img!['code']; + } + } await requestWithLog( logTitle: "获取验证码".tr, method: MyHttpMethod.post, @@ -147,7 +151,7 @@ class AuthBindTelController extends GetControllerEx { String serviceApi = ServiceConstant.user_info; String queryUrl = "${serviceAddress}${serviceName}${serviceApi}"; String? language = ""; - if (languageController.selectLanguage != null) { + if (languageController.selectLanguage.value != null) { language = languageController.selectLanguage.value!.language_code; } if (language != null && language.isNotEmpty) { 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 d1435eb..43ab9ef 100644 --- a/lib/pages/mh_page/user/controller/mht_login_controller.dart +++ b/lib/pages/mh_page/user/controller/mht_login_controller.dart @@ -271,12 +271,6 @@ class MHTLoginController extends GetControllerEx { queryUrl: queryUrl, data: data); if (apiResponse.code == HttpStatusCodes.ok) { - // UserInfoController userInfoController = Get.find(); - // if (userInfoController.model.user!.phone == null || - // userInfoController.model.user!.phone!.isEmpty) { - // Get.toNamed("/auth_bind_tel"); - // return; - // } UserInfoController userInfoController = Get.find(); userInfoController.model.user = UserModel.fromJson(apiResponse.data); userInfoController.model.login = 1; @@ -287,7 +281,7 @@ class MHTLoginController extends GetControllerEx { box.write('user', userInfoController.model.user!.toJson()); // 存储用户信息 if (userInfoController.model.user!.phone == null || userInfoController.model.user!.phone!.isEmpty) { - await Get.toNamed("/auth_bind_tel"); + await Get.toNamed("/auth_bind_tel", arguments: {'code':'mht'}); } if (userInfoController.model.user!.phone == null || userInfoController.model.user!.phone!.isEmpty) { diff --git a/lib/pages/mh_page/user/page/bind_tel_page.dart b/lib/pages/mh_page/user/page/bind_tel_page.dart index 03fc204..2e8fbc2 100644 --- a/lib/pages/mh_page/user/page/bind_tel_page.dart +++ b/lib/pages/mh_page/user/page/bind_tel_page.dart @@ -17,9 +17,12 @@ import 'package:vbvs_app/pages/mh_page/user/controller/mht_login_controller.dart class BindTelWidget extends GetView { BoxConstraints? bodysize; + Map img; final scaffoldKey = GlobalKey(); + BindTelWidget({super.key, required this.img}); + @override Widget build(BuildContext context) { return LayoutBuilder(builder: (context, cc) { @@ -28,7 +31,9 @@ class BindTelWidget extends GetView { // onTap: () => FocusScope.of(context).unfocus(), decoration: BoxDecoration( image: DecorationImage( - image: AssetImage('assets/images/new_background.png'), + image: AssetImage((img!['img'] == null || "" == img!['img']) + ? 'assets/images/new_background.png' + : img!['img']!), fit: BoxFit.fill, ), ), @@ -304,7 +309,7 @@ class BindTelWidget extends GetView { } String msg = await controller - .getCode(context); + .getCode(context,img); if (msg.isNotEmpty) { return; } diff --git a/lib/pages/sleep_report/component/Vital_signs.dart b/lib/pages/sleep_report/component/Vital_signs.dart index af46c10..42b86b6 100644 --- a/lib/pages/sleep_report/component/Vital_signs.dart +++ b/lib/pages/sleep_report/component/Vital_signs.dart @@ -223,7 +223,7 @@ class _VitalSignsWidgetState extends State { onPressed: () { MHTHomeController homeController = Get.find(); Get.toNamed("/newSleepReportPage", arguments: { - 'date': widget.sleepReport['startTime'], + 'date': widget.sleepReport['endTime'], "mac": homeController.selectDevcie.value, 'type': 1, 'backgroundImg': 'assets/images/new_background.png', diff --git a/lib/pages/sleep_report/component/new_sleep_view.dart b/lib/pages/sleep_report/component/new_sleep_view.dart index 3cd1590..b09856d 100644 --- a/lib/pages/sleep_report/component/new_sleep_view.dart +++ b/lib/pages/sleep_report/component/new_sleep_view.dart @@ -154,7 +154,7 @@ class _NewSleepViewWidgetState extends State { Container( alignment: Alignment(-1, 0), child: Text( - "在床时长 ${formatDecimalHoursWithTr(matched['value'])}", + "在床时长".tr + " ${formatDecimalHoursWithTr(matched['value'])}", style: TextStyle(color: Color(0xFF929699), fontSize: 20.rpx), ), ), @@ -258,7 +258,7 @@ class _NewSleepViewWidgetState extends State { onPressed: () { MHTHomeController homeController = Get.find(); Get.toNamed("/newSleepReportPage", arguments: { - 'date': widget.sleepReport['startTime'], + 'date': widget.sleepReport['endTime'], "mac": homeController.selectDevcie.value, 'type': 1, 'backgroundImg': 'assets/images/new_background.png', diff --git a/lib/routers/mh_routers.dart b/lib/routers/mh_routers.dart index 9f7e627..cb605fa 100644 --- a/lib/routers/mh_routers.dart +++ b/lib/routers/mh_routers.dart @@ -129,7 +129,9 @@ var mhroutes = { "/mhtWifiAfterPage": (contxt, {arguments}) => MHTWifiAfterPage(deviceInfo: arguments), "/deleteAccount": (context, {arguments}) => DeletedAccountPage(), - "/auth_bind_tel": (context) => BindTelWidget(), + "/auth_bind_tel": (context, {arguments}) => BindTelWidget( + img: arguments, + ), }; var mhonGenerateRoute = (RouteSettings settings) { final String? name = settings.name; // 获取路由名称,如 /news 或 /search diff --git a/lib/routers/routers.dart b/lib/routers/routers.dart index 12bb063..0c2f06b 100644 --- a/lib/routers/routers.dart +++ b/lib/routers/routers.dart @@ -31,6 +31,7 @@ import 'package:vbvs_app/pages/main_bottom/home_page.dart'; import 'package:vbvs_app/pages/main_bottom/main_page_bottom_change.dart'; import 'package:vbvs_app/pages/main_bottom/message_page.dart'; import 'package:vbvs_app/pages/main_bottom/mine_page.dart'; +import 'package:vbvs_app/pages/mh_page/user/page/bind_tel_page.dart'; import 'package:vbvs_app/pages/person/person_page.dart'; import 'package:vbvs_app/pages/person/update_person_page.dart'; import 'package:vbvs_app/pages/repair/apply_repair_page.dart'; @@ -105,8 +106,10 @@ var routes = { "/afterWifiPagePerson": (contxt, {arguments}) => AfterWifiPagePerson( type: arguments, ), - "/deleteAccount": (context, {arguments}) =>LogoutPage(), - + "/deleteAccount": (context, {arguments}) => LogoutPage(), + "/auth_bind_tel": (context, {arguments}) => BindTelWidget( + img: arguments, + ), }; var onGenerateRoute = (RouteSettings settings) {